diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 568d48e556b..9702a361e70 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -13,3 +13,8 @@ updates: labels: - "dependencies" - "pip" + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + target-branch: master diff --git a/.github/labeler.yml b/.github/labeler.yml new file mode 100644 index 00000000000..d4df3619b36 --- /dev/null +++ b/.github/labeler.yml @@ -0,0 +1,27 @@ +documentation: + - changed-files: + - any-glob-to-any-file: "docs/**" + +provider/aws: + - changed-files: + - any-glob-to-any-file: "prowler/providers/aws/**" + - any-glob-to-any-file: "tests/providers/aws/**" + +provider/azure: + - changed-files: + - any-glob-to-any-file: "prowler/providers/azure/**" + - any-glob-to-any-file: "tests/providers/azure/**" + +provider/gcp: + - changed-files: + - any-glob-to-any-file: "prowler/providers/gcp/**" + - any-glob-to-any-file: "tests/providers/gcp/**" + +provider/kubernetes: + - changed-files: + - any-glob-to-any-file: "prowler/providers/kubernetes/**" + - any-glob-to-any-file: "tests/providers/kubernetes/**" + +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 new file mode 100644 index 00000000000..015a3742d65 --- /dev/null +++ b/.github/workflows/build-documentation-on-pr.yml @@ -0,0 +1,24 @@ +name: Pull Request Documentation Link + +on: + pull_request: + branches: + - 'master' + - 'prowler-4.0-dev' + paths: + - 'docs/**' + +env: + PR_NUMBER: ${{ github.event.pull_request.number }} + +jobs: + documentation-link: + name: Documentation Link + runs-on: ubuntu-latest + steps: + - name: Leave PR comment with the SaaS Documentation URI + uses: peter-evans/create-or-update-comment@v4 + with: + issue-number: ${{ env.PR_NUMBER }} + body: | + You can check the documentation for this PR here -> [SaaS Documentation](https://prowler-prowler-docs--${{ env.PR_NUMBER }}.com.readthedocs.build/projects/prowler-open-source/en/${{ env.PR_NUMBER }}/) diff --git a/.github/workflows/build-lint-push-containers.yml b/.github/workflows/build-lint-push-containers.yml index 2e8ec437504..43fd281c13a 100644 --- a/.github/workflows/build-lint-push-containers.yml +++ b/.github/workflows/build-lint-push-containers.yml @@ -32,11 +32,11 @@ jobs: POETRY_VIRTUALENVS_CREATE: "false" steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup python (release) if: github.event_name == 'release' - uses: actions/setup-python@v2 + uses: actions/setup-python@v5 with: python-version: ${{ env.PYTHON_VERSION }} @@ -52,13 +52,13 @@ jobs: poetry version ${{ github.event.release.tag_name }} - name: Login to DockerHub - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Login to Public ECR - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: registry: public.ecr.aws username: ${{ secrets.PUBLIC_ECR_AWS_ACCESS_KEY_ID }} @@ -67,11 +67,11 @@ jobs: AWS_REGION: ${{ env.AWS_REGION }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@v3 - name: Build and push container image (latest) if: github.event_name == 'push' - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v5 with: push: true tags: | @@ -83,7 +83,7 @@ jobs: - name: Build and push container image (release) if: github.event_name == 'release' - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v5 with: # Use local context to get changes # https://github.com/docker/build-push-action#path-context diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index b02607fe38e..a788c10cbbb 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -37,11 +37,11 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@v3 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -52,6 +52,6 @@ jobs: # queries: security-extended,security-and-quality - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 + uses: github/codeql-action/analyze@v3 with: category: "/language:${{matrix.language}}" diff --git a/.github/workflows/find-secrets.yml b/.github/workflows/find-secrets.yml index f5166d3e8b9..6428ee0a0ad 100644 --- a/.github/workflows/find-secrets.yml +++ b/.github/workflows/find-secrets.yml @@ -7,11 +7,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: TruffleHog OSS - uses: trufflesecurity/trufflehog@v3.4.4 + uses: trufflesecurity/trufflehog@v3.68.2 with: path: ./ base: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml new file mode 100644 index 00000000000..25d6135bc47 --- /dev/null +++ b/.github/workflows/labeler.yml @@ -0,0 +1,16 @@ +name: "Pull Request Labeler" + +on: + pull_request_target: + branches: + - "master" + - "prowler-4.0-dev" + +jobs: + labeler: + permissions: + contents: read + pull-requests: write + runs-on: ubuntu-latest + steps: + - uses: actions/labeler@v5 diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 6353157b66d..a884abc3a26 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -14,13 +14,13 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.9", "3.10", "3.11"] + python-version: ["3.9", "3.10", "3.11", "3.12"] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Test if changes are in not ignored paths id: are-non-ignored-files-changed - uses: tj-actions/changed-files@v39 + uses: tj-actions/changed-files@v42 with: files: ./** files_ignore: | @@ -28,6 +28,7 @@ jobs: README.md docs/** permissions/** + mkdocs.yml - name: Install poetry if: steps.are-non-ignored-files-changed.outputs.any_changed == 'true' run: | @@ -35,7 +36,7 @@ jobs: pipx install poetry - name: Set up Python ${{ matrix.python-version }} if: steps.are-non-ignored-files-changed.outputs.any_changed == 'true' - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} cache: "poetry" @@ -87,6 +88,6 @@ jobs: poetry run pytest -n auto --cov=./prowler --cov-report=xml tests - name: Upload coverage reports to Codecov if: steps.are-non-ignored-files-changed.outputs.any_changed == 'true' - uses: codecov/codecov-action@v3 + uses: codecov/codecov-action@v4 env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/pypi-release.yml b/.github/workflows/pypi-release.yml index 59b8af68de7..53289f1c2ea 100644 --- a/.github/workflows/pypi-release.yml +++ b/.github/workflows/pypi-release.yml @@ -16,7 +16,7 @@ jobs: name: Release Prowler to PyPI steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: ref: ${{ env.GITHUB_BRANCH }} - name: Install dependencies @@ -24,7 +24,7 @@ jobs: pipx install poetry pipx inject poetry poetry-bumpversion - name: setup python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: 3.9 cache: 'poetry' @@ -44,7 +44,7 @@ jobs: poetry publish # Create pull request with new version - name: Create Pull Request - uses: peter-evans/create-pull-request@v4 + uses: peter-evans/create-pull-request@v6 with: token: ${{ secrets.PROWLER_ACCESS_TOKEN }} commit-message: "chore(release): update Prowler Version to ${{ env.RELEASE_TAG }}." diff --git a/.github/workflows/refresh_aws_services_regions.yml b/.github/workflows/refresh_aws_services_regions.yml index e22bedc3334..fea14d3bce6 100644 --- a/.github/workflows/refresh_aws_services_regions.yml +++ b/.github/workflows/refresh_aws_services_regions.yml @@ -23,12 +23,12 @@ jobs: # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: ref: ${{ env.GITHUB_BRANCH }} - name: setup python - uses: actions/setup-python@v2 + uses: actions/setup-python@v5 with: python-version: 3.9 #install the python needed @@ -38,7 +38,7 @@ jobs: pip install boto3 - name: Configure AWS Credentials -- DEV - uses: aws-actions/configure-aws-credentials@v1 + uses: aws-actions/configure-aws-credentials@v4 with: aws-region: ${{ env.AWS_REGION_DEV }} role-to-assume: ${{ secrets.DEV_IAM_ROLE_ARN }} @@ -50,12 +50,12 @@ jobs: # Create pull request - name: Create Pull Request - uses: peter-evans/create-pull-request@v4 + uses: peter-evans/create-pull-request@v6 with: token: ${{ secrets.PROWLER_ACCESS_TOKEN }} commit-message: "feat(regions_update): Update regions for AWS services." branch: "aws-services-regions-updated-${{ github.sha }}" - labels: "status/waiting-for-revision, severity/low" + labels: "status/waiting-for-revision, severity/low, provider/aws" title: "chore(regions_update): Changes in regions for AWS services." body: | ### Description diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9c01e1d92ef..d58fc12bb1d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ repos: ## GENERAL - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.4.0 + rev: v4.5.0 hooks: - id: check-merge-conflict - id: check-yaml @@ -15,7 +15,7 @@ repos: ## TOML - repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks - rev: v2.10.0 + rev: v2.12.0 hooks: - id: pretty-format-toml args: [--autofix] @@ -28,7 +28,7 @@ repos: - id: shellcheck ## PYTHON - repo: https://github.com/myint/autoflake - rev: v2.2.0 + rev: v2.2.1 hooks: - id: autoflake args: @@ -39,25 +39,25 @@ repos: ] - repo: https://github.com/timothycrosley/isort - rev: 5.12.0 + rev: 5.13.2 hooks: - id: isort args: ["--profile", "black"] - repo: https://github.com/psf/black - rev: 22.12.0 + rev: 24.1.1 hooks: - id: black - repo: https://github.com/pycqa/flake8 - rev: 6.1.0 + rev: 7.0.0 hooks: - id: flake8 exclude: contrib args: ["--ignore=E266,W503,E203,E501,W605"] - repo: https://github.com/python-poetry/poetry - rev: 1.6.0 # add version here + rev: 1.7.0 hooks: - id: poetry-check - id: poetry-lock @@ -80,18 +80,12 @@ repos: - id: trufflehog name: TruffleHog description: Detect secrets in your data. - # entry: bash -c 'trufflehog git file://. --only-verified --fail' + entry: bash -c 'trufflehog --no-update git file://. --only-verified --fail' # For running trufflehog in docker, use the following entry instead: - entry: bash -c 'docker run -v "$(pwd):/workdir" -i --rm trufflesecurity/trufflehog:latest git file:///workdir --only-verified --fail' + # entry: bash -c 'docker run -v "$(pwd):/workdir" -i --rm trufflesecurity/trufflehog:latest git file:///workdir --only-verified --fail' language: system stages: ["commit", "push"] - - id: pytest-check - name: pytest-check - entry: bash -c 'pytest tests -n auto' - language: system - files: '.*\.py' - - id: bandit name: bandit description: "Bandit is a tool for finding common security issues in Python code" diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 557613e35f5..17d338d2e97 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -8,16 +8,18 @@ version: 2 build: os: "ubuntu-22.04" tools: - python: "3.9" + python: "3.11" jobs: post_create_environment: # Install poetry # https://python-poetry.org/docs/#installing-manually - - pip install poetry - # Tell poetry to not use a virtual environment - - poetry config virtualenvs.create false + - python -m pip install poetry post_install: - - poetry install -E docs + # Install dependencies with 'docs' dependency group + # https://python-poetry.org/docs/managing-dependencies/#dependency-groups + # VIRTUAL_ENV needs to be set manually for now. + # See https://github.com/readthedocs/readthedocs.org/pull/11152/ + - VIRTUAL_ENV=${READTHEDOCS_VIRTUALENV_PATH} python -m poetry install --only=docs mkdocs: configuration: mkdocs.yml diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 419b6d76be5..c4bba21640d 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -55,7 +55,7 @@ further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at community@prowler.cloud. All +reported by contacting the project team at [support.prowler.com](https://customer.support.prowler.com/servicedesk/customer/portals). All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. diff --git a/README.md b/README.md index 82ab6fe4eeb..43c6f53dae5 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,31 @@

- - + +

- See all the things you and your team can do with ProwlerPro at prowler.pro + Prowler SaaS and Prowler Open Source are as dynamic and adaptable as the environment they’re meant to protect. Trusted by the leaders in security.

-

- +Learn more at prowler.com +

+ +

+Prowler community on Slack +
+Join our Prowler community!

+ +

Slack Shield Python Version Python Version PyPI Prowler Downloads - PyPI Prowler-Cloud Downloads Docker Pulls Docker Docker AWS ECR Gallery +

Repo size @@ -30,6 +37,7 @@ Twitter Twitter

+
# Description @@ -37,16 +45,16 @@ It contains hundreds of controls covering CIS, NIST 800, NIST CSF, CISA, RBI, FedRAMP, PCI-DSS, GDPR, HIPAA, FFIEC, SOC2, GXP, AWS Well-Architected Framework Security Pillar, AWS Foundational Technical Review (FTR), ENS (Spanish National Security Scheme) and your custom security frameworks. -| Provider | Checks | Services | [Compliance Frameworks](https://docs.prowler.cloud/en/latest/tutorials/compliance/) | [Categories](https://docs.prowler.cloud/en/latest/tutorials/misc/#categories) | +| 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) | |---|---|---|---|---| -| AWS | 301 | 61 -> `prowler aws --list-services` | 25 -> `prowler aws --list-compliance` | 5 -> `prowler aws --list-categories` | +| AWS | 302 | 61 -> `prowler aws --list-services` | 27 -> `prowler aws --list-compliance` | 6 -> `prowler aws --list-categories` | | GCP | 73 | 11 -> `prowler gcp --list-services` | 1 -> `prowler gcp --list-compliance` | 2 -> `prowler gcp --list-categories`| -| Azure | 23 | 4 -> `prowler azure --list-services` | CIS soon | 1 -> `prowler azure --list-categories` | -| Kubernetes | Planned | - | - | - | +| Azure | 37 | 4 -> `prowler azure --list-services` | CIS soon | 1 -> `prowler azure --list-categories` | +| Kubernetes | Work In Progress | - | CIS soon | - | # 📖 Documentation -The full documentation can now be found at [https://docs.prowler.cloud](https://docs.prowler.cloud) +The full documentation can now be found at [https://docs.prowler.com](https://docs.prowler.com/projects/prowler-open-source/en/latest/) ## Looking for Prowler v2 documentation? For Prowler v2 Documentation, please go to https://github.com/prowler-cloud/prowler/tree/2.12.1. @@ -54,13 +62,13 @@ For Prowler v2 Documentation, please go to https://github.com/prowler-cloud/prow # ⚙️ Install ## Pip package -Prowler is available as a project in [PyPI](https://pypi.org/project/prowler-cloud/), thus can be installed using pip with Python >= 3.9: +Prowler is available as a project in [PyPI](https://pypi.org/project/prowler-cloud/), thus can be installed using pip with Python >= 3.9, < 3.13: ```console pip install prowler prowler -v ``` -More details at https://docs.prowler.cloud +More details at [https://docs.prowler.com](https://docs.prowler.com/projects/prowler-open-source/en/latest/) ## Containers @@ -77,7 +85,7 @@ The container images are available here: ## From Github -Python >= 3.9 is required with pip and poetry: +Python >= 3.9, < 3.13 is required with pip and poetry: ``` git clone https://github.com/prowler-cloud/prowler diff --git a/SECURITY.md b/SECURITY.md index 288befc6786..9fd92708107 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -14,7 +14,7 @@ As an **AWS Partner** and we have passed the [AWS Foundation Technical Review (F If you would like to report a vulnerability or have a security concern regarding Prowler Open Source or ProwlerPro service, please submit the information by contacting to help@prowler.pro. -The information you share with Verica as part of this process is kept confidential within Verica and the Prowler team. We will only share this information with a third party if the vulnerability you report is found to affect a third-party product, in which case we will share this information with the third-party product's author or manufacturer. Otherwise, we will only share this information as permitted by you. +The information you share with ProwlerPro as part of this process is kept confidential within ProwlerPro. We will only share this information with a third party if the vulnerability you report is found to affect a third-party product, in which case we will share this information with the third-party product's author or manufacturer. Otherwise, we will only share this information as permitted by you. We will review the submitted report, and assign it a tracking number. We will then respond to you, acknowledging receipt of the report, and outline the next steps in the process. diff --git a/docs/developer-guide/checks.md b/docs/developer-guide/checks.md index 9f72221daf8..6ab6b217735 100644 --- a/docs/developer-guide/checks.md +++ b/docs/developer-guide/checks.md @@ -196,14 +196,17 @@ aws: As you can see in the above code, within the service client, in this case the `ec2_client`, there is an object called `audit_config` which is a Python dictionary containing the values read from the configuration file. In order to use it, you have to check first if the value is present in the configuration file. If the value is not present, you can create it in the `config.yaml` file and then, read it from the check. -> It is mandatory to always use the `dictionary.get(value, default)` syntax to set a default value in the case the configuration value is not present. + +???+ note + It is mandatory to always use the `dictionary.get(value, default)` syntax to set a default value in the case the configuration value is not present. ## Check Metadata Each Prowler check has metadata associated which is stored at the same level of the check's folder in a file called A `check_name.metadata.json` containing the check's metadata. -> We are going to include comments in this example metadata JSON but they cannot be included because the JSON format does not allow comments. +???+ note + We are going to include comments in this example metadata JSON but they cannot be included because the JSON format does not allow comments. ```json { diff --git a/docs/developer-guide/debugging.md b/docs/developer-guide/debugging.md new file mode 100644 index 00000000000..e6b20d60752 --- /dev/null +++ b/docs/developer-guide/debugging.md @@ -0,0 +1,45 @@ +# Debugging + +Debugging in Prowler make things easier! +If you are developing Prowler, it's possible that you will encounter some situations where you have to inspect the code in depth to fix some unexpected issues during the execution. To do that, if you are using VSCode you can run the code using the integrated debugger. Please, refer to this [documentation](https://code.visualstudio.com/docs/editor/debugging) for guidance about the debugger in VSCode. +The following file is an example of the [debugging configuration](https://code.visualstudio.com/docs/editor/debugging#_launch-configurations) file that you can add to [Virtual Studio Code](https://code.visualstudio.com/). + +This file should inside the *.vscode* folder and its name has to be *launch.json*: + +```json +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Python: Current File", + "type": "python", + "request": "launch", + "program": "prowler.py", + "args": [ + "aws", + "-f", + "eu-west-1", + "--service", + "cloudwatch", + "--log-level", + "ERROR", + "-p", + "dev", + ], + "console": "integratedTerminal", + "justMyCode": false + }, + { + "name": "Python: Debug Tests", + "type": "python", + "request": "launch", + "program": "${file}", + "purpose": [ + "debug-test" + ], + "console": "integratedTerminal", + "justMyCode": false + } + ] +} +``` diff --git a/docs/developer-guide/introduction.md b/docs/developer-guide/introduction.md index 6617ca81703..4dac193f439 100644 --- a/docs/developer-guide/introduction.md +++ b/docs/developer-guide/introduction.md @@ -1,6 +1,6 @@ # Developer Guide -You can extend Prowler in many different ways, in most cases you will want to create your own checks and compliance security frameworks, here is where you can learn about how to get started with it. We also include how to create custom outputs, integrations and more. +You can extend Prowler Open Source in many different ways, in most cases you will want to create your own checks and compliance security frameworks, here is where you can learn about how to get started with it. We also include how to create custom outputs, integrations and more. ## Get the code and install all dependencies @@ -16,7 +16,7 @@ pip install poetry ``` Then install all dependencies including the ones for developers: ``` -poetry install +poetry install --with dev poetry shell ``` @@ -31,7 +31,9 @@ You should get an output like the following: pre-commit installed at .git/hooks/pre-commit ``` -Before we merge any of your pull requests we pass checks to the code, we use the following tools and automation to make sure the code is secure and dependencies up-to-dated (these should have been already installed if you ran `pipenv install -d`): +Before we merge any of your pull requests we pass checks to the code, we use the following tools and automation to make sure the code is secure and dependencies up-to-dated: +???+ note + These should have been already installed if you ran `poetry install --with dev` - [`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. diff --git a/docs/developer-guide/unit-testing.md b/docs/developer-guide/unit-testing.md index e5f73149067..323d47e6f77 100644 --- a/docs/developer-guide/unit-testing.md +++ b/docs/developer-guide/unit-testing.md @@ -40,13 +40,15 @@ Other commands to run tests: - Run tests for a provider service: `pytest -n auto -vvv -s -x tests/providers//services/` - Run tests for a provider check: `pytest -n auto -vvv -s -x tests/providers//services//` -> Refer to the [pytest documentation](https://docs.pytest.org/en/7.1.x/getting-started.html) documentation for more information. +???+ note + Refer to the [pytest documentation](https://docs.pytest.org/en/7.1.x/getting-started.html) documentation for more information. ## AWS For the AWS provider we have ways to test a Prowler check based on the following criteria: -> Note: We use and contribute to the [Moto](https://github.com/getmoto/moto) library which allows us to easily mock out tests based on AWS infrastructure. **It's awesome!** +???+ note + We use and contribute to the [Moto](https://github.com/getmoto/moto) library which allows us to easily mock out tests based on AWS infrastructure. **It's awesome!** - AWS API calls covered by [Moto](https://github.com/getmoto/moto): - Service tests with `@mock_` @@ -195,7 +197,8 @@ class Test_iam_password_policy_uppercase: If the IAM service for the check's we want to test is not covered by Moto, we have to inject the objects in the service client using [MagicMock](https://docs.python.org/3/library/unittest.mock.html#unittest.mock.MagicMock). As we have pointed above, we cannot instantiate the service since it will make real calls to the AWS APIs. -> The following example uses the IAM GetAccountPasswordPolicy which is covered by Moto but this is only for demonstration purposes. +???+ note + The following example uses the IAM GetAccountPasswordPolicy which is covered by Moto but this is only for demonstration purposes. The following code shows how to use MagicMock to create the service objects. @@ -325,7 +328,8 @@ class Test_iam_password_policy_uppercase: Note that this does not use Moto, to keep it simple, but if you use any `moto`-decorators in addition to the patch, the call to `orig(self, operation_name, kwarg)` will be intercepted by Moto. -> The above code comes from here https://docs.getmoto.org/en/latest/docs/services/patching_other_services.html +???+ note + The above code comes from here https://docs.getmoto.org/en/latest/docs/services/patching_other_services.html #### Mocking more than one service @@ -385,7 +389,7 @@ with mock.patch( "prowler.providers..lib.audit_info.audit_info.audit_info", new=audit_info, ), mock.patch( - "prowler.providers.aws.services...._client", + "prowler.providers..services...._client", new=(audit_info), ): ``` @@ -407,10 +411,10 @@ with mock.patch( "prowler.providers..lib.audit_info.audit_info.audit_info", new=audit_info, ), mock.patch( - "prowler.providers.aws.services..", + "prowler.providers..services..", new=(audit_info), ) as service_client, mock.patch( - "prowler.providers.aws.services.._client._client", + "prowler.providers..services.._client._client", new=service_client, ): ``` @@ -523,7 +527,7 @@ from unittest import mock from uuid import uuid4 # Azure Constants -AZURE_SUSCRIPTION = str(uuid4()) +from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION @@ -542,7 +546,7 @@ class Test_defender_ensure_defender_for_arm_is_on: # Create the custom Defender object to be tested defender_client.pricings = { - AZURE_SUSCRIPTION: { + AZURE_SUBSCRIPTION: { "Arm": Defender_Pricing( resource_id=resource_id, pricing_tier="Not Standard", @@ -580,9 +584,9 @@ class Test_defender_ensure_defender_for_arm_is_on: assert result[0].status == "FAIL" assert ( result[0].status_extended - == f"Defender plan Defender for ARM from subscription {AZURE_SUSCRIPTION} is set to OFF (pricing tier not standard)" + == f"Defender plan Defender for ARM from subscription {AZURE_SUBSCRIPTION} is set to OFF (pricing tier not standard)" ) - assert result[0].subscription == AZURE_SUSCRIPTION + assert result[0].subscription == AZURE_SUBSCRIPTION assert result[0].resource_name == "Defender plan ARM" assert result[0].resource_id == resource_id ``` diff --git a/docs/getting-started/requirements.md b/docs/getting-started/requirements.md index d758cb7211a..9c07e8eec52 100644 --- a/docs/getting-started/requirements.md +++ b/docs/getting-started/requirements.md @@ -5,7 +5,7 @@ Prowler has been written in Python using the [AWS SDK (Boto3)](https://boto3.ama Since Prowler uses AWS Credentials under the hood, you can follow any authentication method as described [here](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-precedence). -### AWS Authentication +### Authentication Make sure you have properly configured your AWS-CLI with a valid Access Key and Region or declare AWS variables properly (or instance profile/role): @@ -26,9 +26,8 @@ Those credentials must be associated to a user or role with proper permissions t - `arn:aws:iam::aws:policy/SecurityAudit` - `arn:aws:iam::aws:policy/job-function/ViewOnlyAccess` - > Moreover, some read-only additional permissions are needed for several checks, make sure you attach also the custom policy [prowler-additions-policy.json](https://github.com/prowler-cloud/prowler/blob/master/permissions/prowler-additions-policy.json) to the role you are using. - - > If you want Prowler to send findings to [AWS Security Hub](https://aws.amazon.com/security-hub), make sure you also attach the custom policy [prowler-security-hub.json](https://github.com/prowler-cloud/prowler/blob/master/permissions/prowler-security-hub.json). +???+ note + Moreover, some read-only additional permissions are needed for several checks, make sure you attach also the custom policy [prowler-additions-policy.json](https://github.com/prowler-cloud/prowler/blob/master/permissions/prowler-additions-policy.json) to the role you are using. If you want Prowler to send findings to [AWS Security Hub](https://aws.amazon.com/security-hub), make sure you also attach the custom policy [prowler-security-hub.json](https://github.com/prowler-cloud/prowler/blob/master/permissions/prowler-security-hub.json). ### Multi-Factor Authentication @@ -71,25 +70,51 @@ To use each one you need to pass the proper flag to the execution. Prowler fro A #### Azure Active Directory scope -Azure Active Directory (AAD) permissions required by the tool are the following: +Microsoft Entra ID (AAD earlier) permissions required by the tool are the following: - `Directory.Read.All` - `Policy.Read.All` The best way to assign it is through the azure web console: -![AAD Permissions](../img/AAD-permissions.png) +1. Access to Microsoft Entra ID +2. In the left menu bar, go to "App registrations" +3. Once there, in the menu bar click on "+ New registration" to register a new application +4. Fill the "Name, select the "Supported account types" and click on "Register. You will be redirected to the applications page. + ![Register an Application page](../img/register-application.png) +4. Select the new application +5. In the left menu bar, select "API permissions" +6. Then click on "+ Add a permission" and select "Microsoft Graph" +7. Once in the "Microsoft Graph" view, select "Application permissions" +8. Finally, search for "Directory" and "Policy" and select the following permissions: + - `Directory.Read.All` + - `Policy.Read.All` + ![EntraID Permissions](../img/AAD-permissions.png) + #### Subscriptions scope -Regarding the subscription scope, Prowler by default scans all the subscriptions that is able to list, so it is required to add the following RBAC builtin roles per subscription to the entity that is going to be assumed by the tool: +Regarding the subscription scope, Prowler by default scans all the subscriptions that is able to list, so it is required to add the following RBAC builtin roles per subscription to the entity that is going to be assumed by the tool: - `Security Reader` - `Reader` +To assign this roles, follow the instructions: + +1. Access your subscription, then select your subscription. +2. Select "Access control (IAM)". +3. In the overview, select "Roles" + ![IAM Page](../img/page-IAM.png) +4. Click on "+ Add" and select "Add role assignment" +5. In the search bar, type `Security Reader`, select it and click on "Next" +6. In the Members tab, click on "+ Select members" and add the members you want to assign this role. +7. Click on "Review + assign" to apply the new role. + +*Repeat these steps for `Reader` role* + ## Google Cloud -### GCP Authentication +### Authentication Prowler will follow the same credentials search as [Google authentication libraries](https://cloud.google.com/docs/authentication/application-default-credentials#search_order): @@ -99,4 +124,5 @@ Prowler will follow the same credentials search as [Google authentication librar Those credentials must be associated to a user or service account with proper permissions to do all checks. To make sure, add the `Viewer` role to the member associated with the credentials. -> By default, `prowler` will scan all accessible GCP Projects, use flag `--project-ids` to specify the projects to be scanned. +???+ note + By default, `prowler` will scan all accessible GCP Projects, use flag `--project-ids` to specify the projects to be scanned. diff --git a/docs/img/page-IAM.png b/docs/img/page-IAM.png new file mode 100644 index 00000000000..b584be270ff Binary files /dev/null and b/docs/img/page-IAM.png differ diff --git a/docs/img/prowler-logo-black.png b/docs/img/prowler-logo-black.png new file mode 100644 index 00000000000..7506f1d0010 Binary files /dev/null and b/docs/img/prowler-logo-black.png differ diff --git a/docs/img/prowler-logo-white.png b/docs/img/prowler-logo-white.png new file mode 100644 index 00000000000..b9781a4dc6e Binary files /dev/null and b/docs/img/prowler-logo-white.png differ diff --git a/docs/img/register-application.png b/docs/img/register-application.png new file mode 100644 index 00000000000..dd69291987b Binary files /dev/null and b/docs/img/register-application.png differ diff --git a/docs/index.md b/docs/index.md index f388f9eb9d7..9ee78d10304 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,38 +1,13 @@ -

- -

-
+**Prowler** is an Open Source security tool to perform AWS, Azure and Google Cloud security best practices assessments, audits, incident response, continuous monitoring, hardening and forensics readiness. We have Prowler CLI (Command Line Interface) that we call Prowler Open Source and a service on top of it that we call Prowler SaaS. -# Prowler Documentation - -**Welcome to [Prowler Open Source v3](https://github.com/prowler-cloud/prowler/) Documentation!** 📄 - -For **Prowler v2 Documentation**, please go [here](https://github.com/prowler-cloud/prowler/tree/2.12.0) to the branch and its README.md. - -- You are currently in the **Getting Started** section where you can find general information and requirements to help you start with the tool. -- In the [Tutorials](./tutorials/misc.md) section you will see how to take advantage of all the features in Prowler. -- In the [Contact Us](./contact.md) section you can find how to reach us out in case of technical issues. -- In the [About](./about.md) section you will find more information about the Prowler team and license. - -## About Prowler - -**Prowler** is an Open Source security tool to perform AWS, Azure and Google Cloud security best practices assessments, audits, incident response, continuous monitoring, hardening and forensics readiness. - -It contains hundreds of controls covering CIS, PCI-DSS, ISO27001, GDPR, HIPAA, FFIEC, SOC2, AWS FTR, ENS and custom security frameworks. - -[![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/prowlercloud.svg?style=social&label=Follow%20%40prowlercloud)](https://twitter.com/prowlercloud) - -## About ProwlerPro - - **ProwlerPro** gives you the benefits of Prowler Open Source plus continuous monitoring, faster execution, personalized support, visualization of your data with dashboards, alerts and much more. -Visit prowler.pro for more info. +![Prowler Execution](img/short-display.png) +Prowler offers hundreds of controls covering more than 25 standards and compliance frameworks like CIS, PCI-DSS, ISO27001, GDPR, HIPAA, FFIEC, SOC2, AWS FTR, ENS and custom security frameworks. ## Quick Start ### Installation -Prowler is available as a project in [PyPI](https://pypi.org/project/prowler-cloud/), thus can be installed using pip with `Python >= 3.9`: - +Prowler is available as a project in [PyPI](https://pypi.org/project/prowler/), thus can be installed using pip with `Python >= 3.9`: === "Generic" @@ -136,30 +111,21 @@ Prowler is available as a project in [PyPI](https://pypi.org/project/prowler-clo === "AWS CloudShell" - Prowler can be easely executed in AWS CloudShell but it has some prerequsites to be able to to so. AWS CloudShell is a container running with `Amazon Linux release 2 (Karoo)` that comes with Python 3.7, since Prowler requires Python >= 3.9 we need to first install a newer version of Python. Follow the steps below to successfully execute Prowler v3 in 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's 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 v3 in AWS CloudShell: _Requirements_: - * First install all dependences and then Python, in this case we need to compile it because there is not a package available at the time this document is written: - ``` - sudo yum -y install gcc openssl-devel bzip2-devel libffi-devel - wget https://www.python.org/ftp/python/3.9.16/Python-3.9.16.tgz - tar zxf Python-3.9.16.tgz - cd Python-3.9.16/ - ./configure --enable-optimizations - sudo make altinstall - python3.9 --version - cd - ``` + * Open AWS CloudShell `bash`. + _Commands_: - * Once Python 3.9 is available we can install Prowler from pip: ``` - pip3.9 install prowler + pip install prowler prowler -v ``` - > 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 `/home/cloudshell-user/output/prowler-output-123456789012-20221220191331.csv` + ???+ 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 `/home/cloudshell-user/output/prowler-output-123456789012-20221220191331.csv` === "Azure CloudShell" @@ -194,14 +160,18 @@ You can run Prowler from your workstation, an EC2 instance, Fargate or any other ![Architecture](img/architecture.png) ## Basic Usage -To run Prowler, you will need to specify the provider (e.g aws, gcp or azure): -> If no provider specified, AWS will be used for backward compatibility with most of v2 options. +To run Prowler, you will need to specify the provider (e.g `aws`, `gcp` or `azure`): + +???+ note + If no provider specified, AWS will be used for backward compatibility with most of v2 options. ```console prowler ``` ![Prowler Execution](img/short-display.png) -> Running the `prowler` command without options will use your environment variable credentials, see [Requirements](./getting-started/requirements.md) section to review the credentials settings. + +???+ note + Running the `prowler` command without options will use your environment variable credentials, see [Requirements](./getting-started/requirements.md) section to review the credentials settings. If you miss the former output you can use `--verbose` but Prowler v3 is smoking fast, so you won't see much ;) @@ -252,7 +222,9 @@ Use a custom AWS profile with `-p`/`--profile` and/or AWS regions which you want ```console prowler aws --profile custom-profile -f us-east-1 eu-south-2 ``` -> By default, `prowler` will scan all AWS regions. + +???+ note + By default, `prowler` will scan all AWS regions. See more details about AWS Authentication in [Requirements](getting-started/requirements.md) @@ -302,3 +274,6 @@ prowler gcp --project-ids ... ``` See more details about GCP Authentication in [Requirements](getting-started/requirements.md) + +## Prowler v2 Documentation +For **Prowler v2 Documentation**, please check it out [here](https://github.com/prowler-cloud/prowler/blob/8818f47333a0c1c1a457453c87af0ea5b89a385f/README.md). diff --git a/docs/security.md b/docs/security.md index e0dcf2636ef..ef85c357a8e 100644 --- a/docs/security.md +++ b/docs/security.md @@ -13,9 +13,9 @@ As an **AWS Partner** and we have passed the [AWS Foundation Technical Review (F ## Reporting Vulnerabilities -If you would like to report a vulnerability or have a security concern regarding Prowler Open Source or ProwlerPro service, please submit the information by contacting to help@prowler.pro. +If you would like to report a vulnerability or have a security concern regarding Prowler Open Source or Prowler SaaS service, please submit the information by contacting to us via [**support.prowler.com**](http://support.prowler.com). -The information you share with Verica as part of this process is kept confidential within Verica and the Prowler team. We will only share this information with a third party if the vulnerability you report is found to affect a third-party product, in which case we will share this information with the third-party product's author or manufacturer. Otherwise, we will only share this information as permitted by you. +The information you share with the Prowler team as part of this process is kept confidential within Prowler. We will only share this information with a third party if the vulnerability you report is found to affect a third-party product, in which case we will share this information with the third-party product's author or manufacturer. Otherwise, we will only share this information as permitted by you. We will review the submitted report, and assign it a tracking number. We will then respond to you, acknowledging receipt of the report, and outline the next steps in the process. diff --git a/docs/tutorials/aws/authentication.md b/docs/tutorials/aws/authentication.md index 714872b8c49..54d360c3298 100644 --- a/docs/tutorials/aws/authentication.md +++ b/docs/tutorials/aws/authentication.md @@ -19,9 +19,8 @@ Those credentials must be associated to a user or role with proper permissions t - `arn:aws:iam::aws:policy/SecurityAudit` - `arn:aws:iam::aws:policy/job-function/ViewOnlyAccess` - > Moreover, some read-only additional permissions are needed for several checks, make sure you attach also the custom policy [prowler-additions-policy.json](https://github.com/prowler-cloud/prowler/blob/master/permissions/prowler-additions-policy.json) to the role you are using. - - > If you want Prowler to send findings to [AWS Security Hub](https://aws.amazon.com/security-hub), make sure you also attach the custom policy [prowler-security-hub.json](https://github.com/prowler-cloud/prowler/blob/master/permissions/prowler-security-hub.json). +???+ note + Moreover, some read-only additional permissions are needed for several checks, make sure you attach also the custom policy [prowler-additions-policy.json](https://github.com/prowler-cloud/prowler/blob/master/permissions/prowler-additions-policy.json) to the role you are using. If you want Prowler to send findings to [AWS Security Hub](https://aws.amazon.com/security-hub), make sure you also attach the custom policy [prowler-security-hub.json](https://github.com/prowler-cloud/prowler/blob/master/permissions/prowler-security-hub.json). ## Profiles diff --git a/docs/tutorials/aws/boto3-configuration.md b/docs/tutorials/aws/boto3-configuration.md index c49679b1075..c8caa242303 100644 --- a/docs/tutorials/aws/boto3-configuration.md +++ b/docs/tutorials/aws/boto3-configuration.md @@ -32,3 +32,14 @@ Prowler's AWS Provider uses the Boto3 [Standard](https://boto3.amazonaws.com/v1/ - Retry attempts on nondescriptive, transient error codes. Specifically, these HTTP status codes: 500, 502, 503, 504. - Any retry attempt will include an exponential backoff by a base factor of 2 for a maximum backoff time of 20 seconds. + +## Notes for validating retry attempts + +If you are making changes to Prowler, and want to validate if requests are being retried or given up on, you can take the following approach + +* Run prowler with `--log-level DEBUG` and `--log-file debuglogs.txt` +* Search for retry attempts using `grep -i 'Retry needed' debuglogs.txt` + +This is based off of the [AWS documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/retries.html#checking-retry-attempts-in-your-client-logs), which states that if a retry is performed, you will see a message starting with "Retry needed". + +You can determine the total number of calls made using `grep -i 'Sending http request' debuglogs.txt | wc -l` diff --git a/docs/tutorials/aws/cloudshell.md b/docs/tutorials/aws/cloudshell.md index bd4b77cf0df..e8c37a9ff1e 100644 --- a/docs/tutorials/aws/cloudshell.md +++ b/docs/tutorials/aws/cloudshell.md @@ -1,26 +1,26 @@ # AWS CloudShell -Prowler can be easily executed in AWS CloudShell but it has some prerequisites to be able to to so. AWS CloudShell is a container running with `Amazon Linux release 2 (Karoo)` that comes with Python 3.7, since Prowler requires Python >= 3.9 we need to first install a newer version of Python. Follow the steps below to successfully execute Prowler v3 in AWS CloudShell: - -- First install all dependences and then Python, in this case we need to compile it because there is not a package available at the time this document is written: -``` -sudo yum -y install gcc openssl-devel bzip2-devel libffi-devel -wget https://www.python.org/ftp/python/3.9.16/Python-3.9.16.tgz -tar zxf Python-3.9.16.tgz -cd Python-3.9.16/ -./configure --enable-optimizations -sudo make altinstall -python3.9 --version -cd -``` -- Once Python 3.9 is available we can install Prowler from pip: -``` -pip3.9 install prowler -``` -- Now enjoy Prowler: -``` +## Installation +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's 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 v3 in AWS CloudShell: +```shell +pip install prowler prowler -v -prowler ``` -- 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 `/home/cloudshell-user/output/prowler-output-123456789012-20221220191331.csv` \ No newline at end of file +## Download Files + +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 `/home/cloudshell-user/output/prowler-output-123456789012-20221220191331.csv` + +## Clone Prowler from Github + +The limited storage that AWS CloudShell provides for the user's home directory causes issues when installing the poetry dependencies to run Prowler from GitHub. Here is a workaround: +```shell +git clone https://github.com/prowler-cloud/prowler.git +cd prowler +pip install poetry +mkdir /tmp/pypoetry +poetry config cache-dir /tmp/pypoetry +poetry shell +poetry install +python prowler.py -v +``` diff --git a/docs/tutorials/aws/img/enable-2.png b/docs/tutorials/aws/img/enable-2.png new file mode 100644 index 00000000000..d5246b689dd Binary files /dev/null and b/docs/tutorials/aws/img/enable-2.png differ diff --git a/docs/tutorials/aws/img/enable-partner-integration-2.png b/docs/tutorials/aws/img/enable-partner-integration-2.png new file mode 100644 index 00000000000..1bda7a0304f Binary files /dev/null and b/docs/tutorials/aws/img/enable-partner-integration-2.png differ diff --git a/docs/tutorials/aws/img/enable-partner-integration-3.png b/docs/tutorials/aws/img/enable-partner-integration-3.png new file mode 100644 index 00000000000..3cc7c4ed8e7 Binary files /dev/null and b/docs/tutorials/aws/img/enable-partner-integration-3.png differ diff --git a/docs/tutorials/aws/img/enable-partner-integration-4.png b/docs/tutorials/aws/img/enable-partner-integration-4.png new file mode 100644 index 00000000000..e94dce8bbc7 Binary files /dev/null and b/docs/tutorials/aws/img/enable-partner-integration-4.png differ diff --git a/docs/tutorials/aws/img/enable-partner-integration.png b/docs/tutorials/aws/img/enable-partner-integration.png new file mode 100644 index 00000000000..415a8735993 Binary files /dev/null and b/docs/tutorials/aws/img/enable-partner-integration.png differ diff --git a/docs/tutorials/aws/img/enable.png b/docs/tutorials/aws/img/enable.png new file mode 100644 index 00000000000..4065ef8f3ea Binary files /dev/null and b/docs/tutorials/aws/img/enable.png differ diff --git a/docs/tutorials/aws/img/finding-details.png b/docs/tutorials/aws/img/finding-details.png new file mode 100644 index 00000000000..34515e5637b Binary files /dev/null and b/docs/tutorials/aws/img/finding-details.png differ diff --git a/docs/tutorials/aws/img/findings.png b/docs/tutorials/aws/img/findings.png new file mode 100644 index 00000000000..88c506b28a2 Binary files /dev/null and b/docs/tutorials/aws/img/findings.png differ diff --git a/docs/tutorials/aws/organizations.md b/docs/tutorials/aws/organizations.md index 820749c28d0..5745ecda11d 100644 --- a/docs/tutorials/aws/organizations.md +++ b/docs/tutorials/aws/organizations.md @@ -1,21 +1,28 @@ # AWS Organizations + ## Get AWS Account details from your AWS Organization -Prowler allows you to get additional information of the scanned account in CSV and JSON outputs. When scanning a single account you get the Account ID as part of the output. +Prowler allows you to get additional information of the scanned account from AWS Organizations. + +If you have AWS Organizations enabled, Prowler can get your account details like account name, email, ARN, organization id and tags and you will have them next to every finding's output. -If you have AWS Organizations Prowler can get your account details like Account Name, Email, ARN, Organization ID and Tags and you will have them next to every finding in the CSV and JSON outputs. +In order to do that you can use the argument `-O`/`--organizations-role `. If this argument is not present Prowler will try to fetch that information automatically if the AWS account is a delegated administrator for the AWS Organization. -In order to do that you can use the option `-O`/`--organizations-role `. See the following sample command: +???+ note + Refer [here](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_delegate_policies.html) for more information about AWS Organizations delegated administrator. + +See the following sample command: ```shell prowler aws \ -O arn:aws:iam:::role/ ``` -> Make sure the role in your AWS Organizations management account has the permissions `organizations:ListAccounts*` and `organizations:ListTagsForResource`. +???+ note + Make sure the role in your AWS Organizations management account has the permissions `organizations:DescribeAccount` and `organizations:ListTagsForResource`. -In that command Prowler will scan the account and getting the account details from the AWS Organizations management account assuming a role and creating two reports with those details in JSON and CSV. +Prowler will scan the AWS account and get the account details from AWS Organizations. -In the JSON output below (redacted) you can see tags coded in base64 to prevent breaking CSV or JSON due to its format: +In the JSON output below you can see tags coded in base64 to prevent breaking CSV or JSON due to its format: ```json "Account Email": "my-prod-account@domain.com", @@ -25,13 +32,15 @@ In the JSON output below (redacted) you can see tags coded in base64 to prevent "Account tags": "\"eyJUYWdzIjpasf0=\"" ``` -The additional fields in CSV header output are as follow: +The additional fields in CSV header output are as follows: -```csv -ACCOUNT_DETAILS_EMAIL,ACCOUNT_DETAILS_NAME,ACCOUNT_DETAILS_ARN,ACCOUNT_DETAILS_ORG,ACCOUNT_DETAILS_TAGS -``` +- ACCOUNT_DETAILS_EMAIL +- ACCOUNT_DETAILS_NAME +- ACCOUNT_DETAILS_ARN +- ACCOUNT_DETAILS_ORG +- ACCOUNT_DETAILS_TAGS -## Extra: run Prowler across all accounts in AWS Organizations by assuming roles +## Extra: Run Prowler across all accounts in AWS Organizations by assuming roles If you want to run Prowler across all accounts of AWS Organizations you can do this: @@ -55,4 +64,6 @@ If you want to run Prowler across all accounts of AWS Organizations you can do t done ``` -> Using the same for loop it can be scanned a list of accounts with a variable like `ACCOUNTS_LIST='11111111111 2222222222 333333333'` +???+ note + Using the same for loop it can be scanned a list of accounts with a variable like: +
`ACCOUNTS_LIST='11111111111 2222222222 333333333'` diff --git a/docs/tutorials/aws/regions-and-partitions.md b/docs/tutorials/aws/regions-and-partitions.md index 0644f2ddcbe..74ea0238973 100644 --- a/docs/tutorials/aws/regions-and-partitions.md +++ b/docs/tutorials/aws/regions-and-partitions.md @@ -6,10 +6,13 @@ By default Prowler is able to scan the following AWS partitions: - China: `aws-cn` - GovCloud (US): `aws-us-gov` -> To check the available regions for each partition and service please refer to the following document [aws_regions_by_service.json](https://github.com/prowler-cloud/prowler/blob/master/prowler/providers/aws/aws_regions_by_service.json) +???+ note + To check the available regions for each partition and service please refer to the following document [aws_regions_by_service.json](https://github.com/prowler-cloud/prowler/blob/master/prowler/providers/aws/aws_regions_by_service.json) It is important to take into consideration that to scan the China (`aws-cn`) or GovCloud (`aws-us-gov`) partitions it is either required to have a valid region for that partition in your AWS credentials or to specify the regions you want to audit for that partition using the `-f/--region` flag. -> Please, refer to https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html#configuring-credentials for more information about the AWS credentials configuration. + +???+ note + Please, refer to https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html#configuring-credentials for more information about the AWS credentials configuration. Prowler can scan specific region(s) with: ```console @@ -34,7 +37,8 @@ aws_access_key_id = XXXXXXXXXXXXXXXXXXX aws_secret_access_key = XXXXXXXXXXXXXXXXXXX region = cn-north-1 ``` -> With this option all the partition regions will be scanned without the need of use the `-f/--region` flag +???+ note + With this option all the partition regions will be scanned without the need of use the `-f/--region` flag ## AWS GovCloud (US) @@ -52,7 +56,8 @@ aws_access_key_id = XXXXXXXXXXXXXXXXXXX aws_secret_access_key = XXXXXXXXXXXXXXXXXXX region = us-gov-east-1 ``` -> With this option all the partition regions will be scanned without the need of use the `-f/--region` flag +???+ note + With this option all the partition regions will be scanned without the need of use the `-f/--region` flag ## AWS ISO (US & Europe) diff --git a/docs/tutorials/aws/role-assumption.md b/docs/tutorials/aws/role-assumption.md index 20ab7ad6533..5dc01a4b42d 100644 --- a/docs/tutorials/aws/role-assumption.md +++ b/docs/tutorials/aws/role-assumption.md @@ -23,6 +23,16 @@ prowler aws -R arn:aws:iam:::role/ prowler aws -T/--session-duration -I/--external-id -R arn:aws:iam:::role/ ``` +## Custom Role Session Name + +Prowler can use your custom Role Session name with: +```console +prowler aws --role-session-name +``` + +???+ note + It defaults to `ProwlerAssessmentSession`. + ## Role MFA If your IAM Role has MFA configured you can use `--mfa` along with `-R`/`--role ` and Prowler will ask you to input the following values to get a new temporary session for the IAM Role provided: @@ -34,6 +44,7 @@ If your IAM Role has MFA configured you can use `--mfa` along with `-R`/`--role To create a role to be assumed in one or multiple accounts you can use either as CloudFormation Stack or StackSet the following [template](https://github.com/prowler-cloud/prowler/blob/master/permissions/create_role_to_assume_cfn.yaml) and adapt it. -> _NOTE 1 about Session Duration_: Depending on the amount of checks you run and the size of your infrastructure, Prowler may require more than 1 hour to finish. Use option `-T ` to allow up to 12h (43200 seconds). To allow more than 1h you need to modify _"Maximum CLI/API session duration"_ for that particular role, read more [here](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session). +???+ note "About Session Duration" + Depending on the amount of checks you run and the size of your infrastructure, Prowler may require more than 1 hour to finish. Use option `-T ` to allow up to 12h (43200 seconds). To allow more than 1h you need to modify _"Maximum CLI/API session duration"_ for that particular role, read more [here](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session). -> _NOTE 2 about Session Duration_: Bear in mind that if you are using roles assumed by role chaining there is a hard limit of 1 hour so consider not using role chaining if possible, read more about that, in foot note 1 below the table [here](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html). + Bear in mind that if you are using roles assumed by role chaining there is a hard limit of 1 hour so consider not using role chaining if possible, read more about that, in foot note 1 below the table [here](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html). diff --git a/docs/tutorials/aws/s3.md b/docs/tutorials/aws/s3.md index b7846dea23f..d781ac90287 100644 --- a/docs/tutorials/aws/s3.md +++ b/docs/tutorials/aws/s3.md @@ -21,6 +21,5 @@ By default Prowler sends HTML, JSON and CSV output formats, if you want to send prowler -M csv -B my-bucket ``` -> In the case you do not want to use the assumed role credentials but the initial credentials to put the reports into the S3 bucket, use `-D`/`--output-bucket-no-assume` instead of `-B`/`--output-bucket`. - -> Make sure that the used credentials have `s3:PutObject` permissions in the S3 path where the reports are going to be uploaded. +???+ note + In the case you do not want to use the assumed role credentials but the initial credentials to put the reports into the S3 bucket, use `-D`/`--output-bucket-no-assume` instead of `-B`/`--output-bucket`. Make sure that the used credentials have `s3:PutObject` permissions in the S3 path where the reports are going to be uploaded. diff --git a/docs/tutorials/aws/securityhub.md b/docs/tutorials/aws/securityhub.md index 4fb845f13dd..50249eaefbe 100644 --- a/docs/tutorials/aws/securityhub.md +++ b/docs/tutorials/aws/securityhub.md @@ -1,61 +1,137 @@ # AWS Security Hub Integration -Prowler supports natively and as **official integration** sending findings to [AWS Security Hub](https://aws.amazon.com/security-hub). This integration allows Prowler to import its findings to AWS Security Hub. +Prowler supports natively and as **official integration** sending findings to [AWS Security Hub](https://aws.amazon.com/security-hub). This integration allows **Prowler** to import its findings to AWS Security Hub. -With Security Hub, you now have a single place that aggregates, organizes, and prioritizes your security alerts, or findings, from multiple AWS services, such as Amazon GuardDuty, Amazon Inspector, Amazon Macie, AWS Identity and Access Management (IAM) Access Analyzer, and AWS Firewall Manager, as well as from AWS Partner solutions and from Prowler for free. -Before sending findings to Prowler, you will need to perform next steps: +Before sending findings, you will need to enable AWS Security Hub and the **Prowler** integration. -1. Since Security Hub is a region based service, enable it in the region or regions you require. Use the AWS Management Console or using the AWS CLI with this command if you have enough permissions: - - `aws securityhub enable-security-hub --region `. -2. Enable Prowler as partner integration integration. Use the AWS Management Console or using the AWS CLI with this command if you have enough permissions: - - `aws securityhub enable-import-findings-for-product --region --product-arn arn:aws:securityhub:::product/prowler/prowler` (change region also inside the ARN). - - Using the AWS Management Console: - ![Screenshot 2020-10-29 at 10 26 02 PM](https://user-images.githubusercontent.com/3985464/97634660-5ade3400-1a36-11eb-9a92-4a45cc98c158.png) -3. Allow Prowler to import its findings to AWS Security Hub by adding the policy below to the role or user running Prowler: - - [prowler-security-hub.json](https://github.com/prowler-cloud/prowler/blob/master/permissions/prowler-security-hub.json) +## Enable AWS Security Hub +To enable the integration you have to perform the following steps, in _at least_ one AWS region of a given AWS account, to enable **AWS Security Hub** and **Prowler** as a partner integration. + +Since **AWS Security Hub** is a region based service, you will need to enable it in the region or regions you require. You can configure it using the AWS Management Console or the AWS CLI. + +???+ note + Take into account that enabling this integration will incur in costs in AWS Security Hub, please refer to its pricing [here](https://aws.amazon.com/security-hub/pricing/) for more information. + +### Using the AWS Management Console + +#### Enable AWS Security Hub + +If you have currently AWS Security Hub enabled you can skip to the [next section](#enable-prowler-integration). + +1. Open the **AWS Security Hub** console at https://console.aws.amazon.com/securityhub/. + +2. When you open the Security Hub console for the first time make sure that you are in the region you want to enable, then choose **Go to Security Hub**. +![](./img/enable.png) + +3. On the next page, the Security standards section lists the security standards that Security Hub supports. Select the check box for a standard to enable it, and clear the check box to disable it. + +4. Choose **Enable Security Hub**. +![](./img/enable-2.png) + +#### Enable Prowler Integration + +If you have currently the Prowler integration enabled in AWS Security Hub you can skip to the [next section](#send-findings) and start sending findings. + +Once **AWS Security Hub** is enabled you will need to enable **Prowler** as partner integration to allow **Prowler** to send findings to your **AWS Security Hub**. + +1. Open the **AWS Security Hub** console at https://console.aws.amazon.com/securityhub/. + +2. Select the **Integrations** tab in the right-side menu bar. +![](./img/enable-partner-integration.png) + +3. Search for _Prowler_ in the text search box and the **Prowler** integration will appear. + +4. Once there, click on **Accept Findings** to allow **AWS Security Hub** to receive findings from **Prowler**. +![](./img/enable-partner-integration-2.png) + +5. A new modal will appear to confirm that you are enabling the **Prowler** integration. +![](./img/enable-partner-integration-3.png) + +6. Right after click on **Accept Findings**, you will see that the integration is enabled in **AWS Security Hub**. +![](./img/enable-partner-integration-4.png) + +### Using the AWS CLI + +To enable **AWS Security Hub** and the **Prowler** integration you have to run the following commands using the AWS CLI: + +```shell +aws securityhub enable-security-hub --region +``` +???+ note + For this command to work you will need the `securityhub:EnableSecurityHub` permission. You will need to set the AWS region where you want to enable AWS Security Hub. + +Once **AWS Security Hub** is enabled you will need to enable **Prowler** as partner integration to allow **Prowler** to send findings to your AWS Security Hub. You have to run the following commands using the AWS CLI: + +```shell +aws securityhub enable-import-findings-for-product --region eu-west-1 --product-arn arn:aws:securityhub:::product/prowler/prowler +``` +???+ note + You will need to set the AWS region where you want to enable the integration and also the AWS region also within the ARN. For this command to work you will need the `securityhub:securityhub:EnableImportFindingsForProduct` permission. + + +## Send Findings Once it is enabled, it is as simple as running the command below (for all regions): ```sh -prowler aws -S +prowler aws --security-hub ``` or for only one filtered region like eu-west-1: ```sh -prowler -S -f eu-west-1 +prowler --security-hub --region eu-west-1 ``` -> **Note 1**: It is recommended to send only fails to Security Hub and that is possible adding `-q` to the command. +???+ note + It is recommended to send only fails to Security Hub and that is possible adding `-q/--quiet` to the command. You can use, instead of the `-q/--quiet` 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. -> **Note 2**: 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 ` (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. -> **Note 3**: 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. -Once you run findings for first time you will be able to see Prowler findings in Findings section: +### See you Prowler findings in AWS Security Hub -![Screenshot 2020-10-29 at 10 29 05 PM](https://user-images.githubusercontent.com/3985464/97634676-66c9f600-1a36-11eb-9341-70feb06f6331.png) +Once configured the **AWS Security Hub** in your next scan you will receive the **Prowler** findings in the AWS regions configured. To review those findings in **AWS Security Hub**: + +1. Open the **AWS Security Hub** console at https://console.aws.amazon.com/securityhub/. + +2. Select the **Findings** tab in the right-side menu bar. +![](./img/findings.png) + +3. Use the search box filters and use the **Product Name** filter with the value _Prowler_ to see the findings sent from **Prowler**. + +4. Then, you can click on the check **Title** to see the details and the history of a finding. +![](./img/finding-details.png) + +As you can see in the related requirements section, in the detailed view of the findings, **Prowler** also sends compliance information related to every finding. ## Send findings to Security Hub assuming an IAM Role When you are auditing a multi-account AWS environment, you can send findings to a Security Hub of another account by assuming an IAM role from that account using the `-R` flag in the Prowler command: ```sh -prowler -S -R arn:aws:iam::123456789012:role/ProwlerExecRole +prowler --security-hub --role arn:aws:iam::123456789012:role/ProwlerExecutionRole ``` -> Remember that the used role needs to have permissions to send findings to Security Hub. To get more information about the permissions required, please refer to the following IAM policy [prowler-security-hub.json](https://github.com/prowler-cloud/prowler/blob/master/permissions/prowler-security-hub.json) +???+ note + Remember that the used role needs to have permissions to send findings to Security Hub. To get more information about the permissions required, please refer to the following IAM policy [prowler-security-hub.json](https://github.com/prowler-cloud/prowler/blob/master/permissions/prowler-security-hub.json) ## Send only failed findings to Security Hub -When using Security Hub it is recommended to send only the failed findings generated. To follow that recommendation you could add the `-q` flag to the Prowler command: +When using the **AWS Security Hub** integration you can send only the `FAIL` findings generated by **Prowler**. Therefore, the **AWS Security Hub** usage costs eventually would be lower. To follow that recommendation you could add the `-q/--quiet` flag to the Prowler command: ```sh -prowler -S -q +prowler --security-hub --quiet ``` +You can use, instead of the `-q/--quiet` 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: + +```sh +prowler --security-hub --send-sh-only-fails +``` ## Skip sending updates of findings to Security Hub @@ -63,5 +139,5 @@ By default, Prowler archives all its findings in Security Hub that have not appe You can skip this logic by using the option `--skip-sh-update` so Prowler will not archive older findings: ```sh -prowler -S --skip-sh-update +prowler --security-hub --skip-sh-update ``` diff --git a/docs/tutorials/check-aliases.md b/docs/tutorials/check-aliases.md index d94781d8ce7..9d274d294e6 100644 --- a/docs/tutorials/check-aliases.md +++ b/docs/tutorials/check-aliases.md @@ -1,19 +1,19 @@ # 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: - - "Provider": "", - "CheckID": "", - "CheckTitle": "", - "CheckAliases": [ - "" - "", - ... - ], - ... - +```json title="check.metadata.json" +"Provider": "", +"CheckID": "", +"CheckTitle": "", +"CheckAliases": [ + "" + "", + ... +], +... +``` Then, you can execute the check either with its check ID or with one of the previous aliases: -```console +```shell prowler -c/--checks Using alias for check ... diff --git a/docs/tutorials/compliance.md b/docs/tutorials/compliance.md index 6d39e96e847..136da5be273 100644 --- a/docs/tutorials/compliance.md +++ b/docs/tutorials/compliance.md @@ -21,35 +21,35 @@ prowler --list-compliance ``` Currently, the available frameworks are: -- `cis_1.4_aws` -- `cis_1.5_aws` -- `cis_2.0_aws` -- `cisa_aws` -- `ens_rd2022_aws` +- `aws_account_security_onboarding_aws` - `aws_audit_manager_control_tower_guardrails_aws` - `aws_foundational_security_best_practices_aws` - `aws_well_architected_framework_reliability_pillar_aws` - `aws_well_architected_framework_security_pillar_aws` +- `cis_1.4_aws` +- `cis_1.5_aws` +- `cis_2.0_aws` +- `cis_2.0_gcp` +- `cis_3.0_aws` - `cisa_aws` +- `ens_rd2022_aws` - `fedramp_low_revision_4_aws` - `fedramp_moderate_revision_4_aws` - `ffiec_aws` - `gdpr_aws` -- `gxp_eu_annex_11_aws` - `gxp_21_cfr_part_11_aws` +- `gxp_eu_annex_11_aws` - `hipaa_aws` - `iso27001_2013_aws` -- `iso27001_2013_aws` - `mitre_attack_aws` +- `nist_800_171_revision_2_aws` - `nist_800_53_revision_4_aws` - `nist_800_53_revision_5_aws` -- `nist_800_171_revision_2_aws` - `nist_csf_1.1_aws` - `pci_3.2.1_aws` - `rbi_cyber_security_framework_aws` - `soc2_aws` - ## List Requirements of Compliance Frameworks For each compliance framework, you can use option `--list-compliance-requirements` to list its requirements: ```sh diff --git a/docs/tutorials/configuration_file.md b/docs/tutorials/configuration_file.md index 6aa8c8f63d6..3c7dac1c071 100644 --- a/docs/tutorials/configuration_file.md +++ b/docs/tutorials/configuration_file.md @@ -37,13 +37,24 @@ The following list includes all the AWS checks with configurable variables that ## Azure ### Configurable Checks +The following list includes all the Azure checks with configurable variables that can be changed in the configuration yaml file: + +| Check Name | Value | Type | +|---------------------------------------------------------------|--------------------------------------------------|-----------------| +| `network_public_ip_shodan` | `shodan_api_key` | String | +| `app_ensure_php_version_is_latest` | `php_latest_version` | String | +| `app_ensure_python_version_is_latest` | `python_latest_version` | String | +| `app_ensure_java_version_is_latest` | `java_latest_version` | String | + ## GCP ### Configurable Checks ## Config YAML File Structure -> This is the new Prowler configuration file format. The old one without provider keys is still compatible just for the AWS provider. + +???+ note + 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 @@ -126,6 +137,17 @@ aws: # Azure Configuration azure: + # Azure Network Configuration + # azure.network_public_ip_shodan + shodan_api_key: null + + # Azure App Configuration + # azure.app_ensure_php_version_is_latest + php_latest_version: "8.2" + # azure.app_ensure_python_version_is_latest + python_latest_version: "3.12" + # azure.app_ensure_java_version_is_latest + java_latest_version: "17" # GCP Configuration gcp: diff --git a/docs/tutorials/gcp/authentication.md b/docs/tutorials/gcp/authentication.md index 35977dab5dd..5796dc6baef 100644 --- a/docs/tutorials/gcp/authentication.md +++ b/docs/tutorials/gcp/authentication.md @@ -13,7 +13,8 @@ Otherwise, you can generate and download Service Account keys in JSON format (re prowler gcp --credentials-file path ``` -> `prowler` will scan the GCP project associated with the credentials. +???+ note + `prowler` will scan the GCP project associated with the credentials. Prowler will follow the same credentials search as [Google authentication libraries](https://cloud.google.com/docs/authentication/application-default-credentials#search_order): diff --git a/docs/tutorials/ignore-unused-services.md b/docs/tutorials/ignore-unused-services.md index c6921e55310..30fa3b670d0 100644 --- a/docs/tutorials/ignore-unused-services.md +++ b/docs/tutorials/ignore-unused-services.md @@ -1,6 +1,7 @@ # Ignore Unused Services -> Currently only available on the AWS provider. +???+ note + Currently only available on the AWS provider. Prowler allows you to ignore unused services findings, so you can reduce the number of findings in Prowler's reports. @@ -47,7 +48,7 @@ It is a best practice to encrypt both metadata and connection passwords in AWS G #### Inspector Amazon Inspector is a vulnerability discovery service that automates continuous scanning for security vulnerabilities within your Amazon EC2, Amazon ECR, and AWS Lambda environments. Prowler recommends to enable it and resolve all the Inspector's findings. Ignoring the unused services, Prowler will only notify you if there are any Lambda functions, EC2 instances or ECR repositories in the region where Amazon inspector should be enabled. - - `inspector2_findings_exist` + - `inspector2_is_enabled` #### Macie Amazon Macie is a security service that uses machine learning to automatically discover, classify and protect sensitive data in S3 buckets. Prowler will only create a finding when Macie is not enabled if there are S3 buckets in your account. diff --git a/docs/tutorials/integrations.md b/docs/tutorials/integrations.md index d6004251575..b30d8bd13cb 100644 --- a/docs/tutorials/integrations.md +++ b/docs/tutorials/integrations.md @@ -10,7 +10,9 @@ prowler --slack ![Prowler Slack Message](img/slack-prowler-message.png) -> Slack integration needs SLACK_API_TOKEN and SLACK_CHANNEL_ID environment variables. +???+ note + Slack integration needs SLACK_API_TOKEN and SLACK_CHANNEL_ID environment variables. + ### Configuration To configure the Slack Integration, follow the next steps: diff --git a/docs/tutorials/logging.md b/docs/tutorials/logging.md index 48036c46538..38e5c89c5b2 100644 --- a/docs/tutorials/logging.md +++ b/docs/tutorials/logging.md @@ -18,7 +18,8 @@ You can establish the log level of Prowler with `--log-level` option: prowler --log-level {DEBUG,INFO,WARNING,ERROR,CRITICAL} ``` -> By default, Prowler will run with the `CRITICAL` log level, since critical errors will abort the execution. +???+ note + By default, Prowler will run with the `CRITICAL` log level, since critical errors will abort the execution. ## Export Logs to File @@ -45,4 +46,5 @@ An example of a log file will be the following: "message": "eu-west-2 -- ClientError[124]: An error occurred (UnauthorizedOperation) when calling the DescribeNetworkAcls operation: You are not authorized to perform this operation." } -> NOTE: Each finding is represented as a `json` object. +???+ note + Each finding is represented as a `json` object. diff --git a/docs/tutorials/misc.md b/docs/tutorials/misc.md index 74fa48dbd68..6b640103aec 100644 --- a/docs/tutorials/misc.md +++ b/docs/tutorials/misc.md @@ -61,21 +61,26 @@ Prowler allows you to include your custom checks with the flag: ```console prowler -x/--checks-folder ``` -> S3 URIs are also supported as folders for custom checks, e.g. s3://bucket/prefix/checks_folder/. Make sure that the used credentials have s3:GetObject permissions in the S3 path where the custom checks are located. + +???+ note + S3 URIs are also supported as folders for custom checks, e.g. `s3://bucket/prefix/checks_folder/`. Make sure that the used credentials have `s3:GetObject` permissions in the S3 path where the custom checks are located. The custom checks folder must contain one subfolder per check, each subfolder must be named as the check and must contain: - An empty `__init__.py`: to make Python treat this check folder as a package. - A `check_name.py` containing the check's logic. - A `check_name.metadata.json` containing the check's metadata. ->The check name must start with the service name followed by an underscore (e.g., ec2_instance_public_ip). + +???+ note + 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 see the [Developer Guide](../developer-guide/checks.md#create-a-new-check-for-a-provider). -> 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 -``` +???+ 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 + ``` ## Severities Each of Prowler's checks has a severity, which can be: diff --git a/docs/tutorials/mutelist.md b/docs/tutorials/mutelist.md index 8320a4550d0..bfdacc4095b 100644 --- a/docs/tutorials/mutelist.md +++ b/docs/tutorials/mutelist.md @@ -113,7 +113,8 @@ You will need to pass the S3 URI where your Mute List YAML file was uploaded to ``` prowler aws -w s3:////mutelist.yaml ``` -> Make sure that the used AWS credentials have s3:GetObject permissions in the S3 path where the mutelist file is located. +???+ note + Make sure that the used AWS credentials have s3:GetObject permissions in the S3 path where the allowlist file is located. ### AWS DynamoDB Table ARN @@ -138,7 +139,8 @@ The following example will mute all resources in all accounts for the EC2 checks -> Make sure that the used AWS credentials have `dynamodb:PartiQLSelect` permissions in the table. +???+ note + Make sure that the used AWS credentials have `dynamodb:PartiQLSelect` permissions in the table. ### AWS Lambda ARN diff --git a/docs/tutorials/parallel-execution.md b/docs/tutorials/parallel-execution.md new file mode 100644 index 00000000000..3e4cb2aeb1b --- /dev/null +++ b/docs/tutorials/parallel-execution.md @@ -0,0 +1,188 @@ +# Parallel Execution + +The strategy used here will be to execute Prowler once per service. You can modify this approach as per your requirements. + +This can help for really large accounts, but please be aware of AWS API rate limits: + +1. **Service-Specific Limits**: Each AWS service has its own rate limits. For instance, Amazon EC2 might have different rate limits for launching instances versus making API calls to describe instances. +2. **API Rate Limits**: Most of the rate limits in AWS are applied at the API level. Each API call to an AWS service counts towards the rate limit for that service. +3. **Throttling Responses**: When you exceed the rate limit for a service, AWS responds with a throttling error. In AWS SDKs, these are typically represented as `ThrottlingException` or `RateLimitExceeded` errors. + +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. + +## Linux + +Generate a list of services that Prowler supports, and populate this info into a file: + +```bash +prowler aws --list-services | awk -F"- " '{print $2}' | sed '/^$/d' > services +``` + +Make any modifications for services you would like to skip scanning by modifying this file. + +Then create a new PowerShell script file `parallel-prowler.sh` and add the following contents. Update the `$profile` variable to the AWS CLI profile you want to run Prowler with. + +```bash +#!/bin/bash + +# Change these variables as needed +profile="your_profile" +account_id=$(aws sts get-caller-identity --profile "${profile}" --query 'Account' --output text) + +echo "Executing in account: ${account_id}" + +# Maximum number of concurrent processes +MAX_PROCESSES=5 + +# Loop through the services +while read service; do + echo "$(date '+%Y-%m-%d %H:%M:%S'): Starting job for service: ${service}" + + # Run the command in the background + (prowler -p "$profile" -s "$service" -F "${account_id}-${service}" --ignore-unused-services --only-logs; echo "$(date '+%Y-%m-%d %H:%M:%S') - ${service} has completed") & + + # Check if we have reached the maximum number of processes + while [ $(jobs -r | wc -l) -ge ${MAX_PROCESSES} ]; do + # Wait for a second before checking again + sleep 1 + done +done < ./services + +# Wait for all background processes to finish +wait +echo "All jobs completed" +``` + +Output will be stored in the `output/` folder that is in the same directory from which you executed the script. + +## Windows + +Generate a list of services that Prowler supports, and populate this info into a file: + +```powershell +prowler aws --list-services | ForEach-Object { + # Capture lines that are likely service names + if ($_ -match '^\- \w+$') { + $_.Trim().Substring(2) + } +} | Where-Object { + # Filter out empty or null lines + $_ -ne $null -and $_ -ne '' +} | Set-Content -Path "services" +``` + +Make any modifications for services you would like to skip scanning by modifying this file. + +Then create a new PowerShell script file `parallel-prowler.ps1` and add the following contents. Update the `$profile` variable to the AWS CLI profile you want to run prowler with. + +Change any parameters you would like when calling prowler in the `Start-Job -ScriptBlock` section. Note that you need to keep the `--only-logs` parameter, else some encoding issue occurs when trying to render the progress-bar and prowler won't successfully execute. + +```powershell +$profile = "your_profile" +$account_id = Invoke-Expression -Command "aws sts get-caller-identity --profile $profile --query 'Account' --output text" + +Write-Host "Executing Prowler in $account_id" + +# Maximum number of concurrent jobs +$MAX_PROCESSES = 5 + +# Read services from a file +$services = Get-Content -Path "services" + +# Array to keep track of started jobs +$jobs = @() + +foreach ($service in $services) { + # Start the command as a job + $job = Start-Job -ScriptBlock { + prowler -p ${using:profile} -s ${using:service} -F "${using:account_id}-${using:service}" --ignore-unused-services --only-logs + $endTimestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss" + Write-Output "${endTimestamp} - $using:service has completed" + } + $jobs += $job + Write-Host "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - Starting job for service: $service" + + # Check if we have reached the maximum number of jobs + while (($jobs | Where-Object { $_.State -eq 'Running' }).Count -ge $MAX_PROCESSES) { + Start-Sleep -Seconds 1 + # Check for any completed jobs and receive their output + $completedJobs = $jobs | Where-Object { $_.State -eq 'Completed' } + foreach ($completedJob in $completedJobs) { + Receive-Job -Job $completedJob -Keep | ForEach-Object { Write-Host $_ } + $jobs = $jobs | Where-Object { $_.Id -ne $completedJob.Id } + Remove-Job -Job $completedJob + } + } +} + +# Check for any remaining completed jobs +$remainingCompletedJobs = $jobs | Where-Object { $_.State -eq 'Completed' } +foreach ($remainingJob in $remainingCompletedJobs) { + Receive-Job -Job $remainingJob -Keep | ForEach-Object { Write-Host $_ } + Remove-Job -Job $remainingJob +} + +Write-Host "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - All jobs completed" +``` + +Output will be stored in `C:\Users\YOUR-USER\Documents\output\` + +## Combining the output files + +Guidance is provided for the CSV file format. From the ouput directory, execute either the following Bash or PowerShell script. The script will collect the output from the CSV files, only include the header from the first file, and then output the result as CombinedCSV.csv in the current working directory. + +There is no logic implemented in terms of which CSV files it will combine. If you have additional CSV files from other actions, such as running a quick inventory, you will need to move that out of the current (or any nested) directory, or move the output you want to combine into its own folder and run the script from there. + +```bash +#!/bin/bash + +# Initialize a variable to indicate the first file +firstFile=true + +# Find all CSV files and loop through them +find . -name "*.csv" -print0 | while IFS= read -r -d '' file; do + if [ "$firstFile" = true ]; then + # For the first file, keep the header + cat "$file" > CombinedCSV.csv + firstFile=false + else + # For subsequent files, skip the header + tail -n +2 "$file" >> CombinedCSV.csv + fi +done +``` + +```powershell +# Get all CSV files from current directory and its subdirectories +$csvFiles = Get-ChildItem -Recurse -Filter "*.csv" + +# Initialize a variable to track if it's the first file +$firstFile = $true + +# Loop through each CSV file +foreach ($file in $csvFiles) { + if ($firstFile) { + # For the first file, keep the header and change the flag + $combinedCsv = Import-Csv -Path $file.FullName + $firstFile = $false + } else { + # For subsequent files, skip the header + $tempCsv = Import-Csv -Path $file.FullName + $combinedCsv += $tempCsv | Select-Object * -Skip 1 + } +} + +# Export the combined data to a new CSV file +$combinedCsv | Export-Csv -Path "CombinedCSV.csv" -NoTypeInformation +``` + +## TODO: Additional Improvements + +Some services need to instantiate another service to perform a check. For instance, `cloudwatch` will instantiate Prowler's `iam` service to perform the `cloudwatch_cross_account_sharing_disabled` check. When the `iam` service is instantiated, it will perform the `__init__` function, and pull all the information required for that service. This provides an opportunity for an improvement in the above script to group related services together so that the `iam` services (or any other cross-service references) isn't repeatedily instantiated by grouping dependant services together. A complete mapping between these services still needs to be further investigated, but these are the cross-references that have been noted: + +* inspector2 needs lambda and ec2 +* cloudwatch needs iam +* dlm needs ec2 diff --git a/docs/tutorials/pentesting.md b/docs/tutorials/pentesting.md index 03d566070fc..b31de750fb8 100644 --- a/docs/tutorials/pentesting.md +++ b/docs/tutorials/pentesting.md @@ -50,6 +50,7 @@ Several checks analyse resources that are exposed to the Internet, these are: - sagemaker_notebook_instance_without_direct_internet_access_configured - sns_topics_not_publicly_accessible - sqs_queues_not_publicly_accessible +- network_public_ip_shodan ... @@ -64,5 +65,9 @@ prowler --categories internet-exposed Prowler allows you check if any elastic ip in your AWS Account is exposed in Shodan with `-N`/`--shodan ` option: ```console -prowler aws --shodan -c ec2_elastic_ip_shodan +prowler aws -N/--shodan -c ec2_elastic_ip_shodan +``` +Also, you can check if any of your Azure Subscription has an public IP exposed in shodan: +```console +prowler azure -N/--shodan -c network_public_ip_shodan ``` diff --git a/docs/tutorials/quick-inventory.md b/docs/tutorials/quick-inventory.md index 67736018707..62214469671 100644 --- a/docs/tutorials/quick-inventory.md +++ b/docs/tutorials/quick-inventory.md @@ -1,14 +1,18 @@ # Quick Inventory Prowler allows you to execute a quick inventory to extract the number of resources in your provider. -> Currently, it is only available for AWS provider. + +???+ note + Currently, it is only available for AWS provider. - You can use option `-i`/`--quick-inventory` to execute it: ```sh prowler -i ``` -> By default, it extracts resources from all the regions, you could use `-f`/`--filter-region` to specify the regions to execute the analysis. + +???+ note + 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. diff --git a/docs/tutorials/reporting.md b/docs/tutorials/reporting.md index f6bb27699ce..5ce50243124 100644 --- a/docs/tutorials/reporting.md +++ b/docs/tutorials/reporting.md @@ -19,11 +19,12 @@ prowler -M csv json json-asff html -F ```console prowler -M csv json json-asff html -o ``` -> Both flags can be used simultaneously to provide a custom directory and filename. -```console -prowler -M csv json json-asff html \ - -F -o -``` +???+ note + Both flags can be used simultaneously to provide a custom directory and filename. + ```console + prowler -M csv json json-asff html \ + -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. @@ -41,50 +42,74 @@ Hereunder is the structure for each of the supported report formats by Prowler: ### HTML ![HTML Output](../img/output-html.png) + ### CSV -The following are the columns present in the CSV format: +CSV format has a set of common columns for all the providers, and then provider specific columns. +The common columns are the following: - ASSESSMENT_START_TIME - FINDING_UNIQUE_ID - PROVIDER +- CHECK_ID +- CHECK_TITLE +- CHECK_TYPE +- STATUS +- STATUS_EXTENDED +- SERVICE_NAME +- SUBSERVICE_NAME +- SEVERITY +- RESOURCE_TYPE +- RESOURCE_DETAILS +- RESOURCE_TAGS +- DESCRIPTION +- RISK +- RELATED_URL +- REMEDIATION_RECOMMENDATION_TEXT +- REMEDIATION_RECOMMENDATION_URL +- REMEDIATION_RECOMMENDATION_CODE_NATIVEIAC +- REMEDIATION_RECOMMENDATION_CODE_TERRAFORM +- REMEDIATION_RECOMMENDATION_CODE_CLI +- REMEDIATION_RECOMMENDATION_CODE_OTHER +- COMPLIANCE +- CATEGORIES +- DEPENDS_ON +- RELATED_TO +- NOTES + +And then by the provider specific columns: + +#### AWS + - PROFILE - ACCOUNT_ID -- ACCOUNT_NAME -- ACCOUNT_EMAIL -- ACCOUNT_ARN -- ACCOUNT_ORG -- ACCOUNT_TAGS -- REGION -- CHECK_ID -- CHECK_TITLE -- CHECK_TYPE -- STATUS -- STATUS_EXTENDED -- SERVICE_NAME -- SUBSERVICE_NAME -- SEVERITY -- RESOURCE_ID -- RESOURCE_ARN -- RESOURCE_TYPE -- RESOURCE_DETAILS -- RESOURCE_TAGS -- DESCRIPTION -- COMPLIANCE -- RISK -- RELATED_URL -- REMEDIATION_RECOMMENDATION_TEXT -- REMEDIATION_RECOMMENDATION_URL -- REMEDIATION_RECOMMENDATION_CODE_NATIVEIAC -- REMEDIATION_RECOMMENDATION_CODE_TERRAFORM -- REMEDIATION_RECOMMENDATION_CODE_CLI -- REMEDIATION_RECOMMENDATION_CODE_OTHER -- CATEGORIES -- DEPENDS_ON -- RELATED_TO -- NOTES - -> Since Prowler v3 the CSV column delimiter is the semicolon (`;`) +- ACCOUNT_NAME +- ACCOUNT_EMAIL +- ACCOUNT_ARN +- ACCOUNT_ORG +- ACCOUNT_TAGS +- REGION +- RESOURCE_ID +- RESOURCE_ARN + +#### AZURE + +- TENANT_DOMAIN +- SUBSCRIPTION +- RESOURCE_ID +- RESOURCE_NAME + +#### GCP + +- PROJECT_ID +- LOCATION +- RESOURCE_ID +- RESOURCE_NAME + + +???+ note + Since Prowler v3 the CSV column delimiter is the semicolon (`;`) + ### JSON The following code is an example output of the JSON format: @@ -181,7 +206,8 @@ The following code is an example output of the JSON format: }] ``` -> NOTE: Each finding is a `json` object within a list. This has changed in v3 since in v2 the format used was [ndjson](http://ndjson.org/). +???+ note + Each finding is a `json` object within a list. This has changed in v3 since in v2 the format used was [ndjson](http://ndjson.org/). ### JSON-OCSF @@ -442,7 +468,9 @@ Based on [Open Cybersecurity Schema Framework Security Finding v1.0.0-rc.3](http }] ``` -> NOTE: Each finding is a `json` object. +???+ note + Each finding is a `json` object. + ### 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: @@ -575,4 +603,5 @@ 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. +???+ note + Each finding is a `json` object within a list. diff --git a/mkdocs.yml b/mkdocs.yml index ea71d7bd1a6..82cdb35bb84 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,15 +1,15 @@ # Project information -site_name: Prowler Documentation -site_url: https://docs.prowler.pro/ +site_name: Prowler Open Source Documentation +site_url: https://docs.prowler.com/ site_description: >- - Prowler Documentation Site + Prowler Open Source Documentation # Theme Configuration theme: language: en - logo: img/prowler-logo.png + logo: img/prowler-logo-white.png name: material - favicon: img/prowler-icon.svg + favicon: favicon.ico features: - navigation.tabs - navigation.tabs.sticky @@ -19,6 +19,11 @@ theme: primary: black accent: green +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/ @@ -41,6 +46,7 @@ nav: - Custom Metadata: tutorials/custom-checks-metadata.md - Ignore Unused Services: tutorials/ignore-unused-services.md - Pentesting: tutorials/pentesting.md + - Parallel Execution: tutorials/parallel-execution.md - Developer Guide: developer-guide/introduction.md - AWS: - Authentication: tutorials/aws/authentication.md @@ -73,11 +79,13 @@ nav: - Testing: - Unit Tests: developer-guide/unit-testing.md - Integration Tests: developer-guide/integration-testing.md + - Debugging: developer-guide/debugging.md - Security: security.md - Contact Us: contact.md - Troubleshooting: troubleshooting.md - About: about.md - - ProwlerPro: https://prowler.pro + - Prowler SaaS: https://prowler.com + # Customization extra: consent: @@ -101,11 +109,15 @@ extra: link: https://twitter.com/prowlercloud # Copyright -copyright: Copyright © 2022 Toni de la Fuente, Maintained by the Prowler Team at Verica, Inc. +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 @@ -119,8 +131,8 @@ markdown_extensions: - pymdownx.caret - pymdownx.details - pymdownx.emoji: - emoji_generator: !!python/name:materialx.emoji.to_svg - emoji_index: !!python/name:materialx.emoji.twemoji + emoji_index: !!python/name:material.extensions.emoji.twemoji + emoji_generator: !!python/name:material.extensions.emoji.to_svg - pymdownx.highlight: anchor_linenums: true - pymdownx.inlinehilite diff --git a/poetry.lock b/poetry.lock index 0dcf2a6c7fd..37759e1abde 100644 --- a/poetry.lock +++ b/poetry.lock @@ -28,6 +28,116 @@ PyJWT = ">=1.0.0,<3" python-dateutil = ">=2.1.0,<3" requests = ">=2.0.0,<3" +[[package]] +name = "aiohttp" +version = "3.9.3" +description = "Async http client/server framework (asyncio)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "aiohttp-3.9.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:939677b61f9d72a4fa2a042a5eee2a99a24001a67c13da113b2e30396567db54"}, + {file = "aiohttp-3.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1f5cd333fcf7590a18334c90f8c9147c837a6ec8a178e88d90a9b96ea03194cc"}, + {file = "aiohttp-3.9.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:82e6aa28dd46374f72093eda8bcd142f7771ee1eb9d1e223ff0fa7177a96b4a5"}, + {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f56455b0c2c7cc3b0c584815264461d07b177f903a04481dfc33e08a89f0c26b"}, + {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bca77a198bb6e69795ef2f09a5f4c12758487f83f33d63acde5f0d4919815768"}, + {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e083c285857b78ee21a96ba1eb1b5339733c3563f72980728ca2b08b53826ca5"}, + {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab40e6251c3873d86ea9b30a1ac6d7478c09277b32e14745d0d3c6e76e3c7e29"}, + {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:df822ee7feaaeffb99c1a9e5e608800bd8eda6e5f18f5cfb0dc7eeb2eaa6bbec"}, + {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:acef0899fea7492145d2bbaaaec7b345c87753168589cc7faf0afec9afe9b747"}, + {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cd73265a9e5ea618014802ab01babf1940cecb90c9762d8b9e7d2cc1e1969ec6"}, + {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:a78ed8a53a1221393d9637c01870248a6f4ea5b214a59a92a36f18151739452c"}, + {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:6b0e029353361f1746bac2e4cc19b32f972ec03f0f943b390c4ab3371840aabf"}, + {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7cf5c9458e1e90e3c390c2639f1017a0379a99a94fdfad3a1fd966a2874bba52"}, + {file = "aiohttp-3.9.3-cp310-cp310-win32.whl", hash = "sha256:3e59c23c52765951b69ec45ddbbc9403a8761ee6f57253250c6e1536cacc758b"}, + {file = "aiohttp-3.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:055ce4f74b82551678291473f66dc9fb9048a50d8324278751926ff0ae7715e5"}, + {file = "aiohttp-3.9.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6b88f9386ff1ad91ace19d2a1c0225896e28815ee09fc6a8932fded8cda97c3d"}, + {file = "aiohttp-3.9.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c46956ed82961e31557b6857a5ca153c67e5476972e5f7190015018760938da2"}, + {file = "aiohttp-3.9.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:07b837ef0d2f252f96009e9b8435ec1fef68ef8b1461933253d318748ec1acdc"}, + {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad46e6f620574b3b4801c68255492e0159d1712271cc99d8bdf35f2043ec266"}, + {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ed3e046ea7b14938112ccd53d91c1539af3e6679b222f9469981e3dac7ba1ce"}, + {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:039df344b45ae0b34ac885ab5b53940b174530d4dd8a14ed8b0e2155b9dddccb"}, + {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7943c414d3a8d9235f5f15c22ace69787c140c80b718dcd57caaade95f7cd93b"}, + {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84871a243359bb42c12728f04d181a389718710129b36b6aad0fc4655a7647d4"}, + {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5eafe2c065df5401ba06821b9a054d9cb2848867f3c59801b5d07a0be3a380ae"}, + {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9d3c9b50f19704552f23b4eaea1fc082fdd82c63429a6506446cbd8737823da3"}, + {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:f033d80bc6283092613882dfe40419c6a6a1527e04fc69350e87a9df02bbc283"}, + {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:2c895a656dd7e061b2fd6bb77d971cc38f2afc277229ce7dd3552de8313a483e"}, + {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1f5a71d25cd8106eab05f8704cd9167b6e5187bcdf8f090a66c6d88b634802b4"}, + {file = "aiohttp-3.9.3-cp311-cp311-win32.whl", hash = "sha256:50fca156d718f8ced687a373f9e140c1bb765ca16e3d6f4fe116e3df7c05b2c5"}, + {file = "aiohttp-3.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:5fe9ce6c09668063b8447f85d43b8d1c4e5d3d7e92c63173e6180b2ac5d46dd8"}, + {file = "aiohttp-3.9.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:38a19bc3b686ad55804ae931012f78f7a534cce165d089a2059f658f6c91fa60"}, + {file = "aiohttp-3.9.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:770d015888c2a598b377bd2f663adfd947d78c0124cfe7b959e1ef39f5b13869"}, + {file = "aiohttp-3.9.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ee43080e75fc92bf36219926c8e6de497f9b247301bbf88c5c7593d931426679"}, + {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52df73f14ed99cee84865b95a3d9e044f226320a87af208f068ecc33e0c35b96"}, + {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc9b311743a78043b26ffaeeb9715dc360335e5517832f5a8e339f8a43581e4d"}, + {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b955ed993491f1a5da7f92e98d5dad3c1e14dc175f74517c4e610b1f2456fb11"}, + {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:504b6981675ace64c28bf4a05a508af5cde526e36492c98916127f5a02354d53"}, + {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a6fe5571784af92b6bc2fda8d1925cccdf24642d49546d3144948a6a1ed58ca5"}, + {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ba39e9c8627edc56544c8628cc180d88605df3892beeb2b94c9bc857774848ca"}, + {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:e5e46b578c0e9db71d04c4b506a2121c0cb371dd89af17a0586ff6769d4c58c1"}, + {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:938a9653e1e0c592053f815f7028e41a3062e902095e5a7dc84617c87267ebd5"}, + {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:c3452ea726c76e92f3b9fae4b34a151981a9ec0a4847a627c43d71a15ac32aa6"}, + {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ff30218887e62209942f91ac1be902cc80cddb86bf00fbc6783b7a43b2bea26f"}, + {file = "aiohttp-3.9.3-cp312-cp312-win32.whl", hash = "sha256:38f307b41e0bea3294a9a2a87833191e4bcf89bb0365e83a8be3a58b31fb7f38"}, + {file = "aiohttp-3.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:b791a3143681a520c0a17e26ae7465f1b6f99461a28019d1a2f425236e6eedb5"}, + {file = "aiohttp-3.9.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0ed621426d961df79aa3b963ac7af0d40392956ffa9be022024cd16297b30c8c"}, + {file = "aiohttp-3.9.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7f46acd6a194287b7e41e87957bfe2ad1ad88318d447caf5b090012f2c5bb528"}, + {file = "aiohttp-3.9.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:feeb18a801aacb098220e2c3eea59a512362eb408d4afd0c242044c33ad6d542"}, + {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f734e38fd8666f53da904c52a23ce517f1b07722118d750405af7e4123933511"}, + {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b40670ec7e2156d8e57f70aec34a7216407848dfe6c693ef131ddf6e76feb672"}, + {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fdd215b7b7fd4a53994f238d0f46b7ba4ac4c0adb12452beee724ddd0743ae5d"}, + {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:017a21b0df49039c8f46ca0971b3a7fdc1f56741ab1240cb90ca408049766168"}, + {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e99abf0bba688259a496f966211c49a514e65afa9b3073a1fcee08856e04425b"}, + {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:648056db9a9fa565d3fa851880f99f45e3f9a771dd3ff3bb0c048ea83fb28194"}, + {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8aacb477dc26797ee089721536a292a664846489c49d3ef9725f992449eda5a8"}, + {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:522a11c934ea660ff8953eda090dcd2154d367dec1ae3c540aff9f8a5c109ab4"}, + {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:5bce0dc147ca85caa5d33debc4f4d65e8e8b5c97c7f9f660f215fa74fc49a321"}, + {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b4af9f25b49a7be47c0972139e59ec0e8285c371049df1a63b6ca81fdd216a2"}, + {file = "aiohttp-3.9.3-cp38-cp38-win32.whl", hash = "sha256:298abd678033b8571995650ccee753d9458dfa0377be4dba91e4491da3f2be63"}, + {file = "aiohttp-3.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:69361bfdca5468c0488d7017b9b1e5ce769d40b46a9f4a2eed26b78619e9396c"}, + {file = "aiohttp-3.9.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0fa43c32d1643f518491d9d3a730f85f5bbaedcbd7fbcae27435bb8b7a061b29"}, + {file = "aiohttp-3.9.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:835a55b7ca49468aaaac0b217092dfdff370e6c215c9224c52f30daaa735c1c1"}, + {file = "aiohttp-3.9.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:06a9b2c8837d9a94fae16c6223acc14b4dfdff216ab9b7202e07a9a09541168f"}, + {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abf151955990d23f84205286938796c55ff11bbfb4ccfada8c9c83ae6b3c89a3"}, + {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59c26c95975f26e662ca78fdf543d4eeaef70e533a672b4113dd888bd2423caa"}, + {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f95511dd5d0e05fd9728bac4096319f80615aaef4acbecb35a990afebe953b0e"}, + {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:595f105710293e76b9dc09f52e0dd896bd064a79346234b521f6b968ffdd8e58"}, + {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7c8b816c2b5af5c8a436df44ca08258fc1a13b449393a91484225fcb7545533"}, + {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f1088fa100bf46e7b398ffd9904f4808a0612e1d966b4aa43baa535d1b6341eb"}, + {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f59dfe57bb1ec82ac0698ebfcdb7bcd0e99c255bd637ff613760d5f33e7c81b3"}, + {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:361a1026c9dd4aba0109e4040e2aecf9884f5cfe1b1b1bd3d09419c205e2e53d"}, + {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:363afe77cfcbe3a36353d8ea133e904b108feea505aa4792dad6585a8192c55a"}, + {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e2c45c208c62e955e8256949eb225bd8b66a4c9b6865729a786f2aa79b72e9d"}, + {file = "aiohttp-3.9.3-cp39-cp39-win32.whl", hash = "sha256:f7217af2e14da0856e082e96ff637f14ae45c10a5714b63c77f26d8884cf1051"}, + {file = "aiohttp-3.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:27468897f628c627230dba07ec65dc8d0db566923c48f29e084ce382119802bc"}, + {file = "aiohttp-3.9.3.tar.gz", hash = "sha256:90842933e5d1ff760fae6caca4b2b3edba53ba8f4b71e95dacf2818a2aca06f7"}, +] + +[package.dependencies] +aiosignal = ">=1.1.2" +async-timeout = {version = ">=4.0,<5.0", markers = "python_version < \"3.11\""} +attrs = ">=17.3.0" +frozenlist = ">=1.1.1" +multidict = ">=4.5,<7.0" +yarl = ">=1.0,<2.0" + +[package.extras] +speedups = ["Brotli", "aiodns", "brotlicffi"] + +[[package]] +name = "aiosignal" +version = "1.3.1" +description = "aiosignal: a list of registered asynchronous callbacks" +optional = false +python-versions = ">=3.7" +files = [ + {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, + {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, +] + +[package.dependencies] +frozenlist = ">=1.1.0" + [[package]] name = "alive-progress" version = "3.1.5" @@ -43,57 +153,105 @@ files = [ about-time = "4.2.1" grapheme = "0.6.0" +[[package]] +name = "anyio" +version = "4.3.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.8" +files = [ + {file = "anyio-4.3.0-py3-none-any.whl", hash = "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8"}, + {file = "anyio-4.3.0.tar.gz", hash = "sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6"}, +] + +[package.dependencies] +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" +typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} + +[package.extras] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.23)"] + [[package]] name = "astroid" -version = "3.0.1" +version = "3.1.0" description = "An abstract syntax tree for Python with inference support." optional = false python-versions = ">=3.8.0" files = [ - {file = "astroid-3.0.1-py3-none-any.whl", hash = "sha256:7d5895c9825e18079c5aeac0572bc2e4c83205c95d416e0b4fee8bc361d2d9ca"}, - {file = "astroid-3.0.1.tar.gz", hash = "sha256:86b0bb7d7da0be1a7c4aedb7974e391b32d4ed89e33de6ed6902b4b15c97577e"}, + {file = "astroid-3.1.0-py3-none-any.whl", hash = "sha256:951798f922990137ac090c53af473db7ab4e70c770e6d7fae0cec59f74411819"}, + {file = "astroid-3.1.0.tar.gz", hash = "sha256:ac248253bfa4bd924a0de213707e7ebeeb3138abeb48d798784ead1e56d419d4"}, ] [package.dependencies] typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} +[[package]] +name = "async-timeout" +version = "4.0.3" +description = "Timeout context manager for asyncio programs" +optional = false +python-versions = ">=3.7" +files = [ + {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, + {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, +] + [[package]] name = "attrs" -version = "23.1.0" +version = "23.2.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.7" files = [ - {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, - {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, + {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, + {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, ] [package.extras] cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]", "pre-commit"] +dev = ["attrs[tests]", "pre-commit"] docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] +tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] + +[[package]] +name = "authlib" +version = "1.3.0" +description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." +optional = false +python-versions = ">=3.8" +files = [ + {file = "Authlib-1.3.0-py2.py3-none-any.whl", hash = "sha256:9637e4de1fb498310a56900b3e2043a206b03cb11c05422014b0302cbc814be3"}, + {file = "Authlib-1.3.0.tar.gz", hash = "sha256:959ea62a5b7b5123c5059758296122b57cd2585ae2ed1c0622c21b371ffdae06"}, +] + +[package.dependencies] +cryptography = "*" [[package]] name = "aws-sam-translator" -version = "1.80.0" +version = "1.85.0" description = "AWS SAM Translator is a library that transform SAM templates into AWS CloudFormation templates" optional = false -python-versions = ">=3.7, <=4.0, !=4.0" +python-versions = ">=3.8, <=4.0, !=4.0" files = [ - {file = "aws-sam-translator-1.80.0.tar.gz", hash = "sha256:36afb8b802af0180a35efa68a8ab19d5d929d0a6a649a0101e8a4f8e1f05681f"}, - {file = "aws_sam_translator-1.80.0-py3-none-any.whl", hash = "sha256:f00215f9314cef1bbbdbd7520e3b0c75a76b88bdc3f0dedb6a2c69a12e904b12"}, + {file = "aws-sam-translator-1.85.0.tar.gz", hash = "sha256:e41938affa128fb5bde5e1989b260bf539a96369bba3faf316ce66651351df39"}, + {file = "aws_sam_translator-1.85.0-py3-none-any.whl", hash = "sha256:e8c69a4db7279421ff6c3579cd4d43395fe9b6781f50416528e984be68e25481"}, ] [package.dependencies] boto3 = ">=1.19.5,<2.dev0" jsonschema = ">=3.2,<5" pydantic = ">=1.8,<3" -typing-extensions = ">=4.4,<5" +typing-extensions = ">=4.4" [package.extras] -dev = ["black (==23.3.0)", "boto3 (>=1.23,<2)", "boto3-stubs[appconfig,serverlessrepo] (>=1.19.5,<2.dev0)", "coverage (>=5.3,<8)", "dateparser (>=1.1,<2.0)", "importlib-metadata", "mypy (>=1.3.0,<1.4.0)", "parameterized (>=0.7,<1.0)", "pytest (>=6.2,<8)", "pytest-cov (>=2.10,<5)", "pytest-env (>=0.6,<1)", "pytest-rerunfailures (>=9.1,<12)", "pytest-xdist (>=2.5,<4)", "pyyaml (>=6.0,<7.0)", "requests (>=2.28,<3.0)", "ruamel.yaml (==0.17.21)", "ruff (==0.0.284)", "tenacity (>=8.0,<9.0)", "types-PyYAML (>=6.0,<7.0)", "types-jsonschema (>=3.2,<4.0)"] +dev = ["black (==23.10.1)", "boto3 (>=1.23,<2)", "boto3-stubs[appconfig,serverlessrepo] (>=1.19.5,<2.dev0)", "coverage (>=5.3,<8)", "dateparser (>=1.1,<2.0)", "mypy (>=1.3.0,<1.4.0)", "parameterized (>=0.7,<1.0)", "pytest (>=6.2,<8)", "pytest-cov (>=2.10,<5)", "pytest-env (>=0.6,<1)", "pytest-rerunfailures (>=9.1,<12)", "pytest-xdist (>=2.5,<4)", "pyyaml (>=6.0,<7.0)", "requests (>=2.28,<3.0)", "ruamel.yaml (==0.17.21)", "ruff (>=0.1.0,<0.2.0)", "tenacity (>=8.0,<9.0)", "types-PyYAML (>=6.0,<7.0)", "types-jsonschema (>=3.2,<4.0)"] [[package]] name = "aws-xray-sdk" @@ -134,19 +292,19 @@ files = [ [[package]] name = "azure-core" -version = "1.28.0" +version = "1.30.0" description = "Microsoft Azure Core Library for Python" optional = false python-versions = ">=3.7" files = [ - {file = "azure-core-1.28.0.zip", hash = "sha256:e9eefc66fc1fde56dab6f04d4e5d12c60754d5a9fa49bdcfd8534fc96ed936bd"}, - {file = "azure_core-1.28.0-py3-none-any.whl", hash = "sha256:dec36dfc8eb0b052a853f30c07437effec2f9e3e1fc8f703d9bdaa5cfc0043d9"}, + {file = "azure-core-1.30.0.tar.gz", hash = "sha256:6f3a7883ef184722f6bd997262eddaf80cfe7e5b3e0caaaf8db1695695893d35"}, + {file = "azure_core-1.30.0-py3-none-any.whl", hash = "sha256:3dae7962aad109610e68c9a7abb31d79720e1d982ddf61363038d175a5025e89"}, ] [package.dependencies] -requests = ">=2.18.4" +requests = ">=2.21.0" six = ">=1.11.0" -typing-extensions = ">=4.3.0" +typing-extensions = ">=4.6.0" [package.extras] aio = ["aiohttp (>=3.0)"] @@ -168,6 +326,39 @@ cryptography = ">=2.5" msal = ">=1.24.0,<2.0.0" msal-extensions = ">=0.3.0,<2.0.0" +[[package]] +name = "azure-keyvault-keys" +version = "4.9.0" +description = "Microsoft Azure Key Vault Keys Client Library for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "azure-keyvault-keys-4.9.0.tar.gz", hash = "sha256:08632dcd6ece28657204e9a256ad64369fe2b0e385ed43349f932f007d89f774"}, + {file = "azure_keyvault_keys-4.9.0-py3-none-any.whl", hash = "sha256:05eff85600f2f288a38e5c818ff77c5121840d327e66188cfa7ad333defb545b"}, +] + +[package.dependencies] +azure-core = ">=1.29.5,<2.0.0" +cryptography = ">=2.1.4" +isodate = ">=0.6.1" +typing-extensions = ">=4.0.1" + +[[package]] +name = "azure-mgmt-applicationinsights" +version = "4.0.0" +description = "Microsoft Azure Application Insights Management Client Library for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "azure-mgmt-applicationinsights-4.0.0.zip", hash = "sha256:50c3db05573e0cc2d56314a0556fb346ef05ec489ac000f4d720d92c6b647e06"}, + {file = "azure_mgmt_applicationinsights-4.0.0-py3-none-any.whl", hash = "sha256:2b1ffd9a0114974455795c73a3a5d17c849e32b961d707d2db393b99254b576f"}, +] + +[package.dependencies] +azure-common = ">=1.1,<2.0" +azure-mgmt-core = ">=1.3.2,<2.0.0" +isodate = ">=0.6.1,<1.0.0" + [[package]] name = "azure-mgmt-authorization" version = "4.0.0" @@ -184,6 +375,22 @@ azure-common = ">=1.1,<2.0" azure-mgmt-core = ">=1.3.2,<2.0.0" isodate = ">=0.6.1,<1.0.0" +[[package]] +name = "azure-mgmt-compute" +version = "30.5.0" +description = "Microsoft Azure Compute Management Client Library for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "azure-mgmt-compute-30.5.0.tar.gz", hash = "sha256:ed3ea34b799db0d52ee55e2f1ab4b0f09fa4a08f35e061ecb9aad9fb5a218844"}, + {file = "azure_mgmt_compute-30.5.0-py3-none-any.whl", hash = "sha256:b65a6c1e22be7334604257d8d9f96a9c6dc4c6d4869f95d0d551c7c8170a2e71"}, +] + +[package.dependencies] +azure-common = ">=1.1,<2.0" +azure-mgmt-core = ">=1.3.2,<2.0.0" +isodate = ">=0.6.1,<1.0.0" + [[package]] name = "azure-mgmt-core" version = "1.4.0" @@ -198,15 +405,111 @@ files = [ [package.dependencies] azure-core = ">=1.26.2,<2.0.0" +[[package]] +name = "azure-mgmt-cosmosdb" +version = "9.4.0" +description = "Microsoft Azure Cosmos DB Management Client Library for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "azure-mgmt-cosmosdb-9.4.0.tar.gz", hash = "sha256:cabb821cd446b09e73d24c31c287a60fcc3623488f1ffa9335c692267e79c341"}, + {file = "azure_mgmt_cosmosdb-9.4.0-py3-none-any.whl", hash = "sha256:8ce9ab58df018980c4cf8defb38022fa5f2a9dcbccdeb73e952374cbaff919c5"}, +] + +[package.dependencies] +azure-common = ">=1.1,<2.0" +azure-mgmt-core = ">=1.3.2,<2.0.0" +isodate = ">=0.6.1,<1.0.0" + +[[package]] +name = "azure-mgmt-keyvault" +version = "10.3.0" +description = "Microsoft Azure Key Vault Management Client Library for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "azure-mgmt-keyvault-10.3.0.tar.gz", hash = "sha256:183b4164cf1868b8ea7efeaa98edad7d2a4e14a9bd977c2818b12b75150cd2a2"}, + {file = "azure_mgmt_keyvault-10.3.0-py3-none-any.whl", hash = "sha256:3410cf6c703e9570ed3c8e9716e483c02b1804adde6ab437ddc8feac4545acd6"}, +] + +[package.dependencies] +azure-common = ">=1.1,<2.0" +azure-mgmt-core = ">=1.3.2,<2.0.0" +isodate = ">=0.6.1,<1.0.0" + +[[package]] +name = "azure-mgmt-monitor" +version = "6.0.2" +description = "Microsoft Azure Monitor Client Library for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "azure-mgmt-monitor-6.0.2.tar.gz", hash = "sha256:5ffbf500e499ab7912b1ba6d26cef26480d9ae411532019bb78d72562196e07b"}, + {file = "azure_mgmt_monitor-6.0.2-py3-none-any.whl", hash = "sha256:fe4cf41e6680b74a228f81451dc5522656d599c6f343ecf702fc790fda9a357b"}, +] + +[package.dependencies] +azure-common = ">=1.1,<2.0" +azure-mgmt-core = ">=1.3.2,<2.0.0" +isodate = ">=0.6.1,<1.0.0" + +[[package]] +name = "azure-mgmt-network" +version = "25.3.0" +description = "Microsoft Azure Network Management Client Library for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "azure-mgmt-network-25.3.0.tar.gz", hash = "sha256:dce2cafb1ae0e563e0b5efc537dc98a7c0ad824d4261e64bed75f788196dd5c6"}, + {file = "azure_mgmt_network-25.3.0-py3-none-any.whl", hash = "sha256:87b5338d14c957bd3a28a5ec85fb74043749d1a16a48cd5978ef51c4a1036af3"}, +] + +[package.dependencies] +azure-common = ">=1.1,<2.0" +azure-mgmt-core = ">=1.3.2,<2.0.0" +isodate = ">=0.6.1,<1.0.0" + +[[package]] +name = "azure-mgmt-rdbms" +version = "10.1.0" +description = "Microsoft Azure RDBMS Management Client Library for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "azure-mgmt-rdbms-10.1.0.zip", hash = "sha256:a87d401c876c84734cdd4888af551e4a1461b4b328d9816af60cb8ac5979f035"}, + {file = "azure_mgmt_rdbms-10.1.0-py3-none-any.whl", hash = "sha256:8eac17d1341a91d7ed914435941ba917b5ef1568acabc3e65653603966a7cc88"}, +] + +[package.dependencies] +azure-common = ">=1.1,<2.0" +azure-mgmt-core = ">=1.3.0,<2.0.0" +msrest = ">=0.6.21" + +[[package]] +name = "azure-mgmt-resource" +version = "23.0.1" +description = "Microsoft Azure Resource Management Client Library for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "azure-mgmt-resource-23.0.1.zip", hash = "sha256:c2ba6cfd99df95f55f36eadc4245e3dc713257302a1fd0277756d94bd8cb28e0"}, + {file = "azure_mgmt_resource-23.0.1-py3-none-any.whl", hash = "sha256:f185eec72bbc39f42bcb83ae6f1bad744f0e3f20a12d9b2b3e70d16c74ad9cc0"}, +] + +[package.dependencies] +azure-common = ">=1.1,<2.0" +azure-mgmt-core = ">=1.3.2,<2.0.0" +isodate = ">=0.6.1,<1.0.0" + [[package]] name = "azure-mgmt-security" -version = "5.0.0" +version = "6.0.0" description = "Microsoft Azure Security Center Management Client Library for Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "azure-mgmt-security-5.0.0.zip", hash = "sha256:38b03efe82c2344cea203fda95e6d00b7ac22782fa1c0b585cd0ea2c8ff3e702"}, - {file = "azure_mgmt_security-5.0.0-py3-none-any.whl", hash = "sha256:73a74ce8f6ffb1b345ce101c8abdd42238f161f0988d168d23918feda0089654"}, + {file = "azure-mgmt-security-6.0.0.tar.gz", hash = "sha256:ceafc1869899067110bd830c5cc98bc9b8f32d8ea840ca1f693b1a5f52a5f8b0"}, + {file = "azure_mgmt_security-6.0.0-py3-none-any.whl", hash = "sha256:c88570003ac8138c59e6e549e2d8bb6a6c7057c496303d8c33392fdfe05f294c"}, ] [package.dependencies] @@ -262,6 +565,22 @@ azure-common = ">=1.1,<2.0" azure-mgmt-core = ">=1.3.2,<2.0.0" msrest = ">=0.7.1" +[[package]] +name = "azure-mgmt-web" +version = "7.2.0" +description = "Microsoft Azure Web Apps Management Client Library for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "azure-mgmt-web-7.2.0.tar.gz", hash = "sha256:efcfe6f7f520ed0abcfe86517e1c8cf02a712f737a3db0db7cb46c6d647981ed"}, + {file = "azure_mgmt_web-7.2.0-py3-none-any.whl", hash = "sha256:28e88602ad9d6d03ed3ba89f966f478b6148e28d292d165e5f371c92c59621df"}, +] + +[package.dependencies] +azure-common = ">=1.1,<2.0" +azure-mgmt-core = ">=1.3.2,<2.0.0" +isodate = ">=0.6.1,<1.0.0" + [[package]] name = "azure-storage-blob" version = "12.19.0" @@ -284,70 +603,84 @@ aio = ["azure-core[aio] (>=1.28.0,<2.0.0)"] [[package]] name = "babel" -version = "2.12.1" +version = "2.14.0" description = "Internationalization utilities" -optional = true +optional = false python-versions = ">=3.7" files = [ - {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, - {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, + {file = "Babel-2.14.0-py3-none-any.whl", hash = "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287"}, + {file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"}, ] +[package.extras] +dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] + [[package]] name = "bandit" -version = "1.7.5" +version = "1.7.7" description = "Security oriented static analyser for python code." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "bandit-1.7.5-py3-none-any.whl", hash = "sha256:75665181dc1e0096369112541a056c59d1c5f66f9bb74a8d686c3c362b83f549"}, - {file = "bandit-1.7.5.tar.gz", hash = "sha256:bdfc739baa03b880c2d15d0431b31c658ffc348e907fe197e54e0389dd59e11e"}, + {file = "bandit-1.7.7-py3-none-any.whl", hash = "sha256:17e60786a7ea3c9ec84569fd5aee09936d116cb0cb43151023258340dbffb7ed"}, + {file = "bandit-1.7.7.tar.gz", hash = "sha256:527906bec6088cb499aae31bc962864b4e77569e9d529ee51df3a93b4b8ab28a"}, ] [package.dependencies] colorama = {version = ">=0.3.9", markers = "platform_system == \"Windows\""} -GitPython = ">=1.0.1" PyYAML = ">=5.3.1" rich = "*" stevedore = ">=1.20.0" [package.extras] -test = ["beautifulsoup4 (>=4.8.0)", "coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "pylint (==1.9.4)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)", "tomli (>=1.1.0)"] +baseline = ["GitPython (>=3.1.30)"] +test = ["beautifulsoup4 (>=4.8.0)", "coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "pylint (==1.9.4)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)"] toml = ["tomli (>=1.1.0)"] yaml = ["PyYAML"] [[package]] name = "black" -version = "22.12.0" +version = "24.2.0" description = "The uncompromising code formatter." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "black-22.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d"}, - {file = "black-22.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351"}, - {file = "black-22.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f"}, - {file = "black-22.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4"}, - {file = "black-22.12.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2"}, - {file = "black-22.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350"}, - {file = "black-22.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d"}, - {file = "black-22.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc"}, - {file = "black-22.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320"}, - {file = "black-22.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148"}, - {file = "black-22.12.0-py3-none-any.whl", hash = "sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf"}, - {file = "black-22.12.0.tar.gz", hash = "sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f"}, + {file = "black-24.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6981eae48b3b33399c8757036c7f5d48a535b962a7c2310d19361edeef64ce29"}, + {file = "black-24.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d533d5e3259720fdbc1b37444491b024003e012c5173f7d06825a77508085430"}, + {file = "black-24.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61a0391772490ddfb8a693c067df1ef5227257e72b0e4108482b8d41b5aee13f"}, + {file = "black-24.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:992e451b04667116680cb88f63449267c13e1ad134f30087dec8527242e9862a"}, + {file = "black-24.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:163baf4ef40e6897a2a9b83890e59141cc8c2a98f2dda5080dc15c00ee1e62cd"}, + {file = "black-24.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e37c99f89929af50ffaf912454b3e3b47fd64109659026b678c091a4cd450fb2"}, + {file = "black-24.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9de21bafcba9683853f6c96c2d515e364aee631b178eaa5145fc1c61a3cc92"}, + {file = "black-24.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:9db528bccb9e8e20c08e716b3b09c6bdd64da0dd129b11e160bf082d4642ac23"}, + {file = "black-24.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d84f29eb3ee44859052073b7636533ec995bd0f64e2fb43aeceefc70090e752b"}, + {file = "black-24.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e08fb9a15c914b81dd734ddd7fb10513016e5ce7e6704bdd5e1251ceee51ac9"}, + {file = "black-24.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:810d445ae6069ce64030c78ff6127cd9cd178a9ac3361435708b907d8a04c693"}, + {file = "black-24.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:ba15742a13de85e9b8f3239c8f807723991fbfae24bad92d34a2b12e81904982"}, + {file = "black-24.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7e53a8c630f71db01b28cd9602a1ada68c937cbf2c333e6ed041390d6968faf4"}, + {file = "black-24.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:93601c2deb321b4bad8f95df408e3fb3943d85012dddb6121336b8e24a0d1218"}, + {file = "black-24.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0057f800de6acc4407fe75bb147b0c2b5cbb7c3ed110d3e5999cd01184d53b0"}, + {file = "black-24.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:faf2ee02e6612577ba0181f4347bcbcf591eb122f7841ae5ba233d12c39dcb4d"}, + {file = "black-24.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:057c3dc602eaa6fdc451069bd027a1b2635028b575a6c3acfd63193ced20d9c8"}, + {file = "black-24.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:08654d0797e65f2423f850fc8e16a0ce50925f9337fb4a4a176a7aa4026e63f8"}, + {file = "black-24.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca610d29415ee1a30a3f30fab7a8f4144e9d34c89a235d81292a1edb2b55f540"}, + {file = "black-24.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:4dd76e9468d5536abd40ffbc7a247f83b2324f0c050556d9c371c2b9a9a95e31"}, + {file = "black-24.2.0-py3-none-any.whl", hash = "sha256:e8a6ae970537e67830776488bca52000eaa37fa63b9988e8c487458d9cd5ace6"}, + {file = "black-24.2.0.tar.gz", hash = "sha256:bce4f25c27c3435e4dace4815bcb2008b87e167e3bf4ee47ccdc5ce906eb4894"}, ] [package.dependencies] click = ">=8.0.0" mypy-extensions = ">=0.4.3" +packaging = ">=22.0" pathspec = ">=0.9.0" platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} -typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} [package.extras] colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] +d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] @@ -391,97 +724,85 @@ crt = ["awscrt (==0.16.9)"] [[package]] name = "cachetools" -version = "5.3.0" +version = "5.3.3" description = "Extensible memoizing collections and decorators" optional = false -python-versions = "~=3.7" +python-versions = ">=3.7" files = [ - {file = "cachetools-5.3.0-py3-none-any.whl", hash = "sha256:429e1a1e845c008ea6c85aa35d4b98b65d6a9763eeef3e37e92728a12d1de9d4"}, - {file = "cachetools-5.3.0.tar.gz", hash = "sha256:13dfddc7b8df938c21a940dfa6557ce6e94a2f1cdfa58eb90c805721d58f2c14"}, + {file = "cachetools-5.3.3-py3-none-any.whl", hash = "sha256:0abad1021d3f8325b2fc1d2e9c8b9c9d57b04c3932657a72465447332c24d945"}, + {file = "cachetools-5.3.3.tar.gz", hash = "sha256:ba29e2dfa0b8b556606f097407ed1aa62080ee108ab0dc5ec9d6a723a007d105"}, ] [[package]] name = "certifi" -version = "2023.7.22" +version = "2024.2.2" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, - {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, + {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, + {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, ] [[package]] name = "cffi" -version = "1.15.1" +version = "1.16.0" description = "Foreign Function Interface for Python calling C code." optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, - {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, - {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, - {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, - {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, - {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, - {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, - {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, - {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, - {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, - {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, - {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, - {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, - {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, - {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, - {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, - {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, - {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, - {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"}, + {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"}, + {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"}, + {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"}, + {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"}, + {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"}, + {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"}, + {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"}, + {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"}, + {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"}, + {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"}, + {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"}, + {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"}, + {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"}, ] [package.dependencies] @@ -489,17 +810,17 @@ pycparser = "*" [[package]] name = "cfn-lint" -version = "0.83.3" +version = "0.85.3" description = "Checks CloudFormation templates for practices and behaviour that could potentially be improved" optional = false -python-versions = ">=3.7, <=4.0, !=4.0" +python-versions = ">=3.8, <=4.0, !=4.0" files = [ - {file = "cfn-lint-0.83.3.tar.gz", hash = "sha256:cb1b5da6f3f15742f07f89006b9cc6ca459745f350196b559688ac0982111c5f"}, - {file = "cfn_lint-0.83.3-py3-none-any.whl", hash = "sha256:7acb5c40b6ae454006bfa19d586c67d0c4ed9a6dbb344fd470bc773981a0642a"}, + {file = "cfn-lint-0.85.3.tar.gz", hash = "sha256:efed015205051664285f0aedac106209c80f8b251b231fce93d0911db0e07cec"}, + {file = "cfn_lint-0.85.3-py3-none-any.whl", hash = "sha256:53121526fe50c04a3551379fd835417d7c05959280df8869e12070946af977a3"}, ] [package.dependencies] -aws-sam-translator = ">=1.79.0" +aws-sam-translator = ">=1.85.0" jschema-to-python = ">=1.2.3,<1.3.0" jsonpatch = "*" jsonschema = ">=3.0,<5" @@ -512,97 +833,112 @@ sympy = ">=1.0.0" [[package]] name = "charset-normalizer" -version = "3.1.0" +version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, - {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] [[package]] name = "click" -version = "8.1.3" +version = "8.1.7" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, ] [package.dependencies] @@ -649,63 +985,63 @@ files = [ [[package]] name = "coverage" -version = "7.3.2" +version = "7.4.3" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d872145f3a3231a5f20fd48500274d7df222e291d90baa2026cc5152b7ce86bf"}, - {file = "coverage-7.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:310b3bb9c91ea66d59c53fa4989f57d2436e08f18fb2f421a1b0b6b8cc7fffda"}, - {file = "coverage-7.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f47d39359e2c3779c5331fc740cf4bce6d9d680a7b4b4ead97056a0ae07cb49a"}, - {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa72dbaf2c2068404b9870d93436e6d23addd8bbe9295f49cbca83f6e278179c"}, - {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:beaa5c1b4777f03fc63dfd2a6bd820f73f036bfb10e925fce067b00a340d0f3f"}, - {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dbc1b46b92186cc8074fee9d9fbb97a9dd06c6cbbef391c2f59d80eabdf0faa6"}, - {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:315a989e861031334d7bee1f9113c8770472db2ac484e5b8c3173428360a9148"}, - {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d1bc430677773397f64a5c88cb522ea43175ff16f8bfcc89d467d974cb2274f9"}, - {file = "coverage-7.3.2-cp310-cp310-win32.whl", hash = "sha256:a889ae02f43aa45032afe364c8ae84ad3c54828c2faa44f3bfcafecb5c96b02f"}, - {file = "coverage-7.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c0ba320de3fb8c6ec16e0be17ee1d3d69adcda99406c43c0409cb5c41788a611"}, - {file = "coverage-7.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ac8c802fa29843a72d32ec56d0ca792ad15a302b28ca6203389afe21f8fa062c"}, - {file = "coverage-7.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:89a937174104339e3a3ffcf9f446c00e3a806c28b1841c63edb2b369310fd074"}, - {file = "coverage-7.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e267e9e2b574a176ddb983399dec325a80dbe161f1a32715c780b5d14b5f583a"}, - {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2443cbda35df0d35dcfb9bf8f3c02c57c1d6111169e3c85fc1fcc05e0c9f39a3"}, - {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4175e10cc8dda0265653e8714b3174430b07c1dca8957f4966cbd6c2b1b8065a"}, - {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1"}, - {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5c913b556a116b8d5f6ef834038ba983834d887d82187c8f73dec21049abd65c"}, - {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1981f785239e4e39e6444c63a98da3a1db8e971cb9ceb50a945ba6296b43f312"}, - {file = "coverage-7.3.2-cp311-cp311-win32.whl", hash = "sha256:43668cabd5ca8258f5954f27a3aaf78757e6acf13c17604d89648ecc0cc66640"}, - {file = "coverage-7.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10c39c0452bf6e694511c901426d6b5ac005acc0f78ff265dbe36bf81f808a2"}, - {file = "coverage-7.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4cbae1051ab791debecc4a5dcc4a1ff45fc27b91b9aee165c8a27514dd160836"}, - {file = "coverage-7.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63"}, - {file = "coverage-7.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c7bba973ebee5e56fe9251300c00f1579652587a9f4a5ed8404b15a0471f216"}, - {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4"}, - {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6e9589bd04d0461a417562649522575d8752904d35c12907d8c9dfeba588faf"}, - {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d51ac2a26f71da1b57f2dc81d0e108b6ab177e7d30e774db90675467c847bbdf"}, - {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:99b89d9f76070237975b315b3d5f4d6956ae354a4c92ac2388a5695516e47c84"}, - {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a"}, - {file = "coverage-7.3.2-cp312-cp312-win32.whl", hash = "sha256:289fe43bf45a575e3ab10b26d7b6f2ddb9ee2dba447499f5401cfb5ecb8196bb"}, - {file = "coverage-7.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:7dbc3ed60e8659bc59b6b304b43ff9c3ed858da2839c78b804973f613d3e92ed"}, - {file = "coverage-7.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738"}, - {file = "coverage-7.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:af3d828d2c1cbae52d34bdbb22fcd94d1ce715d95f1a012354a75e5913f1bda2"}, - {file = "coverage-7.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:630b13e3036e13c7adc480ca42fa7afc2a5d938081d28e20903cf7fd687872e2"}, - {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9eacf273e885b02a0273bb3a2170f30e2d53a6d53b72dbe02d6701b5296101c"}, - {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f17966e861ff97305e0801134e69db33b143bbfb36436efb9cfff6ec7b2fd9"}, - {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b4275802d16882cf9c8b3d057a0839acb07ee9379fa2749eca54efbce1535b82"}, - {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:72c0cfa5250f483181e677ebc97133ea1ab3eb68645e494775deb6a7f6f83901"}, - {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cb536f0dcd14149425996821a168f6e269d7dcd2c273a8bff8201e79f5104e76"}, - {file = "coverage-7.3.2-cp38-cp38-win32.whl", hash = "sha256:307adb8bd3abe389a471e649038a71b4eb13bfd6b7dd9a129fa856f5c695cf92"}, - {file = "coverage-7.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:88ed2c30a49ea81ea3b7f172e0269c182a44c236eb394718f976239892c0a27a"}, - {file = "coverage-7.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b631c92dfe601adf8f5ebc7fc13ced6bb6e9609b19d9a8cd59fa47c4186ad1ce"}, - {file = "coverage-7.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d3d9df4051c4a7d13036524b66ecf7a7537d14c18a384043f30a303b146164e9"}, - {file = "coverage-7.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7363d3b6a1119ef05015959ca24a9afc0ea8a02c687fe7e2d557705375c01f"}, - {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f11cc3c967a09d3695d2a6f03fb3e6236622b93be7a4b5dc09166a861be6d25"}, - {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9"}, - {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3a4006916aa6fee7cd38db3bfc95aa9c54ebb4ffbfc47c677c8bba949ceba0a6"}, - {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9028a3871280110d6e1aa2df1afd5ef003bab5fb1ef421d6dc748ae1c8ef2ebc"}, - {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9f805d62aec8eb92bab5b61c0f07329275b6f41c97d80e847b03eb894f38d083"}, - {file = "coverage-7.3.2-cp39-cp39-win32.whl", hash = "sha256:d1c88ec1a7ff4ebca0219f5b1ef863451d828cccf889c173e1253aa84b1e07ce"}, - {file = "coverage-7.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b4767da59464bb593c07afceaddea61b154136300881844768037fd5e859353f"}, - {file = "coverage-7.3.2-pp38.pp39.pp310-none-any.whl", hash = "sha256:ae97af89f0fbf373400970c0a21eef5aa941ffeed90aee43650b81f7d7f47637"}, - {file = "coverage-7.3.2.tar.gz", hash = "sha256:be32ad29341b0170e795ca590e1c07e81fc061cb5b10c74ce7203491484404ef"}, + {file = "coverage-7.4.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8580b827d4746d47294c0e0b92854c85a92c2227927433998f0d3320ae8a71b6"}, + {file = "coverage-7.4.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:718187eeb9849fc6cc23e0d9b092bc2348821c5e1a901c9f8975df0bc785bfd4"}, + {file = "coverage-7.4.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:767b35c3a246bcb55b8044fd3a43b8cd553dd1f9f2c1eeb87a302b1f8daa0524"}, + {file = "coverage-7.4.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae7f19afe0cce50039e2c782bff379c7e347cba335429678450b8fe81c4ef96d"}, + {file = "coverage-7.4.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba3a8aaed13770e970b3df46980cb068d1c24af1a1968b7818b69af8c4347efb"}, + {file = "coverage-7.4.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ee866acc0861caebb4f2ab79f0b94dbfbdbfadc19f82e6e9c93930f74e11d7a0"}, + {file = "coverage-7.4.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:506edb1dd49e13a2d4cac6a5173317b82a23c9d6e8df63efb4f0380de0fbccbc"}, + {file = "coverage-7.4.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd6545d97c98a192c5ac995d21c894b581f1fd14cf389be90724d21808b657e2"}, + {file = "coverage-7.4.3-cp310-cp310-win32.whl", hash = "sha256:f6a09b360d67e589236a44f0c39218a8efba2593b6abdccc300a8862cffc2f94"}, + {file = "coverage-7.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:18d90523ce7553dd0b7e23cbb28865db23cddfd683a38fb224115f7826de78d0"}, + {file = "coverage-7.4.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cbbe5e739d45a52f3200a771c6d2c7acf89eb2524890a4a3aa1a7fa0695d2a47"}, + {file = "coverage-7.4.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:489763b2d037b164846ebac0cbd368b8a4ca56385c4090807ff9fad817de4113"}, + {file = "coverage-7.4.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:451f433ad901b3bb00184d83fd83d135fb682d780b38af7944c9faeecb1e0bfe"}, + {file = "coverage-7.4.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fcc66e222cf4c719fe7722a403888b1f5e1682d1679bd780e2b26c18bb648cdc"}, + {file = "coverage-7.4.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3ec74cfef2d985e145baae90d9b1b32f85e1741b04cd967aaf9cfa84c1334f3"}, + {file = "coverage-7.4.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:abbbd8093c5229c72d4c2926afaee0e6e3140de69d5dcd918b2921f2f0c8baba"}, + {file = "coverage-7.4.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:35eb581efdacf7b7422af677b92170da4ef34500467381e805944a3201df2079"}, + {file = "coverage-7.4.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8249b1c7334be8f8c3abcaaa996e1e4927b0e5a23b65f5bf6cfe3180d8ca7840"}, + {file = "coverage-7.4.3-cp311-cp311-win32.whl", hash = "sha256:cf30900aa1ba595312ae41978b95e256e419d8a823af79ce670835409fc02ad3"}, + {file = "coverage-7.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:18c7320695c949de11a351742ee001849912fd57e62a706d83dfc1581897fa2e"}, + {file = "coverage-7.4.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b51bfc348925e92a9bd9b2e48dad13431b57011fd1038f08316e6bf1df107d10"}, + {file = "coverage-7.4.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d6cdecaedea1ea9e033d8adf6a0ab11107b49571bbb9737175444cea6eb72328"}, + {file = "coverage-7.4.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b2eccb883368f9e972e216c7b4c7c06cabda925b5f06dde0650281cb7666a30"}, + {file = "coverage-7.4.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c00cdc8fa4e50e1cc1f941a7f2e3e0f26cb2a1233c9696f26963ff58445bac7"}, + {file = "coverage-7.4.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9a4a8dd3dcf4cbd3165737358e4d7dfbd9d59902ad11e3b15eebb6393b0446e"}, + {file = "coverage-7.4.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:062b0a75d9261e2f9c6d071753f7eef0fc9caf3a2c82d36d76667ba7b6470003"}, + {file = "coverage-7.4.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:ebe7c9e67a2d15fa97b77ea6571ce5e1e1f6b0db71d1d5e96f8d2bf134303c1d"}, + {file = "coverage-7.4.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c0a120238dd71c68484f02562f6d446d736adcc6ca0993712289b102705a9a3a"}, + {file = "coverage-7.4.3-cp312-cp312-win32.whl", hash = "sha256:37389611ba54fd6d278fde86eb2c013c8e50232e38f5c68235d09d0a3f8aa352"}, + {file = "coverage-7.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:d25b937a5d9ffa857d41be042b4238dd61db888533b53bc76dc082cb5a15e914"}, + {file = "coverage-7.4.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:28ca2098939eabab044ad68850aac8f8db6bf0b29bc7f2887d05889b17346454"}, + {file = "coverage-7.4.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:280459f0a03cecbe8800786cdc23067a8fc64c0bd51dc614008d9c36e1659d7e"}, + {file = "coverage-7.4.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c0cdedd3500e0511eac1517bf560149764b7d8e65cb800d8bf1c63ebf39edd2"}, + {file = "coverage-7.4.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a9babb9466fe1da12417a4aed923e90124a534736de6201794a3aea9d98484e"}, + {file = "coverage-7.4.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dec9de46a33cf2dd87a5254af095a409ea3bf952d85ad339751e7de6d962cde6"}, + {file = "coverage-7.4.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:16bae383a9cc5abab9bb05c10a3e5a52e0a788325dc9ba8499e821885928968c"}, + {file = "coverage-7.4.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2c854ce44e1ee31bda4e318af1dbcfc929026d12c5ed030095ad98197eeeaed0"}, + {file = "coverage-7.4.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ce8c50520f57ec57aa21a63ea4f325c7b657386b3f02ccaedeccf9ebe27686e1"}, + {file = "coverage-7.4.3-cp38-cp38-win32.whl", hash = "sha256:708a3369dcf055c00ddeeaa2b20f0dd1ce664eeabde6623e516c5228b753654f"}, + {file = "coverage-7.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:1bf25fbca0c8d121a3e92a2a0555c7e5bc981aee5c3fdaf4bb7809f410f696b9"}, + {file = "coverage-7.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3b253094dbe1b431d3a4ac2f053b6d7ede2664ac559705a704f621742e034f1f"}, + {file = "coverage-7.4.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:77fbfc5720cceac9c200054b9fab50cb2a7d79660609200ab83f5db96162d20c"}, + {file = "coverage-7.4.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6679060424faa9c11808598504c3ab472de4531c571ab2befa32f4971835788e"}, + {file = "coverage-7.4.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4af154d617c875b52651dd8dd17a31270c495082f3d55f6128e7629658d63765"}, + {file = "coverage-7.4.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8640f1fde5e1b8e3439fe482cdc2b0bb6c329f4bb161927c28d2e8879c6029ee"}, + {file = "coverage-7.4.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:69b9f6f66c0af29642e73a520b6fed25ff9fd69a25975ebe6acb297234eda501"}, + {file = "coverage-7.4.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0842571634f39016a6c03e9d4aba502be652a6e4455fadb73cd3a3a49173e38f"}, + {file = "coverage-7.4.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a78ed23b08e8ab524551f52953a8a05d61c3a760781762aac49f8de6eede8c45"}, + {file = "coverage-7.4.3-cp39-cp39-win32.whl", hash = "sha256:c0524de3ff096e15fcbfe8f056fdb4ea0bf497d584454f344d59fce069d3e6e9"}, + {file = "coverage-7.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:0209a6369ccce576b43bb227dc8322d8ef9e323d089c6f3f26a597b09cb4d2aa"}, + {file = "coverage-7.4.3-pp38.pp39.pp310-none-any.whl", hash = "sha256:7cbde573904625509a3f37b6fecea974e363460b556a627c60dc2f47e2fffa51"}, + {file = "coverage-7.4.3.tar.gz", hash = "sha256:276f6077a5c61447a48d133ed13e759c09e62aff0dc84274a68dc18660104d52"}, ] [package.dependencies] @@ -716,49 +1052,75 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "41.0.4" +version = "42.0.5" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-41.0.4-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:80907d3faa55dc5434a16579952ac6da800935cd98d14dbd62f6f042c7f5e839"}, - {file = "cryptography-41.0.4-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:35c00f637cd0b9d5b6c6bd11b6c3359194a8eba9c46d4e875a3660e3b400005f"}, - {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cecfefa17042941f94ab54f769c8ce0fe14beff2694e9ac684176a2535bf9714"}, - {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e40211b4923ba5a6dc9769eab704bdb3fbb58d56c5b336d30996c24fcf12aadb"}, - {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:23a25c09dfd0d9f28da2352503b23e086f8e78096b9fd585d1d14eca01613e13"}, - {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2ed09183922d66c4ec5fdaa59b4d14e105c084dd0febd27452de8f6f74704143"}, - {file = "cryptography-41.0.4-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5a0f09cefded00e648a127048119f77bc2b2ec61e736660b5789e638f43cc397"}, - {file = "cryptography-41.0.4-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:9eeb77214afae972a00dee47382d2591abe77bdae166bda672fb1e24702a3860"}, - {file = "cryptography-41.0.4-cp37-abi3-win32.whl", hash = "sha256:3b224890962a2d7b57cf5eeb16ccaafba6083f7b811829f00476309bce2fe0fd"}, - {file = "cryptography-41.0.4-cp37-abi3-win_amd64.whl", hash = "sha256:c880eba5175f4307129784eca96f4e70b88e57aa3f680aeba3bab0e980b0f37d"}, - {file = "cryptography-41.0.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:004b6ccc95943f6a9ad3142cfabcc769d7ee38a3f60fb0dddbfb431f818c3a67"}, - {file = "cryptography-41.0.4-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:86defa8d248c3fa029da68ce61fe735432b047e32179883bdb1e79ed9bb8195e"}, - {file = "cryptography-41.0.4-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:37480760ae08065437e6573d14be973112c9e6dcaf5f11d00147ee74f37a3829"}, - {file = "cryptography-41.0.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b5f4dfe950ff0479f1f00eda09c18798d4f49b98f4e2006d644b3301682ebdca"}, - {file = "cryptography-41.0.4-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7e53db173370dea832190870e975a1e09c86a879b613948f09eb49324218c14d"}, - {file = "cryptography-41.0.4-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5b72205a360f3b6176485a333256b9bcd48700fc755fef51c8e7e67c4b63e3ac"}, - {file = "cryptography-41.0.4-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:93530900d14c37a46ce3d6c9e6fd35dbe5f5601bf6b3a5c325c7bffc030344d9"}, - {file = "cryptography-41.0.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:efc8ad4e6fc4f1752ebfb58aefece8b4e3c4cae940b0994d43649bdfce8d0d4f"}, - {file = "cryptography-41.0.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c3391bd8e6de35f6f1140e50aaeb3e2b3d6a9012536ca23ab0d9c35ec18c8a91"}, - {file = "cryptography-41.0.4-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:0d9409894f495d465fe6fda92cb70e8323e9648af912d5b9141d616df40a87b8"}, - {file = "cryptography-41.0.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:8ac4f9ead4bbd0bc8ab2d318f97d85147167a488be0e08814a37eb2f439d5cf6"}, - {file = "cryptography-41.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:047c4603aeb4bbd8db2756e38f5b8bd7e94318c047cfe4efeb5d715e08b49311"}, - {file = "cryptography-41.0.4.tar.gz", hash = "sha256:7febc3094125fc126a7f6fb1f420d0da639f3f32cb15c8ff0dc3997c4549f51a"}, -] - -[package.dependencies] -cffi = ">=1.12" + {file = "cryptography-42.0.5-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:a30596bae9403a342c978fb47d9b0ee277699fa53bbafad14706af51fe543d16"}, + {file = "cryptography-42.0.5-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:b7ffe927ee6531c78f81aa17e684e2ff617daeba7f189f911065b2ea2d526dec"}, + {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2424ff4c4ac7f6b8177b53c17ed5d8fa74ae5955656867f5a8affaca36a27abb"}, + {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:329906dcc7b20ff3cad13c069a78124ed8247adcac44b10bea1130e36caae0b4"}, + {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:b03c2ae5d2f0fc05f9a2c0c997e1bc18c8229f392234e8a0194f202169ccd278"}, + {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f8837fe1d6ac4a8052a9a8ddab256bc006242696f03368a4009be7ee3075cdb7"}, + {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:0270572b8bd2c833c3981724b8ee9747b3ec96f699a9665470018594301439ee"}, + {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:b8cac287fafc4ad485b8a9b67d0ee80c66bf3574f655d3b97ef2e1082360faf1"}, + {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:16a48c23a62a2f4a285699dba2e4ff2d1cff3115b9df052cdd976a18856d8e3d"}, + {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2bce03af1ce5a5567ab89bd90d11e7bbdff56b8af3acbbec1faded8f44cb06da"}, + {file = "cryptography-42.0.5-cp37-abi3-win32.whl", hash = "sha256:b6cd2203306b63e41acdf39aa93b86fb566049aeb6dc489b70e34bcd07adca74"}, + {file = "cryptography-42.0.5-cp37-abi3-win_amd64.whl", hash = "sha256:98d8dc6d012b82287f2c3d26ce1d2dd130ec200c8679b6213b3c73c08b2b7940"}, + {file = "cryptography-42.0.5-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:5e6275c09d2badf57aea3afa80d975444f4be8d3bc58f7f80d2a484c6f9485c8"}, + {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4985a790f921508f36f81831817cbc03b102d643b5fcb81cd33df3fa291a1a1"}, + {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cde5f38e614f55e28d831754e8a3bacf9ace5d1566235e39d91b35502d6936e"}, + {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:7367d7b2eca6513681127ebad53b2582911d1736dc2ffc19f2c3ae49997496bc"}, + {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:cd2030f6650c089aeb304cf093f3244d34745ce0cfcc39f20c6fbfe030102e2a"}, + {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a2913c5375154b6ef2e91c10b5720ea6e21007412f6437504ffea2109b5a33d7"}, + {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:c41fb5e6a5fe9ebcd58ca3abfeb51dffb5d83d6775405305bfa8715b76521922"}, + {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3eaafe47ec0d0ffcc9349e1708be2aaea4c6dd4978d76bf6eb0cb2c13636c6fc"}, + {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1b95b98b0d2af784078fa69f637135e3c317091b615cd0905f8b8a087e86fa30"}, + {file = "cryptography-42.0.5-cp39-abi3-win32.whl", hash = "sha256:1f71c10d1e88467126f0efd484bd44bca5e14c664ec2ede64c32f20875c0d413"}, + {file = "cryptography-42.0.5-cp39-abi3-win_amd64.whl", hash = "sha256:a011a644f6d7d03736214d38832e030d8268bcff4a41f728e6030325fea3e400"}, + {file = "cryptography-42.0.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9481ffe3cf013b71b2428b905c4f7a9a4f76ec03065b05ff499bb5682a8d9ad8"}, + {file = "cryptography-42.0.5-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:ba334e6e4b1d92442b75ddacc615c5476d4ad55cc29b15d590cc6b86efa487e2"}, + {file = "cryptography-42.0.5-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ba3e4a42397c25b7ff88cdec6e2a16c2be18720f317506ee25210f6d31925f9c"}, + {file = "cryptography-42.0.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:111a0d8553afcf8eb02a4fea6ca4f59d48ddb34497aa8706a6cf536f1a5ec576"}, + {file = "cryptography-42.0.5-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cd65d75953847815962c84a4654a84850b2bb4aed3f26fadcc1c13892e1e29f6"}, + {file = "cryptography-42.0.5-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e807b3188f9eb0eaa7bbb579b462c5ace579f1cedb28107ce8b48a9f7ad3679e"}, + {file = "cryptography-42.0.5-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f12764b8fffc7a123f641d7d049d382b73f96a34117e0b637b80643169cec8ac"}, + {file = "cryptography-42.0.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:37dd623507659e08be98eec89323469e8c7b4c1407c85112634ae3dbdb926fdd"}, + {file = "cryptography-42.0.5.tar.gz", hash = "sha256:6fe07eec95dfd477eb9530aef5bead34fec819b3aaf6c5bd6d20565da607bfe1"}, +] + +[package.dependencies] +cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} [package.extras] docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] -docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] +docstest = ["pyenchant (>=1.6.11)", "readme-renderer", "sphinxcontrib-spelling (>=4.0.1)"] nox = ["nox"] -pep8test = ["black", "check-sdist", "mypy", "ruff"] +pep8test = ["check-sdist", "click", "mypy", "ruff"] sdist = ["build"] ssh = ["bcrypt (>=3.1.5)"] -test = ["pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test = ["certifi", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] test-randomorder = ["pytest-randomly"] +[[package]] +name = "deprecated" +version = "1.2.14" +description = "Python @deprecated decorator to deprecate old python classes, functions or methods." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"}, + {file = "Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"}, +] + +[package.dependencies] +wrapt = ">=1.10,<2" + +[package.extras] +dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] + [[package]] name = "detect-secrets" version = "1.4.0" @@ -780,27 +1142,28 @@ word-list = ["pyahocorasick"] [[package]] name = "dill" -version = "0.3.7" +version = "0.3.8" description = "serialize all of Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "dill-0.3.7-py3-none-any.whl", hash = "sha256:76b122c08ef4ce2eedcd4d1abd8e641114bfc6c2867f49f3c41facf65bf19f5e"}, - {file = "dill-0.3.7.tar.gz", hash = "sha256:cc1c8b182eb3013e24bd475ff2e9295af86c1a38eb1aff128dac8962a9ce3c03"}, + {file = "dill-0.3.8-py3-none-any.whl", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7"}, + {file = "dill-0.3.8.tar.gz", hash = "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca"}, ] [package.extras] graph = ["objgraph (>=1.7.2)"] +profile = ["gprof2dot (>=2022.7.29)"] [[package]] name = "docker" -version = "6.1.3" +version = "7.0.0" description = "A Python library for the Docker Engine API." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "docker-6.1.3-py3-none-any.whl", hash = "sha256:aecd2277b8bf8e506e484f6ab7aec39abe0038e29fa4a6d3ba86c3fe01844ed9"}, - {file = "docker-6.1.3.tar.gz", hash = "sha256:aa6d17830045ba5ef0168d5eaa34d37beeb113948c413affe1d5991fc11f9a20"}, + {file = "docker-7.0.0-py3-none-any.whl", hash = "sha256:12ba681f2777a0ad28ffbcc846a69c31b4dfd9752b47eb425a274ee269c5e14b"}, + {file = "docker-7.0.0.tar.gz", hash = "sha256:323736fb92cd9418fc5e7133bc953e11a9da04f4483f828b527db553f1e7e5a3"}, ] [package.dependencies] @@ -808,57 +1171,41 @@ packaging = ">=14.0" pywin32 = {version = ">=304", markers = "sys_platform == \"win32\""} requests = ">=2.26.0" urllib3 = ">=1.26.0" -websocket-client = ">=0.32.0" [package.extras] ssh = ["paramiko (>=2.4.3)"] +websockets = ["websocket-client (>=1.3.0)"] [[package]] name = "dparse" -version = "0.6.2" +version = "0.6.4b0" description = "A parser for Python dependency files" optional = false -python-versions = ">=3.5" +python-versions = ">=3.7" files = [ - {file = "dparse-0.6.2-py3-none-any.whl", hash = "sha256:8097076f1dd26c377f30d4745e6ec18fef42f3bf493933b842ac5bafad8c345f"}, - {file = "dparse-0.6.2.tar.gz", hash = "sha256:d45255bda21f998bc7ddf2afd5e62505ba6134756ba2d42a84c56b0826614dfe"}, + {file = "dparse-0.6.4b0-py3-none-any.whl", hash = "sha256:592ff183348b8a5ea0a18442a7965e29445d3a26063654ec2c7e8ef42cd5753c"}, + {file = "dparse-0.6.4b0.tar.gz", hash = "sha256:f8d49b41a527f3d16a269f854e6665245b325e50e41d2c213810cb984553e5c8"}, ] [package.dependencies] packaging = "*" -toml = "*" +tomli = {version = "*", markers = "python_version < \"3.11\""} [package.extras] +all = ["dparse[conda]", "dparse[pipenv]", "dparse[poetry]"] conda = ["pyyaml"] pipenv = ["pipenv"] - -[[package]] -name = "ecdsa" -version = "0.18.0" -description = "ECDSA cryptographic signature library (pure python)" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "ecdsa-0.18.0-py2.py3-none-any.whl", hash = "sha256:80600258e7ed2f16b9aa1d7c295bd70194109ad5a30fdee0eaeefef1d4c559dd"}, - {file = "ecdsa-0.18.0.tar.gz", hash = "sha256:190348041559e21b22a1d65cee485282ca11a6f81d503fddb84d5017e9ed1e49"}, -] - -[package.dependencies] -six = ">=1.9.0" - -[package.extras] -gmpy = ["gmpy"] -gmpy2 = ["gmpy2"] +poetry = ["poetry"] [[package]] name = "exceptiongroup" -version = "1.1.1" +version = "1.2.0" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.1-py3-none-any.whl", hash = "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e"}, - {file = "exceptiongroup-1.1.1.tar.gz", hash = "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785"}, + {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, + {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, ] [package.extras] @@ -866,68 +1213,155 @@ test = ["pytest (>=6)"] [[package]] name = "execnet" -version = "1.9.0" +version = "2.0.2" description = "execnet: rapid multi-Python deployment" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.7" files = [ - {file = "execnet-1.9.0-py2.py3-none-any.whl", hash = "sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142"}, - {file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"}, + {file = "execnet-2.0.2-py3-none-any.whl", hash = "sha256:88256416ae766bc9e8895c76a87928c0012183da3cc4fc18016e6f050e025f41"}, + {file = "execnet-2.0.2.tar.gz", hash = "sha256:cc59bc4423742fd71ad227122eb0dd44db51efb3dc4095b45ac9a08c770096af"}, ] [package.extras] -testing = ["pre-commit"] +testing = ["hatch", "pre-commit", "pytest", "tox"] [[package]] name = "filelock" -version = "3.12.2" +version = "3.13.1" description = "A platform independent file lock." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, - {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, + {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"}, + {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"}, ] [package.extras] -docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] +docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.24)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] +typing = ["typing-extensions (>=4.8)"] [[package]] name = "flake8" -version = "6.1.0" +version = "7.0.0" description = "the modular source code checker: pep8 pyflakes and co" optional = false python-versions = ">=3.8.1" files = [ - {file = "flake8-6.1.0-py2.py3-none-any.whl", hash = "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"}, - {file = "flake8-6.1.0.tar.gz", hash = "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23"}, + {file = "flake8-7.0.0-py2.py3-none-any.whl", hash = "sha256:a6dfbb75e03252917f2473ea9653f7cd799c3064e54d4c8140044c5c065f53c3"}, + {file = "flake8-7.0.0.tar.gz", hash = "sha256:33f96621059e65eec474169085dc92bf26e7b2d47366b70be2f67ab80dc25132"}, ] [package.dependencies] mccabe = ">=0.7.0,<0.8.0" pycodestyle = ">=2.11.0,<2.12.0" -pyflakes = ">=3.1.0,<3.2.0" +pyflakes = ">=3.2.0,<3.3.0" [[package]] name = "freezegun" -version = "1.2.2" +version = "1.4.0" description = "Let your Python tests travel through time" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "freezegun-1.2.2-py3-none-any.whl", hash = "sha256:ea1b963b993cb9ea195adbd893a48d573fda951b0da64f60883d7e988b606c9f"}, - {file = "freezegun-1.2.2.tar.gz", hash = "sha256:cd22d1ba06941384410cd967d8a99d5ae2442f57dfafeff2fda5de8dc5c05446"}, + {file = "freezegun-1.4.0-py3-none-any.whl", hash = "sha256:55e0fc3c84ebf0a96a5aa23ff8b53d70246479e9a68863f1fcac5a3e52f19dd6"}, + {file = "freezegun-1.4.0.tar.gz", hash = "sha256:10939b0ba0ff5adaecf3b06a5c2f73071d9678e507c5eaedb23c761d56ac774b"}, ] [package.dependencies] python-dateutil = ">=2.7" +[[package]] +name = "frozenlist" +version = "1.4.1" +description = "A list-like structure which implements collections.abc.MutableSequence" +optional = false +python-versions = ">=3.8" +files = [ + {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f9aa1878d1083b276b0196f2dfbe00c9b7e752475ed3b682025ff20c1c1f51ac"}, + {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29acab3f66f0f24674b7dc4736477bcd4bc3ad4b896f5f45379a67bce8b96868"}, + {file = "frozenlist-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74fb4bee6880b529a0c6560885fce4dc95936920f9f20f53d99a213f7bf66776"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:590344787a90ae57d62511dd7c736ed56b428f04cd8c161fcc5e7232c130c69a"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:068b63f23b17df8569b7fdca5517edef76171cf3897eb68beb01341131fbd2ad"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c849d495bf5154cd8da18a9eb15db127d4dba2968d88831aff6f0331ea9bd4c"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9750cc7fe1ae3b1611bb8cfc3f9ec11d532244235d75901fb6b8e42ce9229dfe"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9b2de4cf0cdd5bd2dee4c4f63a653c61d2408055ab77b151c1957f221cabf2a"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0633c8d5337cb5c77acbccc6357ac49a1770b8c487e5b3505c57b949b4b82e98"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:27657df69e8801be6c3638054e202a135c7f299267f1a55ed3a598934f6c0d75"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:f9a3ea26252bd92f570600098783d1371354d89d5f6b7dfd87359d669f2109b5"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:4f57dab5fe3407b6c0c1cc907ac98e8a189f9e418f3b6e54d65a718aaafe3950"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e02a0e11cf6597299b9f3bbd3f93d79217cb90cfd1411aec33848b13f5c656cc"}, + {file = "frozenlist-1.4.1-cp310-cp310-win32.whl", hash = "sha256:a828c57f00f729620a442881cc60e57cfcec6842ba38e1b19fd3e47ac0ff8dc1"}, + {file = "frozenlist-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:f56e2333dda1fe0f909e7cc59f021eba0d2307bc6f012a1ccf2beca6ba362439"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a0cb6f11204443f27a1628b0e460f37fb30f624be6051d490fa7d7e26d4af3d0"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b46c8ae3a8f1f41a0d2ef350c0b6e65822d80772fe46b653ab6b6274f61d4a49"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fde5bd59ab5357e3853313127f4d3565fc7dad314a74d7b5d43c22c6a5ed2ced"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:722e1124aec435320ae01ee3ac7bec11a5d47f25d0ed6328f2273d287bc3abb0"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2471c201b70d58a0f0c1f91261542a03d9a5e088ed3dc6c160d614c01649c106"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c757a9dd70d72b076d6f68efdbb9bc943665ae954dad2801b874c8c69e185068"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f146e0911cb2f1da549fc58fc7bcd2b836a44b79ef871980d605ec392ff6b0d2"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9c515e7914626b2a2e1e311794b4c35720a0be87af52b79ff8e1429fc25f19"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c302220494f5c1ebeb0912ea782bcd5e2f8308037b3c7553fad0e48ebad6ad82"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:442acde1e068288a4ba7acfe05f5f343e19fac87bfc96d89eb886b0363e977ec"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:1b280e6507ea8a4fa0c0a7150b4e526a8d113989e28eaaef946cc77ffd7efc0a"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:fe1a06da377e3a1062ae5fe0926e12b84eceb8a50b350ddca72dc85015873f74"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db9e724bebd621d9beca794f2a4ff1d26eed5965b004a97f1f1685a173b869c2"}, + {file = "frozenlist-1.4.1-cp311-cp311-win32.whl", hash = "sha256:e774d53b1a477a67838a904131c4b0eef6b3d8a651f8b138b04f748fccfefe17"}, + {file = "frozenlist-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:fb3c2db03683b5767dedb5769b8a40ebb47d6f7f45b1b3e3b4b51ec8ad9d9825"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1979bc0aeb89b33b588c51c54ab0161791149f2461ea7c7c946d95d5f93b56ae"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cc7b01b3754ea68a62bd77ce6020afaffb44a590c2289089289363472d13aedb"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9c92be9fd329ac801cc420e08452b70e7aeab94ea4233a4804f0915c14eba9b"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3894db91f5a489fc8fa6a9991820f368f0b3cbdb9cd8849547ccfab3392d86"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba60bb19387e13597fb059f32cd4d59445d7b18b69a745b8f8e5db0346f33480"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8aefbba5f69d42246543407ed2461db31006b0f76c4e32dfd6f42215a2c41d09"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780d3a35680ced9ce682fbcf4cb9c2bad3136eeff760ab33707b71db84664e3a"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9acbb16f06fe7f52f441bb6f413ebae6c37baa6ef9edd49cdd567216da8600cd"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:23b701e65c7b36e4bf15546a89279bd4d8675faabc287d06bbcfac7d3c33e1e6"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3e0153a805a98f5ada7e09826255ba99fb4f7524bb81bf6b47fb702666484ae1"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:dd9b1baec094d91bf36ec729445f7769d0d0cf6b64d04d86e45baf89e2b9059b"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:1a4471094e146b6790f61b98616ab8e44f72661879cc63fa1049d13ef711e71e"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5667ed53d68d91920defdf4035d1cdaa3c3121dc0b113255124bcfada1cfa1b8"}, + {file = "frozenlist-1.4.1-cp312-cp312-win32.whl", hash = "sha256:beee944ae828747fd7cb216a70f120767fc9f4f00bacae8543c14a6831673f89"}, + {file = "frozenlist-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:64536573d0a2cb6e625cf309984e2d873979709f2cf22839bf2d61790b448ad5"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:20b51fa3f588ff2fe658663db52a41a4f7aa6c04f6201449c6c7c476bd255c0d"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:410478a0c562d1a5bcc2f7ea448359fcb050ed48b3c6f6f4f18c313a9bdb1826"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c6321c9efe29975232da3bd0af0ad216800a47e93d763ce64f291917a381b8eb"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48f6a4533887e189dae092f1cf981f2e3885175f7a0f33c91fb5b7b682b6bab6"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6eb73fa5426ea69ee0e012fb59cdc76a15b1283d6e32e4f8dc4482ec67d1194d"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbeb989b5cc29e8daf7f976b421c220f1b8c731cbf22b9130d8815418ea45887"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32453c1de775c889eb4e22f1197fe3bdfe457d16476ea407472b9442e6295f7a"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693945278a31f2086d9bf3df0fe8254bbeaef1fe71e1351c3bd730aa7d31c41b"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1d0ce09d36d53bbbe566fe296965b23b961764c0bcf3ce2fa45f463745c04701"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3a670dc61eb0d0eb7080890c13de3066790f9049b47b0de04007090807c776b0"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:dca69045298ce5c11fd539682cff879cc1e664c245d1c64da929813e54241d11"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a06339f38e9ed3a64e4c4e43aec7f59084033647f908e4259d279a52d3757d09"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b7f2f9f912dca3934c1baec2e4585a674ef16fe00218d833856408c48d5beee7"}, + {file = "frozenlist-1.4.1-cp38-cp38-win32.whl", hash = "sha256:e7004be74cbb7d9f34553a5ce5fb08be14fb33bc86f332fb71cbe5216362a497"}, + {file = "frozenlist-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:5a7d70357e7cee13f470c7883a063aae5fe209a493c57d86eb7f5a6f910fae09"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bfa4a17e17ce9abf47a74ae02f32d014c5e9404b6d9ac7f729e01562bbee601e"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b7e3ed87d4138356775346e6845cccbe66cd9e207f3cd11d2f0b9fd13681359d"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c99169d4ff810155ca50b4da3b075cbde79752443117d89429595c2e8e37fed8"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edb678da49d9f72c9f6c609fbe41a5dfb9a9282f9e6a2253d5a91e0fc382d7c0"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6db4667b187a6742b33afbbaf05a7bc551ffcf1ced0000a571aedbb4aa42fc7b"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55fdc093b5a3cb41d420884cdaf37a1e74c3c37a31f46e66286d9145d2063bd0"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82e8211d69a4f4bc360ea22cd6555f8e61a1bd211d1d5d39d3d228b48c83a897"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89aa2c2eeb20957be2d950b85974b30a01a762f3308cd02bb15e1ad632e22dc7"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d3e0c25a2350080e9319724dede4f31f43a6c9779be48021a7f4ebde8b2d742"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7268252af60904bf52c26173cbadc3a071cece75f873705419c8681f24d3edea"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0c250a29735d4f15321007fb02865f0e6b6a41a6b88f1f523ca1596ab5f50bd5"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:96ec70beabbd3b10e8bfe52616a13561e58fe84c0101dd031dc78f250d5128b9"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:23b2d7679b73fe0e5a4560b672a39f98dfc6f60df63823b0a9970525325b95f6"}, + {file = "frozenlist-1.4.1-cp39-cp39-win32.whl", hash = "sha256:a7496bfe1da7fb1a4e1cc23bb67c58fab69311cc7d32b5a99c2007b4b2a0e932"}, + {file = "frozenlist-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:e6a20a581f9ce92d389a8c7d7c3dd47c81fd5d6e655c8dddf341e14aa48659d0"}, + {file = "frozenlist-1.4.1-py3-none-any.whl", hash = "sha256:04ced3e6a46b4cfffe20f9ae482818e34eba9b5fb0ce4056e4cc9b6e212d09b7"}, + {file = "frozenlist-1.4.1.tar.gz", hash = "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b"}, +] + [[package]] name = "ghp-import" version = "2.1.0" description = "Copy your docs directly to the gh-pages branch." -optional = true +optional = false python-versions = "*" files = [ {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, @@ -942,13 +1376,13 @@ dev = ["flake8", "markdown", "twine", "wheel"] [[package]] name = "gitdb" -version = "4.0.10" +version = "4.0.11" description = "Git Object Database" optional = false python-versions = ">=3.7" files = [ - {file = "gitdb-4.0.10-py3-none-any.whl", hash = "sha256:c286cf298426064079ed96a9e4a9d39e7f3e9bf15ba60701e95f5492f28415c7"}, - {file = "gitdb-4.0.10.tar.gz", hash = "sha256:6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a"}, + {file = "gitdb-4.0.11-py3-none-any.whl", hash = "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4"}, + {file = "gitdb-4.0.11.tar.gz", hash = "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b"}, ] [package.dependencies] @@ -956,52 +1390,52 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.37" +version = "3.1.42" description = "GitPython is a Python library used to interact with Git repositories" optional = false python-versions = ">=3.7" files = [ - {file = "GitPython-3.1.37-py3-none-any.whl", hash = "sha256:5f4c4187de49616d710a77e98ddf17b4782060a1788df441846bddefbb89ab33"}, - {file = "GitPython-3.1.37.tar.gz", hash = "sha256:f9b9ddc0761c125d5780eab2d64be4873fc6817c2899cbcb34b02344bdc7bc54"}, + {file = "GitPython-3.1.42-py3-none-any.whl", hash = "sha256:1bf9cd7c9e7255f77778ea54359e54ac22a72a5b51288c457c881057b7bb9ecd"}, + {file = "GitPython-3.1.42.tar.gz", hash = "sha256:2d99869e0fef71a73cbd242528105af1d6c1b108c60dfabd994bf292f76c3ceb"}, ] [package.dependencies] gitdb = ">=4.0.1,<5" [package.extras] -test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-sugar"] +test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar"] [[package]] name = "google-api-core" -version = "2.11.0" +version = "2.17.1" description = "Google API client core library" optional = false python-versions = ">=3.7" files = [ - {file = "google-api-core-2.11.0.tar.gz", hash = "sha256:4b9bb5d5a380a0befa0573b302651b8a9a89262c1730e37bf423cec511804c22"}, - {file = "google_api_core-2.11.0-py3-none-any.whl", hash = "sha256:ce222e27b0de0d7bc63eb043b956996d6dccab14cc3b690aaea91c9cc99dc16e"}, + {file = "google-api-core-2.17.1.tar.gz", hash = "sha256:9df18a1f87ee0df0bc4eea2770ebc4228392d8cc4066655b320e2cfccb15db95"}, + {file = "google_api_core-2.17.1-py3-none-any.whl", hash = "sha256:610c5b90092c360736baccf17bd3efbcb30dd380e7a6dc28a71059edb8bd0d8e"}, ] [package.dependencies] -google-auth = ">=2.14.1,<3.0dev" -googleapis-common-protos = ">=1.56.2,<2.0dev" -protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" -requests = ">=2.18.0,<3.0.0dev" +google-auth = ">=2.14.1,<3.0.dev0" +googleapis-common-protos = ">=1.56.2,<2.0.dev0" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0" +requests = ">=2.18.0,<3.0.0.dev0" [package.extras] -grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "grpcio-status (>=1.33.2,<2.0dev)", "grpcio-status (>=1.49.1,<2.0dev)"] -grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0dev)"] -grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0dev)"] +grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "grpcio-status (>=1.33.2,<2.0.dev0)", "grpcio-status (>=1.49.1,<2.0.dev0)"] +grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] +grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] [[package]] name = "google-api-python-client" -version = "2.108.0" +version = "2.118.0" description = "Google API Client Library for Python" optional = false python-versions = ">=3.7" files = [ - {file = "google-api-python-client-2.108.0.tar.gz", hash = "sha256:6396efca83185fb205c0abdbc1c2ee57b40475578c6af37f6d0e30a639aade99"}, - {file = "google_api_python_client-2.108.0-py2.py3-none-any.whl", hash = "sha256:9d1327213e388943ebcd7db5ce6e7f47987a7e6874e3e1f6116010eea4a0e75d"}, + {file = "google-api-python-client-2.118.0.tar.gz", hash = "sha256:ebf4927a3f5184096647be8f705d090e7f06d48ad82b0fa431a2fe80c2cbe182"}, + {file = "google_api_python_client-2.118.0-py2.py3-none-any.whl", hash = "sha256:9d83b178496b180e058fd206ebfb70ea1afab49f235dd326f557513f56f496d5"}, ] [package.dependencies] @@ -1013,37 +1447,36 @@ uritemplate = ">=3.0.1,<5" [[package]] name = "google-auth" -version = "2.17.3" +version = "2.28.1" description = "Google Authentication Library" optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*" +python-versions = ">=3.7" files = [ - {file = "google-auth-2.17.3.tar.gz", hash = "sha256:ce311e2bc58b130fddf316df57c9b3943c2a7b4f6ec31de9663a9333e4064efc"}, - {file = "google_auth-2.17.3-py2.py3-none-any.whl", hash = "sha256:f586b274d3eb7bd932ea424b1c702a30e0393a2e2bc4ca3eae8263ffd8be229f"}, + {file = "google-auth-2.28.1.tar.gz", hash = "sha256:34fc3046c257cedcf1622fc4b31fc2be7923d9b4d44973d481125ecc50d83885"}, + {file = "google_auth-2.28.1-py2.py3-none-any.whl", hash = "sha256:25141e2d7a14bfcba945f5e9827f98092716e99482562f15306e5b026e21aa72"}, ] [package.dependencies] cachetools = ">=2.0.0,<6.0" pyasn1-modules = ">=0.2.1" -rsa = {version = ">=3.1.4,<5", markers = "python_version >= \"3.6\""} -six = ">=1.9.0" +rsa = ">=3.1.4,<5" [package.extras] -aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)", "requests (>=2.20.0,<3.0.0dev)"] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0.dev0)", "requests (>=2.20.0,<3.0.0.dev0)"] enterprise-cert = ["cryptography (==36.0.2)", "pyopenssl (==22.0.0)"] pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] reauth = ["pyu2f (>=0.1.5)"] -requests = ["requests (>=2.20.0,<3.0.0dev)"] +requests = ["requests (>=2.20.0,<3.0.0.dev0)"] [[package]] name = "google-auth-httplib2" -version = "0.1.1" +version = "0.2.0" description = "Google Authentication Library: httplib2 transport" optional = false python-versions = "*" files = [ - {file = "google-auth-httplib2-0.1.1.tar.gz", hash = "sha256:c64bc555fdc6dd788ea62ecf7bccffcf497bf77244887a3f3d7a5a02f8e3fc29"}, - {file = "google_auth_httplib2-0.1.1-py2.py3-none-any.whl", hash = "sha256:42c50900b8e4dcdf8222364d1f0efe32b8421fb6ed72f2613f12f75cc933478c"}, + {file = "google-auth-httplib2-0.2.0.tar.gz", hash = "sha256:38aa7badf48f974f1eb9861794e9c0cb2a0511a4ec0679b1f886d108f5640e05"}, + {file = "google_auth_httplib2-0.2.0-py2.py3-none-any.whl", hash = "sha256:b65a0a2123300dd71281a7bf6e64d65a0759287df52729bdd1ae2e47dc311a3d"}, ] [package.dependencies] @@ -1052,20 +1485,20 @@ httplib2 = ">=0.19.0" [[package]] name = "googleapis-common-protos" -version = "1.59.0" +version = "1.62.0" description = "Common protobufs used in Google APIs" optional = false python-versions = ">=3.7" files = [ - {file = "googleapis-common-protos-1.59.0.tar.gz", hash = "sha256:4168fcb568a826a52f23510412da405abd93f4d23ba544bb68d943b14ba3cb44"}, - {file = "googleapis_common_protos-1.59.0-py2.py3-none-any.whl", hash = "sha256:b287dc48449d1d41af0c69f4ea26242b5ae4c3d7249a38b0984c86a4caffff1f"}, + {file = "googleapis-common-protos-1.62.0.tar.gz", hash = "sha256:83f0ece9f94e5672cced82f592d2a5edf527a96ed1794f0bab36d5735c996277"}, + {file = "googleapis_common_protos-1.62.0-py2.py3-none-any.whl", hash = "sha256:4750113612205514f9f6aa4cb00d523a94f3e8c06c5ad2fee466387dc4875f07"}, ] [package.dependencies] -protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0" [package.extras] -grpc = ["grpcio (>=1.44.0,<2.0.0dev)"] +grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] [[package]] name = "grapheme" @@ -1091,6 +1524,64 @@ files = [ {file = "graphql_core-3.2.3-py3-none-any.whl", hash = "sha256:5766780452bd5ec8ba133f8bf287dc92713e3868ddd83aee4faab9fc3e303dc3"}, ] +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "h2" +version = "4.1.0" +description = "HTTP/2 State-Machine based protocol implementation" +optional = false +python-versions = ">=3.6.1" +files = [ + {file = "h2-4.1.0-py3-none-any.whl", hash = "sha256:03a46bcf682256c95b5fd9e9a99c1323584c3eec6440d379b9903d709476bc6d"}, + {file = "h2-4.1.0.tar.gz", hash = "sha256:a83aca08fbe7aacb79fec788c9c0bac936343560ed9ec18b82a13a12c28d2abb"}, +] + +[package.dependencies] +hpack = ">=4.0,<5" +hyperframe = ">=6.0,<7" + +[[package]] +name = "hpack" +version = "4.0.0" +description = "Pure-Python HPACK header compression" +optional = false +python-versions = ">=3.6.1" +files = [ + {file = "hpack-4.0.0-py3-none-any.whl", hash = "sha256:84a076fad3dc9a9f8063ccb8041ef100867b1878b25ef0ee63847a5d53818a6c"}, + {file = "hpack-4.0.0.tar.gz", hash = "sha256:fc41de0c63e687ebffde81187a948221294896f6bdc0ae2312708df339430095"}, +] + +[[package]] +name = "httpcore" +version = "1.0.4" +description = "A minimal low-level HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpcore-1.0.4-py3-none-any.whl", hash = "sha256:ac418c1db41bade2ad53ae2f3834a3a0f5ae76b56cf5aa497d2d033384fc7d73"}, + {file = "httpcore-1.0.4.tar.gz", hash = "sha256:cb2839ccfcba0d2d3c1131d3c3e26dfc327326fbe7a5dc0dbfe9f6c9151bb022"}, +] + +[package.dependencies] +certifi = "*" +h11 = ">=0.13,<0.15" + +[package.extras] +asyncio = ["anyio (>=4.0,<5.0)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +trio = ["trio (>=0.22.0,<0.25.0)"] + [[package]] name = "httplib2" version = "0.22.0" @@ -1105,35 +1596,71 @@ files = [ [package.dependencies] pyparsing = {version = ">=2.4.2,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.0.2 || >3.0.2,<3.0.3 || >3.0.3,<4", markers = "python_version > \"3.0\""} +[[package]] +name = "httpx" +version = "0.27.0" +description = "The next generation HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpx-0.27.0-py3-none-any.whl", hash = "sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5"}, + {file = "httpx-0.27.0.tar.gz", hash = "sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5"}, +] + +[package.dependencies] +anyio = "*" +certifi = "*" +h2 = {version = ">=3,<5", optional = true, markers = "extra == \"http2\""} +httpcore = "==1.*" +idna = "*" +sniffio = "*" + +[package.extras] +brotli = ["brotli", "brotlicffi"] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] + +[[package]] +name = "hyperframe" +version = "6.0.1" +description = "HTTP/2 framing layer for Python" +optional = false +python-versions = ">=3.6.1" +files = [ + {file = "hyperframe-6.0.1-py3-none-any.whl", hash = "sha256:0ec6bafd80d8ad2195c4f03aacba3a8265e57bc4cff261e802bf39970ed02a15"}, + {file = "hyperframe-6.0.1.tar.gz", hash = "sha256:ae510046231dc8e9ecb1a6586f63d2347bf4c8905914aa84ba585ae85f28a914"}, +] + [[package]] name = "idna" -version = "3.4" +version = "3.6" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, + {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, + {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, ] [[package]] name = "importlib-metadata" -version = "6.6.0" +version = "6.11.0" description = "Read metadata from Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "importlib_metadata-6.6.0-py3-none-any.whl", hash = "sha256:43dd286a2cd8995d5eaef7fee2066340423b818ed3fd70adf0bad5f1fac53fed"}, - {file = "importlib_metadata-6.6.0.tar.gz", hash = "sha256:92501cdf9cc66ebd3e612f1b4f0c0765dfa42f0fa38ffb319b6bd84dd675d705"}, + {file = "importlib_metadata-6.11.0-py3-none-any.whl", hash = "sha256:f0afba6205ad8f8947c7d338b5342d5db2afbfd82f9cbef7879a9539cc12eb9b"}, + {file = "importlib_metadata-6.11.0.tar.gz", hash = "sha256:1231cf92d825c9e03cfc4da076a16de6422c863558229ea0b22b675657463443"}, ] [package.dependencies] zipp = ">=0.5" [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] [[package]] name = "iniconfig" @@ -1162,30 +1689,27 @@ six = "*" [[package]] name = "isort" -version = "5.12.0" +version = "5.13.2" description = "A Python utility / library to sort Python imports." optional = false python-versions = ">=3.8.0" files = [ - {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, - {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, + {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"}, + {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"}, ] [package.extras] -colors = ["colorama (>=0.4.3)"] -pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] -plugins = ["setuptools"] -requirements-deprecated-finder = ["pip-api", "pipreqs"] +colors = ["colorama (>=0.4.6)"] [[package]] name = "jinja2" -version = "3.1.2" +version = "3.1.3" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, + {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, + {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, ] [package.dependencies] @@ -1205,6 +1729,23 @@ files = [ {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, ] +[[package]] +name = "joserfc" +version = "0.9.0" +description = "The ultimate Python library for JOSE RFCs, including JWS, JWE, JWK, JWA, JWT" +optional = false +python-versions = ">=3.8" +files = [ + {file = "joserfc-0.9.0-py3-none-any.whl", hash = "sha256:4026bdbe2c196cd40574e916fa1e28874d99649412edaab0e373dec3077153fb"}, + {file = "joserfc-0.9.0.tar.gz", hash = "sha256:eebca7f587b1761ce43a98ffd5327f2b600b9aa5bb0a77b947687f503ad43bc0"}, +] + +[package.dependencies] +cryptography = "*" + +[package.extras] +drafts = ["pycryptodome"] + [[package]] name = "jschema-to-python" version = "1.2.3" @@ -1248,19 +1789,18 @@ jsonpointer = ">=1.9" [[package]] name = "jsonpickle" -version = "3.0.2" +version = "3.0.3" description = "Python library for serializing any arbitrary object graph into JSON" optional = false python-versions = ">=3.7" files = [ - {file = "jsonpickle-3.0.2-py3-none-any.whl", hash = "sha256:4a8442d97ca3f77978afa58068768dba7bff2dbabe79a9647bc3cdafd4ef019f"}, - {file = "jsonpickle-3.0.2.tar.gz", hash = "sha256:e37abba4bfb3ca4a4647d28bb9f4706436f7b46c8a8333b4a718abafa8e46b37"}, + {file = "jsonpickle-3.0.3-py3-none-any.whl", hash = "sha256:e8d6dcc58f6722bea0321cd328fbda81c582461185688a535df02be0f699afb4"}, + {file = "jsonpickle-3.0.3.tar.gz", hash = "sha256:5691f44495327858ab3a95b9c440a79b41e35421be1a6e09a47b6c9b9421fd06"}, ] [package.extras] -docs = ["jaraco.packaging (>=3.2)", "rst.linker (>=1.9)", "sphinx"] -testing = ["ecdsa", "feedparser", "gmpy2", "numpy", "pandas", "pymongo", "pytest (>=3.5,!=3.7.3)", "pytest-black-multipy", "pytest-checkdocs (>=1.2.3)", "pytest-cov", "pytest-flake8 (>=1.1.1)", "scikit-learn", "sqlalchemy"] -testing-libs = ["simplejson", "ujson"] +docs = ["furo", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "sphinx"] +testing = ["ecdsa", "feedparser", "gmpy2", "numpy", "pandas", "pymongo", "pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-ruff", "scikit-learn", "simplejson", "sqlalchemy", "ujson"] [[package]] name = "jsonpointer" @@ -1275,13 +1815,13 @@ files = [ [[package]] name = "jsonschema" -version = "4.18.0" +version = "4.21.1" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema-4.18.0-py3-none-any.whl", hash = "sha256:b508dd6142bd03f4c3670534c80af68cd7bbff9ea830b9cf2625d4a3c49ddf60"}, - {file = "jsonschema-4.18.0.tar.gz", hash = "sha256:8caf5b57a990a98e9b39832ef3cb35c176fe331414252b6e1b26fd5866f891a4"}, + {file = "jsonschema-4.21.1-py3-none-any.whl", hash = "sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f"}, + {file = "jsonschema-4.21.1.tar.gz", hash = "sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5"}, ] [package.dependencies] @@ -1296,34 +1836,34 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- [[package]] name = "jsonschema-path" -version = "0.3.1" +version = "0.3.2" description = "JSONSchema Spec with object-oriented paths" optional = false python-versions = ">=3.8.0,<4.0.0" files = [ - {file = "jsonschema_path-0.3.1-py3-none-any.whl", hash = "sha256:06f01b1848a28963f49a17730e11204d252aa6ff5db4ef84ec77e5ac93cfa831"}, - {file = "jsonschema_path-0.3.1.tar.gz", hash = "sha256:07ea584b5c9b41a614b4d011c5575955676f48d0abbfd93d9ea8e933018d716d"}, + {file = "jsonschema_path-0.3.2-py3-none-any.whl", hash = "sha256:271aedfefcd161a0f467bdf23e1d9183691a61eaabf4b761046a914e369336c7"}, + {file = "jsonschema_path-0.3.2.tar.gz", hash = "sha256:4d0dababf341e36e9b91a5fb2a3e3fd300b0150e7fe88df4e55cc8253c5a3989"}, ] [package.dependencies] pathable = ">=0.4.1,<0.5.0" PyYAML = ">=5.1" -referencing = ">=0.28.0,<0.31.0" +referencing = ">=0.28.0,<0.32.0" requests = ">=2.31.0,<3.0.0" [[package]] name = "jsonschema-specifications" -version = "2023.6.1" +version = "2023.12.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema_specifications-2023.6.1-py3-none-any.whl", hash = "sha256:3d2b82663aff01815f744bb5c7887e2121a63399b49b104a3c96145474d091d7"}, - {file = "jsonschema_specifications-2023.6.1.tar.gz", hash = "sha256:ca1c4dd059a9e7b34101cf5b3ab7ff1d18b139f35950d598d629837ef66e8f28"}, + {file = "jsonschema_specifications-2023.12.1-py3-none-any.whl", hash = "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c"}, + {file = "jsonschema_specifications-2023.12.1.tar.gz", hash = "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"}, ] [package.dependencies] -referencing = ">=0.28.0" +referencing = ">=0.31.0" [[package]] name = "junit-xml" @@ -1367,76 +1907,77 @@ adal = ["adal (>=1.0.2)"] [[package]] name = "lazy-object-proxy" -version = "1.9.0" +version = "1.10.0" description = "A fast and thorough lazy object proxy." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "lazy-object-proxy-1.9.0.tar.gz", hash = "sha256:659fb5809fa4629b8a1ac5106f669cfc7bef26fbb389dda53b3e010d1ac4ebae"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b40387277b0ed2d0602b8293b94d7257e17d1479e257b4de114ea11a8cb7f2d7"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8c6cfb338b133fbdbc5cfaa10fe3c6aeea827db80c978dbd13bc9dd8526b7d4"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:721532711daa7db0d8b779b0bb0318fa87af1c10d7fe5e52ef30f8eff254d0cd"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:66a3de4a3ec06cd8af3f61b8e1ec67614fbb7c995d02fa224813cb7afefee701"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1aa3de4088c89a1b69f8ec0dcc169aa725b0ff017899ac568fe44ddc1396df46"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-win32.whl", hash = "sha256:f0705c376533ed2a9e5e97aacdbfe04cecd71e0aa84c7c0595d02ef93b6e4455"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:ea806fd4c37bf7e7ad82537b0757999264d5f70c45468447bb2b91afdbe73a6e"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:946d27deaff6cf8452ed0dba83ba38839a87f4f7a9732e8f9fd4107b21e6ff07"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79a31b086e7e68b24b99b23d57723ef7e2c6d81ed21007b6281ebcd1688acb0a"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f699ac1c768270c9e384e4cbd268d6e67aebcfae6cd623b4d7c3bfde5a35db59"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bfb38f9ffb53b942f2b5954e0f610f1e721ccebe9cce9025a38c8ccf4a5183a4"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:189bbd5d41ae7a498397287c408617fe5c48633e7755287b21d741f7db2706a9"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-win32.whl", hash = "sha256:81fc4d08b062b535d95c9ea70dbe8a335c45c04029878e62d744bdced5141586"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:f2457189d8257dd41ae9b434ba33298aec198e30adf2dcdaaa3a28b9994f6adb"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d9e25ef10a39e8afe59a5c348a4dbf29b4868ab76269f81ce1674494e2565a6e"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cbf9b082426036e19c6924a9ce90c740a9861e2bdc27a4834fd0a910742ac1e8"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f5fa4a61ce2438267163891961cfd5e32ec97a2c444e5b842d574251ade27d2"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8fa02eaab317b1e9e03f69aab1f91e120e7899b392c4fc19807a8278a07a97e8"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e7c21c95cae3c05c14aafffe2865bbd5e377cfc1348c4f7751d9dc9a48ca4bda"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win32.whl", hash = "sha256:f12ad7126ae0c98d601a7ee504c1122bcef553d1d5e0c3bfa77b16b3968d2734"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:edd20c5a55acb67c7ed471fa2b5fb66cb17f61430b7a6b9c3b4a1e40293b1671"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0daa332786cf3bb49e10dc6a17a52f6a8f9601b4cf5c295a4f85854d61de63"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cd077f3d04a58e83d04b20e334f678c2b0ff9879b9375ed107d5d07ff160171"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:660c94ea760b3ce47d1855a30984c78327500493d396eac4dfd8bd82041b22be"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:212774e4dfa851e74d393a2370871e174d7ff0ebc980907723bb67d25c8a7c30"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0117049dd1d5635bbff65444496c90e0baa48ea405125c088e93d9cf4525b11"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-win32.whl", hash = "sha256:0a891e4e41b54fd5b8313b96399f8b0e173bbbfc03c7631f01efbe29bb0bcf82"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:9990d8e71b9f6488e91ad25f322898c136b008d87bf852ff65391b004da5e17b"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9e7551208b2aded9c1447453ee366f1c4070602b3d932ace044715d89666899b"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f83ac4d83ef0ab017683d715ed356e30dd48a93746309c8f3517e1287523ef4"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7322c3d6f1766d4ef1e51a465f47955f1e8123caee67dd641e67d539a534d006"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:18b78ec83edbbeb69efdc0e9c1cb41a3b1b1ed11ddd8ded602464c3fc6020494"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:09763491ce220c0299688940f8dc2c5d05fd1f45af1e42e636b2e8b2303e4382"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-win32.whl", hash = "sha256:9090d8e53235aa280fc9239a86ae3ea8ac58eff66a705fa6aa2ec4968b95c821"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:db1c1722726f47e10e0b5fdbf15ac3b8adb58c091d12b3ab713965795036985f"}, + {file = "lazy-object-proxy-1.10.0.tar.gz", hash = "sha256:78247b6d45f43a52ef35c25b5581459e85117225408a4128a3daf8bf9648ac69"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:855e068b0358ab916454464a884779c7ffa312b8925c6f7401e952dcf3b89977"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab7004cf2e59f7c2e4345604a3e6ea0d92ac44e1c2375527d56492014e690c3"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc0d2fc424e54c70c4bc06787e4072c4f3b1aa2f897dfdc34ce1013cf3ceef05"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e2adb09778797da09d2b5ebdbceebf7dd32e2c96f79da9052b2e87b6ea495895"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1f711e2c6dcd4edd372cf5dec5c5a30d23bba06ee012093267b3376c079ec83"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-win32.whl", hash = "sha256:76a095cfe6045c7d0ca77db9934e8f7b71b14645f0094ffcd842349ada5c5fb9"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:b4f87d4ed9064b2628da63830986c3d2dca7501e6018347798313fcf028e2fd4"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fec03caabbc6b59ea4a638bee5fce7117be8e99a4103d9d5ad77f15d6f81020c"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02c83f957782cbbe8136bee26416686a6ae998c7b6191711a04da776dc9e47d4"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:009e6bb1f1935a62889ddc8541514b6a9e1fcf302667dcb049a0be5c8f613e56"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:75fc59fc450050b1b3c203c35020bc41bd2695ed692a392924c6ce180c6f1dc9"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:782e2c9b2aab1708ffb07d4bf377d12901d7a1d99e5e410d648d892f8967ab1f"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-win32.whl", hash = "sha256:edb45bb8278574710e68a6b021599a10ce730d156e5b254941754a9cc0b17d03"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:e271058822765ad5e3bca7f05f2ace0de58a3f4e62045a8c90a0dfd2f8ad8cc6"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e98c8af98d5707dcdecc9ab0863c0ea6e88545d42ca7c3feffb6b4d1e370c7ba"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:952c81d415b9b80ea261d2372d2a4a2332a3890c2b83e0535f263ddfe43f0d43"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80b39d3a151309efc8cc48675918891b865bdf742a8616a337cb0090791a0de9"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e221060b701e2aa2ea991542900dd13907a5c90fa80e199dbf5a03359019e7a3"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:92f09ff65ecff3108e56526f9e2481b8116c0b9e1425325e13245abfd79bdb1b"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-win32.whl", hash = "sha256:3ad54b9ddbe20ae9f7c1b29e52f123120772b06dbb18ec6be9101369d63a4074"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:127a789c75151db6af398b8972178afe6bda7d6f68730c057fbbc2e96b08d282"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9e4ed0518a14dd26092614412936920ad081a424bdcb54cc13349a8e2c6d106a"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ad9e6ed739285919aa9661a5bbed0aaf410aa60231373c5579c6b4801bd883c"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fc0a92c02fa1ca1e84fc60fa258458e5bf89d90a1ddaeb8ed9cc3147f417255"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0aefc7591920bbd360d57ea03c995cebc204b424524a5bd78406f6e1b8b2a5d8"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5faf03a7d8942bb4476e3b62fd0f4cf94eaf4618e304a19865abf89a35c0bbee"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-win32.whl", hash = "sha256:e333e2324307a7b5d86adfa835bb500ee70bfcd1447384a822e96495796b0ca4"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:cb73507defd385b7705c599a94474b1d5222a508e502553ef94114a143ec6696"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:366c32fe5355ef5fc8a232c5436f4cc66e9d3e8967c01fb2e6302fd6627e3d94"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2297f08f08a2bb0d32a4265e98a006643cd7233fb7983032bd61ac7a02956b3b"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18dd842b49456aaa9a7cf535b04ca4571a302ff72ed8740d06b5adcd41fe0757"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:217138197c170a2a74ca0e05bddcd5f1796c735c37d0eee33e43259b192aa424"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9a3a87cf1e133e5b1994144c12ca4aa3d9698517fe1e2ca82977781b16955658"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-win32.whl", hash = "sha256:30b339b2a743c5288405aa79a69e706a06e02958eab31859f7f3c04980853b70"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:a899b10e17743683b293a729d3a11f2f399e8a90c73b089e29f5d0fe3509f0dd"}, + {file = "lazy_object_proxy-1.10.0-pp310.pp311.pp312.pp38.pp39-none-any.whl", hash = "sha256:80fa48bd89c8f2f456fc0765c11c23bf5af827febacd2f523ca5bc1893fcc09d"}, ] [[package]] name = "markdown" -version = "3.4.4" +version = "3.5.2" description = "Python implementation of John Gruber's Markdown." -optional = true -python-versions = ">=3.7" +optional = false +python-versions = ">=3.8" files = [ - {file = "Markdown-3.4.4-py3-none-any.whl", hash = "sha256:a4c1b65c0957b4bd9e7d86ddc7b3c9868fb9670660f6f99f6d1bca8954d5a941"}, - {file = "Markdown-3.4.4.tar.gz", hash = "sha256:225c6123522495d4119a90b3a3ba31a1e87a70369e03f14799ea9c0d7183a3d6"}, + {file = "Markdown-3.5.2-py3-none-any.whl", hash = "sha256:d43323865d89fc0cb9b20c75fc8ad313af307cc087e84b657d9eec768eddeadd"}, + {file = "Markdown-3.5.2.tar.gz", hash = "sha256:e1ac7b3dc550ee80e602e71c1d168002f062e49f1b11e26a36264dafd4df2ef8"}, ] [package.dependencies] importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} [package.extras] -docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.0)", "mkdocs-nature (>=0.4)"] +docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] testing = ["coverage", "pyyaml"] [[package]] name = "markdown-it-py" -version = "2.2.0" +version = "3.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "markdown-it-py-2.2.0.tar.gz", hash = "sha256:7c9a5e412688bc771c67432cbfebcdd686c93ce6484913dccf06cb5a0bea35a1"}, - {file = "markdown_it_py-2.2.0-py3-none-any.whl", hash = "sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30"}, + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, ] [package.dependencies] @@ -1449,68 +1990,97 @@ compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0 linkify = ["linkify-it-py (>=1,<3)"] plugins = ["mdit-py-plugins"] profiling = ["gprof2dot"] -rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "markupsafe" -version = "2.1.2" +version = "2.1.5" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.7" files = [ - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, - {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, + {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, +] + +[[package]] +name = "marshmallow" +version = "3.21.0" +description = "A lightweight library for converting complex datatypes to and from native Python datatypes." +optional = false +python-versions = ">=3.8" +files = [ + {file = "marshmallow-3.21.0-py3-none-any.whl", hash = "sha256:e7997f83571c7fd476042c2c188e4ee8a78900ca5e74bd9c8097afa56624e9bd"}, + {file = "marshmallow-3.21.0.tar.gz", hash = "sha256:20f53be28c6e374a711a16165fb22a8dc6003e3f7cda1285e3ca777b9193885b"}, ] +[package.dependencies] +packaging = ">=17.0" + +[package.extras] +dev = ["marshmallow[tests]", "pre-commit (>=3.5,<4.0)", "tox"] +docs = ["alabaster (==0.7.16)", "autodocsumm (==0.2.12)", "sphinx (==7.2.6)", "sphinx-issues (==4.0.0)", "sphinx-version-warning (==1.1.2)"] +tests = ["pytest", "pytz", "simplejson"] + [[package]] name = "mccabe" version = "0.7.0" @@ -1537,18 +2107,99 @@ files = [ name = "mergedeep" version = "1.3.4" description = "A deep merge function for 🐍." -optional = true +optional = false python-versions = ">=3.6" 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.2.0" +description = "Core abstractions for kiota generated libraries in Python" +optional = false +python-versions = "*" +files = [ + {file = "microsoft_kiota_abstractions-1.2.0-py2.py3-none-any.whl", hash = "sha256:09061cec7e9c9da8bc3eced4488118c8b4a7ebd26aa8de2b46c43f07fee5610a"}, + {file = "microsoft_kiota_abstractions-1.2.0.tar.gz", hash = "sha256:2b38241402995952c5598923391dcbb84bd97e48c0d76f93e2817c69ba19e3f6"}, +] + +[package.dependencies] +opentelemetry-api = ">=1.19.0" +opentelemetry-sdk = ">=1.19.0" +std-uritemplate = ">=0.0.38" + +[[package]] +name = "microsoft-kiota-authentication-azure" +version = "1.0.0" +description = "Authentication provider for Kiota using Azure Identity" +optional = false +python-versions = "*" +files = [ + {file = "microsoft_kiota_authentication_azure-1.0.0-py2.py3-none-any.whl", hash = "sha256:289fe002951ae661415a6d3fa7c422c096b739165acb32d786316988120a1b27"}, + {file = "microsoft_kiota_authentication_azure-1.0.0.tar.gz", hash = "sha256:752304f8d94b884cfec12583dd763ec0478805c7f80b29344e78c6d55a97bd01"}, +] + +[package.dependencies] +aiohttp = ">=3.8.0" +azure-core = ">=1.21.1" +microsoft-kiota-abstractions = ">=1.0.0,<2.0.0" +opentelemetry-api = ">=1.20.0" +opentelemetry-sdk = ">=1.20.0" + +[[package]] +name = "microsoft-kiota-http" +version = "1.3.0" +description = "Kiota http request adapter implementation for httpx library" +optional = false +python-versions = "*" +files = [ + {file = "microsoft_kiota_http-1.3.0-py2.py3-none-any.whl", hash = "sha256:4be1fd892dcef31ecd8d616969e970437a0b6b98c3223980d6c4aa55582729aa"}, + {file = "microsoft_kiota_http-1.3.0.tar.gz", hash = "sha256:ae97bbfe4544c94e43591b44c8a60791689f31f7d16a9154df7738e829a28481"}, +] + +[package.dependencies] +httpx = {version = ">=0.23.0", extras = ["http2"]} +microsoft-kiota_abstractions = ">=1.0.0,<2.0.0" +opentelemetry-api = ">=1.20.0" +opentelemetry-sdk = ">=1.20.0" + +[[package]] +name = "microsoft-kiota-serialization-json" +version = "1.0.1" +description = "Implementation of Kiota Serialization interfaces for JSON" +optional = false +python-versions = "*" +files = [ + {file = "microsoft_kiota_serialization_json-1.0.1-py2.py3-none-any.whl", hash = "sha256:1b54602c6ec8185499213f6da24dcc90add2ffa5e328a61bdb50ddf8e1ba483b"}, + {file = "microsoft_kiota_serialization_json-1.0.1.tar.gz", hash = "sha256:1d93ecee5d31941e3bdfa3c0b319cfe629d4f59a95fb0fbe0b054f7dbdc0ff60"}, +] + +[package.dependencies] +microsoft-kiota_abstractions = ">=1.0.0,<2.0.0" +pendulum = ">=3.0.0b1" + +[[package]] +name = "microsoft-kiota-serialization-text" +version = "1.0.0" +description = "Implementation of Kiota Serialization interfaces for text/plain" +optional = false +python-versions = "*" +files = [ + {file = "microsoft_kiota_serialization_text-1.0.0-py2.py3-none-any.whl", hash = "sha256:1d3789e012b603e059a36cc675d1fd08cb81e0dde423d970c0af2eabce9c0d43"}, + {file = "microsoft_kiota_serialization_text-1.0.0.tar.gz", hash = "sha256:c3dd3f409b1c4f4963bd1e41d51b65f7e53e852130bb441d79b77dad88ee76ed"}, +] + +[package.dependencies] +microsoft-kiota_abstractions = ">=1.0.0,<2.0.0" +python-dateutil = ">=2.8.2" + [[package]] name = "mkdocs" version = "1.5.3" description = "Project documentation with Markdown." -optional = true +optional = false python-versions = ">=3.7" files = [ {file = "mkdocs-1.5.3-py3-none-any.whl", hash = "sha256:3b3a78e736b31158d64dbb2f8ba29bd46a379d0c6e324c2246c3bc3d2189cfc1"}, @@ -1575,15 +2226,32 @@ watchdog = ">=2.0" i18n = ["babel (>=2.9.0)"] min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pathspec (==0.11.1)", "platformdirs (==2.2.0)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"] +[[package]] +name = "mkdocs-git-revision-date-localized-plugin" +version = "1.2.4" +description = "Mkdocs plugin that enables displaying the localized date of the last git modification of a markdown file." +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs-git-revision-date-localized-plugin-1.2.4.tar.gz", hash = "sha256:08fd0c6f33c8da9e00daf40f7865943113b3879a1c621b2bbf0fa794ffe997d3"}, + {file = "mkdocs_git_revision_date_localized_plugin-1.2.4-py3-none-any.whl", hash = "sha256:1f94eb510862ef94e982a2910404fa17a1657ecf29f45a07b0f438c00767fc85"}, +] + +[package.dependencies] +babel = ">=2.7.0" +GitPython = "*" +mkdocs = ">=1.0" +pytz = "*" + [[package]] name = "mkdocs-material" -version = "9.4.10" +version = "9.5.11" description = "Documentation that simply works" -optional = true +optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.4.10-py3-none-any.whl", hash = "sha256:207c4ebc07faebb220437d2c626edb0c9760c82ccfc484500bd3eb30dfce988c"}, - {file = "mkdocs_material-9.4.10.tar.gz", hash = "sha256:421adedaeaa461dcaf55b8d406673934ade3d4f05ed9819e4cc7b4ee1d646a62"}, + {file = "mkdocs_material-9.5.11-py3-none-any.whl", hash = "sha256:788ee0f3e036dca2dc20298d65e480297d348a44c9d7b2ee05c5262983e66072"}, + {file = "mkdocs_material-9.5.11.tar.gz", hash = "sha256:7af7f8af0dea16175558f3fb9245d26c83a17199baa5f157755e63d7437bf971"}, ] [package.dependencies] @@ -1591,7 +2259,7 @@ babel = ">=2.10,<3.0" colorama = ">=0.4,<1.0" jinja2 = ">=3.0,<4.0" markdown = ">=3.2,<4.0" -mkdocs = ">=1.5.3,<2.0" +mkdocs = ">=1.5.3,<1.6.0" mkdocs-material-extensions = ">=1.3,<2.0" paginate = ">=0.5,<1.0" pygments = ">=2.16,<3.0" @@ -1600,19 +2268,19 @@ regex = ">=2022.4" requests = ">=2.26,<3.0" [package.extras] -git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2,<2.0)"] -imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=9.4,<10.0)"] +git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "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" +version = "1.3.1" description = "Extension pack for Python Markdown and MkDocs Material." -optional = true +optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material_extensions-1.3-py3-none-any.whl", hash = "sha256:0297cc48ba68a9fdd1ef3780a3b41b534b0d0df1d1181a44676fda5f464eeadc"}, - {file = "mkdocs_material_extensions-1.3.tar.gz", hash = "sha256:f0446091503acb110a7cab9349cbc90eeac51b58d1caa92a704a81ca1e24ddbd"}, + {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]] @@ -1633,64 +2301,56 @@ test = ["pytest", "pytest-cov"] [[package]] name = "moto" -version = "4.2.9" +version = "5.0.2" description = "" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "moto-4.2.9-py2.py3-none-any.whl", hash = "sha256:c85289d13d15d5274d0a643381af1f1b03d7ee88f0943c9d2d6c28e6177a298a"}, - {file = "moto-4.2.9.tar.gz", hash = "sha256:24de81eeaa450a20b57c5cdf9a757ea5216bddc7db798e335d2de1f2376bf324"}, + {file = "moto-5.0.2-py2.py3-none-any.whl", hash = "sha256:71bb832a18b64f10fc4cec117b9b0e2305e5831d9a17eb74f6b9819ed7613843"}, + {file = "moto-5.0.2.tar.gz", hash = "sha256:7e27395e5c63ff9554ae14b5baa41bfe6d6b1be0e59eb02977c6ce28411246de"}, ] [package.dependencies] aws-xray-sdk = {version = ">=0.93,<0.96 || >0.96", optional = true, markers = "extra == \"all\""} boto3 = ">=1.9.201" -botocore = ">=1.12.201" +botocore = ">=1.14.0" cfn-lint = {version = ">=0.40.0", optional = true, markers = "extra == \"all\""} cryptography = ">=3.3.1" docker = {version = ">=3.0.0", optional = true, markers = "extra == \"all\""} -ecdsa = {version = "!=0.15", optional = true, markers = "extra == \"all\""} graphql-core = {version = "*", optional = true, markers = "extra == \"all\""} Jinja2 = ">=2.10.1" +joserfc = {version = ">=0.9.0", optional = true, markers = "extra == \"all\""} jsondiff = {version = ">=1.1.2", optional = true, markers = "extra == \"all\""} multipart = {version = "*", optional = true, markers = "extra == \"all\""} openapi-spec-validator = {version = ">=0.5.0", optional = true, markers = "extra == \"all\""} -py-partiql-parser = {version = "0.4.2", optional = true, markers = "extra == \"all\""} +py-partiql-parser = {version = "0.5.1", optional = true, markers = "extra == \"all\""} pyparsing = {version = ">=3.0.7", optional = true, markers = "extra == \"all\""} python-dateutil = ">=2.1,<3.0.0" -python-jose = {version = ">=3.1.0,<4.0.0", extras = ["cryptography"], optional = true, markers = "extra == \"all\""} PyYAML = {version = ">=5.1", optional = true, markers = "extra == \"all\""} requests = ">=2.5" -responses = ">=0.13.0" +responses = ">=0.15.0" setuptools = {version = "*", optional = true, markers = "extra == \"all\""} -sshpubkeys = {version = ">=3.1.0", optional = true, markers = "extra == \"all\""} werkzeug = ">=0.5,<2.2.0 || >2.2.0,<2.2.1 || >2.2.1" xmltodict = "*" [package.extras] -all = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "multipart", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.4.2)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] -apigateway = ["PyYAML (>=5.1)", "ecdsa (!=0.15)", "openapi-spec-validator (>=0.5.0)", "python-jose[cryptography] (>=3.1.0,<4.0.0)"] -apigatewayv2 = ["PyYAML (>=5.1)"] +all = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "graphql-core", "joserfc (>=0.9.0)", "jsondiff (>=1.1.2)", "multipart", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.5.1)", "pyparsing (>=3.0.7)", "setuptools"] +apigateway = ["PyYAML (>=5.1)", "joserfc (>=0.9.0)", "openapi-spec-validator (>=0.5.0)"] +apigatewayv2 = ["PyYAML (>=5.1)", "openapi-spec-validator (>=0.5.0)"] appsync = ["graphql-core"] awslambda = ["docker (>=3.0.0)"] batch = ["docker (>=3.0.0)"] -cloudformation = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.4.2)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] -cognitoidp = ["ecdsa (!=0.15)", "python-jose[cryptography] (>=3.1.0,<4.0.0)"] -ds = ["sshpubkeys (>=3.1.0)"] -dynamodb = ["docker (>=3.0.0)", "py-partiql-parser (==0.4.2)"] -dynamodbstreams = ["docker (>=3.0.0)", "py-partiql-parser (==0.4.2)"] -ebs = ["sshpubkeys (>=3.1.0)"] -ec2 = ["sshpubkeys (>=3.1.0)"] -efs = ["sshpubkeys (>=3.1.0)"] -eks = ["sshpubkeys (>=3.1.0)"] +cloudformation = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "graphql-core", "joserfc (>=0.9.0)", "jsondiff (>=1.1.2)", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.5.1)", "pyparsing (>=3.0.7)", "setuptools"] +cognitoidp = ["joserfc (>=0.9.0)"] +dynamodb = ["docker (>=3.0.0)", "py-partiql-parser (==0.5.1)"] +dynamodbstreams = ["docker (>=3.0.0)", "py-partiql-parser (==0.5.1)"] glue = ["pyparsing (>=3.0.7)"] iotdata = ["jsondiff (>=1.1.2)"] -proxy = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=2.5.1)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "multipart", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.4.2)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] -resourcegroupstaggingapi = ["PyYAML (>=5.1)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.4.2)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "sshpubkeys (>=3.1.0)"] -route53resolver = ["sshpubkeys (>=3.1.0)"] -s3 = ["PyYAML (>=5.1)", "py-partiql-parser (==0.4.2)"] -s3crc32c = ["PyYAML (>=5.1)", "crc32c", "py-partiql-parser (==0.4.2)"] -server = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "ecdsa (!=0.15)", "flask (!=2.2.0,!=2.2.1)", "flask-cors", "graphql-core", "jsondiff (>=1.1.2)", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.4.2)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] +proxy = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=2.5.1)", "graphql-core", "joserfc (>=0.9.0)", "jsondiff (>=1.1.2)", "multipart", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.5.1)", "pyparsing (>=3.0.7)", "setuptools"] +resourcegroupstaggingapi = ["PyYAML (>=5.1)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "graphql-core", "joserfc (>=0.9.0)", "jsondiff (>=1.1.2)", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.5.1)", "pyparsing (>=3.0.7)"] +s3 = ["PyYAML (>=5.1)", "py-partiql-parser (==0.5.1)"] +s3crc32c = ["PyYAML (>=5.1)", "crc32c", "py-partiql-parser (==0.5.1)"] +server = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "flask (!=2.2.0,!=2.2.1)", "flask-cors", "graphql-core", "joserfc (>=0.9.0)", "jsondiff (>=1.1.2)", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.5.1)", "pyparsing (>=3.0.7)", "setuptools"] ssm = ["PyYAML (>=5.1)"] xray = ["aws-xray-sdk (>=0.93,!=0.96)", "setuptools"] @@ -1713,52 +2373,85 @@ tests = ["pytest (>=4.6)"] [[package]] name = "msal" -version = "1.24.1" -description = "The Microsoft Authentication Library (MSAL) for Python library" +version = "1.27.0" +description = "The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of users with Microsoft Azure Active Directory accounts (AAD) and Microsoft Accounts (MSA) using industry standard OAuth2 and OpenID Connect." optional = false python-versions = ">=2.7" files = [ - {file = "msal-1.24.1-py2.py3-none-any.whl", hash = "sha256:ce4320688f95c301ee74a4d0e9dbcfe029a63663a8cc61756f40d0d0d36574ad"}, - {file = "msal-1.24.1.tar.gz", hash = "sha256:aa0972884b3c6fdec53d9a0bd15c12e5bd7b71ac1b66d746f54d128709f3f8f8"}, + {file = "msal-1.27.0-py2.py3-none-any.whl", hash = "sha256:572d07149b83e7343a85a3bcef8e581167b4ac76befcbbb6eef0c0e19643cdc0"}, + {file = "msal-1.27.0.tar.gz", hash = "sha256:3109503c038ba6b307152b0e8d34f98113f2e7a78986e28d0baf5b5303afda52"}, ] [package.dependencies] -cryptography = ">=0.6,<44" +cryptography = ">=0.6,<45" PyJWT = {version = ">=1.0.0,<3", extras = ["crypto"]} requests = ">=2.0.0,<3" [package.extras] -broker = ["pymsalruntime (>=0.13.2,<0.14)"] +broker = ["pymsalruntime (>=0.13.2,<0.15)"] [[package]] name = "msal-extensions" -version = "1.0.0" +version = "1.1.0" description = "Microsoft Authentication Library extensions (MSAL EX) provides a persistence API that can save your data on disk, encrypted on Windows, macOS and Linux. Concurrent data access will be coordinated by a file lock mechanism." optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "msal-extensions-1.0.0.tar.gz", hash = "sha256:c676aba56b0cce3783de1b5c5ecfe828db998167875126ca4b47dc6436451354"}, - {file = "msal_extensions-1.0.0-py2.py3-none-any.whl", hash = "sha256:91e3db9620b822d0ed2b4d1850056a0f133cba04455e62f11612e40f5502f2ee"}, + {file = "msal-extensions-1.1.0.tar.gz", hash = "sha256:6ab357867062db7b253d0bd2df6d411c7891a0ee7308d54d1e4317c1d1c54252"}, + {file = "msal_extensions-1.1.0-py3-none-any.whl", hash = "sha256:01be9711b4c0b1a151450068eeb2c4f0997df3bba085ac299de3a66f585e382f"}, ] [package.dependencies] msal = ">=0.4.1,<2.0.0" +packaging = "*" portalocker = [ - {version = ">=1.0,<3", markers = "python_version >= \"3.5\" and platform_system != \"Windows\""}, - {version = ">=1.6,<3", markers = "python_version >= \"3.5\" and platform_system == \"Windows\""}, + {version = ">=1.0,<3", markers = "platform_system != \"Windows\""}, + {version = ">=1.6,<3", markers = "platform_system == \"Windows\""}, ] [[package]] name = "msgraph-core" -version = "0.2.2" -description = "Core component of the Microsoft Graph Python SDK consisting of HTTP/Graph Client and a configurable middleware pipeline (Preview)." +version = "1.0.0" +description = "Core component of the Microsoft Graph Python SDK" optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" +files = [ + {file = "msgraph-core-1.0.0.tar.gz", hash = "sha256:f26bcbbb3cd149dd7f1613159e0c2ed862888d61bfd20ef0b08b9408eb670c9d"}, + {file = "msgraph_core-1.0.0-py3-none-any.whl", hash = "sha256:f3de5149e246833b4b03605590d0b4eacf58d9c5a10fd951c37e53f0a345afd5"}, +] + +[package.dependencies] +httpx = {version = ">=0.23.0", extras = ["http2"]} +microsoft-kiota-abstractions = ">=1.0.0,<2.0.0" +microsoft-kiota-authentication-azure = ">=1.0.0,<2.0.0" +microsoft-kiota-http = ">=1.0.0,<2.0.0" + +[package.extras] +dev = ["bumpver", "isort", "mypy", "pylint", "pytest", "yapf"] + +[[package]] +name = "msgraph-sdk" +version = "1.0.0" +description = "The Microsoft Graph Python SDK" +optional = false +python-versions = ">=3.8" files = [ - {file = "msgraph-core-0.2.2.tar.gz", hash = "sha256:147324246788abe8ed7e05534cd9e4e0ec98b33b30e011693b8d014cebf97f63"}, - {file = "msgraph_core-0.2.2-py3-none-any.whl", hash = "sha256:e297564b9a0ca228493d8851f95cb2de9522143d82efa40ce3a6ad286e21392e"}, + {file = "msgraph-sdk-1.0.0.tar.gz", hash = "sha256:78c301d2aac7ac19bf3e2ace4356c6a077f50f3fd6e6da222fbe4dcbac0c5540"}, + {file = "msgraph_sdk-1.0.0-py3-none-any.whl", hash = "sha256:977cf806490077743530d0aa239c517be0035025299b62d50395b7fbf7e534ef"}, ] +[package.dependencies] +azure-identity = ">=1.12.0" +microsoft-kiota-abstractions = ">=1.0.0,<2.0.0" +microsoft-kiota-authentication-azure = ">=1.0.0,<2.0.0" +microsoft-kiota-http = ">=1.0.0,<2.0.0" +microsoft-kiota-serialization-json = ">=1.0.0,<2.0.0" +microsoft-kiota-serialization-text = ">=1.0.0,<2.0.0" +msgraph-core = ">=1.0.0a2" + +[package.extras] +dev = ["bumpver", "isort", "mypy", "pylint", "pytest", "yapf"] + [[package]] name = "msrest" version = "0.7.1" @@ -1796,6 +2489,105 @@ adal = ">=0.6.0,<2.0.0" msrest = ">=0.6.0,<2.0.0" six = "*" +[[package]] +name = "multidict" +version = "6.0.5" +description = "multidict implementation" +optional = false +python-versions = ">=3.7" +files = [ + {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b644ae063c10e7f324ab1ab6b548bdf6f8b47f3ec234fef1093bc2735e5f9"}, + {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:896ebdcf62683551312c30e20614305f53125750803b614e9e6ce74a96232604"}, + {file = "multidict-6.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:411bf8515f3be9813d06004cac41ccf7d1cd46dfe233705933dd163b60e37600"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d147090048129ce3c453f0292e7697d333db95e52616b3793922945804a433c"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:215ed703caf15f578dca76ee6f6b21b7603791ae090fbf1ef9d865571039ade5"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c6390cf87ff6234643428991b7359b5f59cc15155695deb4eda5c777d2b880f"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fd81c4ebdb4f214161be351eb5bcf385426bf023041da2fd9e60681f3cebae"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3cc2ad10255f903656017363cd59436f2111443a76f996584d1077e43ee51182"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6939c95381e003f54cd4c5516740faba40cf5ad3eeff460c3ad1d3e0ea2549bf"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:220dd781e3f7af2c2c1053da9fa96d9cf3072ca58f057f4c5adaaa1cab8fc442"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:766c8f7511df26d9f11cd3a8be623e59cca73d44643abab3f8c8c07620524e4a"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:fe5d7785250541f7f5019ab9cba2c71169dc7d74d0f45253f8313f436458a4ef"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1c1496e73051918fcd4f58ff2e0f2f3066d1c76a0c6aeffd9b45d53243702cc"}, + {file = "multidict-6.0.5-cp310-cp310-win32.whl", hash = "sha256:7afcdd1fc07befad18ec4523a782cde4e93e0a2bf71239894b8d61ee578c1319"}, + {file = "multidict-6.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:99f60d34c048c5c2fabc766108c103612344c46e35d4ed9ae0673d33c8fb26e8"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f285e862d2f153a70586579c15c44656f888806ed0e5b56b64489afe4a2dbfba"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:53689bb4e102200a4fafa9de9c7c3c212ab40a7ab2c8e474491914d2305f187e"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:612d1156111ae11d14afaf3a0669ebf6c170dbb735e510a7438ffe2369a847fd"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7be7047bd08accdb7487737631d25735c9a04327911de89ff1b26b81745bd4e3"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de170c7b4fe6859beb8926e84f7d7d6c693dfe8e27372ce3b76f01c46e489fcf"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04bde7a7b3de05732a4eb39c94574db1ec99abb56162d6c520ad26f83267de29"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85f67aed7bb647f93e7520633d8f51d3cbc6ab96957c71272b286b2f30dc70ed"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425bf820055005bfc8aa9a0b99ccb52cc2f4070153e34b701acc98d201693733"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d3eb1ceec286eba8220c26f3b0096cf189aea7057b6e7b7a2e60ed36b373b77f"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7901c05ead4b3fb75113fb1dd33eb1253c6d3ee37ce93305acd9d38e0b5f21a4"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e0e79d91e71b9867c73323a3444724d496c037e578a0e1755ae159ba14f4f3d1"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:29bfeb0dff5cb5fdab2023a7a9947b3b4af63e9c47cae2a10ad58394b517fddc"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e030047e85cbcedbfc073f71836d62dd5dadfbe7531cae27789ff66bc551bd5e"}, + {file = "multidict-6.0.5-cp311-cp311-win32.whl", hash = "sha256:2f4848aa3baa109e6ab81fe2006c77ed4d3cd1e0ac2c1fbddb7b1277c168788c"}, + {file = "multidict-6.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:2faa5ae9376faba05f630d7e5e6be05be22913782b927b19d12b8145968a85ea"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:51d035609b86722963404f711db441cf7134f1889107fb171a970c9701f92e1e"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cbebcd5bcaf1eaf302617c114aa67569dd3f090dd0ce8ba9e35e9985b41ac35b"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2ffc42c922dbfddb4a4c3b438eb056828719f07608af27d163191cb3e3aa6cc5"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ceb3b7e6a0135e092de86110c5a74e46bda4bd4fbfeeb3a3bcec79c0f861e450"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:79660376075cfd4b2c80f295528aa6beb2058fd289f4c9252f986751a4cd0496"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4428b29611e989719874670fd152b6625500ad6c686d464e99f5aaeeaca175a"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d84a5c3a5f7ce6db1f999fb9438f686bc2e09d38143f2d93d8406ed2dd6b9226"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76c0de87358b192de7ea9649beb392f107dcad9ad27276324c24c91774ca5271"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:79a6d2ba910adb2cbafc95dad936f8b9386e77c84c35bc0add315b856d7c3abb"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:92d16a3e275e38293623ebf639c471d3e03bb20b8ebb845237e0d3664914caef"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:fb616be3538599e797a2017cccca78e354c767165e8858ab5116813146041a24"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:14c2976aa9038c2629efa2c148022ed5eb4cb939e15ec7aace7ca932f48f9ba6"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:435a0984199d81ca178b9ae2c26ec3d49692d20ee29bc4c11a2a8d4514c67eda"}, + {file = "multidict-6.0.5-cp312-cp312-win32.whl", hash = "sha256:9fe7b0653ba3d9d65cbe7698cca585bf0f8c83dbbcc710db9c90f478e175f2d5"}, + {file = "multidict-6.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:01265f5e40f5a17f8241d52656ed27192be03bfa8764d88e8220141d1e4b3556"}, + {file = "multidict-6.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:19fe01cea168585ba0f678cad6f58133db2aa14eccaf22f88e4a6dccadfad8b3"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf7a982604375a8d49b6cc1b781c1747f243d91b81035a9b43a2126c04766f5"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:107c0cdefe028703fb5dafe640a409cb146d44a6ae201e55b35a4af8e95457dd"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:403c0911cd5d5791605808b942c88a8155c2592e05332d2bf78f18697a5fa15e"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aeaf541ddbad8311a87dd695ed9642401131ea39ad7bc8cf3ef3967fd093b626"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4972624066095e52b569e02b5ca97dbd7a7ddd4294bf4e7247d52635630dd83"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d946b0a9eb8aaa590df1fe082cee553ceab173e6cb5b03239716338629c50c7a"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b55358304d7a73d7bdf5de62494aaf70bd33015831ffd98bc498b433dfe5b10c"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a3145cb08d8625b2d3fee1b2d596a8766352979c9bffe5d7833e0503d0f0b5e5"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d65f25da8e248202bd47445cec78e0025c0fe7582b23ec69c3b27a640dd7a8e3"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c9bf56195c6bbd293340ea82eafd0071cb3d450c703d2c93afb89f93b8386ccc"}, + {file = "multidict-6.0.5-cp37-cp37m-win32.whl", hash = "sha256:69db76c09796b313331bb7048229e3bee7928eb62bab5e071e9f7fcc4879caee"}, + {file = "multidict-6.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:fce28b3c8a81b6b36dfac9feb1de115bab619b3c13905b419ec71d03a3fc1423"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:76f067f5121dcecf0d63a67f29080b26c43c71a98b10c701b0677e4a065fbd54"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b82cc8ace10ab5bd93235dfaab2021c70637005e1ac787031f4d1da63d493c1d"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5cb241881eefd96b46f89b1a056187ea8e9ba14ab88ba632e68d7a2ecb7aadf7"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8e94e6912639a02ce173341ff62cc1201232ab86b8a8fcc05572741a5dc7d93"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09a892e4a9fb47331da06948690ae38eaa2426de97b4ccbfafbdcbe5c8f37ff8"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55205d03e8a598cfc688c71ca8ea5f66447164efff8869517f175ea632c7cb7b"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37b15024f864916b4951adb95d3a80c9431299080341ab9544ed148091b53f50"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2a1dee728b52b33eebff5072817176c172050d44d67befd681609b4746e1c2e"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:edd08e6f2f1a390bf137080507e44ccc086353c8e98c657e666c017718561b89"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:60d698e8179a42ec85172d12f50b1668254628425a6bd611aba022257cac1386"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:3d25f19500588cbc47dc19081d78131c32637c25804df8414463ec908631e453"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4cc0ef8b962ac7a5e62b9e826bd0cd5040e7d401bc45a6835910ed699037a461"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:eca2e9d0cc5a889850e9bbd68e98314ada174ff6ccd1129500103df7a94a7a44"}, + {file = "multidict-6.0.5-cp38-cp38-win32.whl", hash = "sha256:4a6a4f196f08c58c59e0b8ef8ec441d12aee4125a7d4f4fef000ccb22f8d7241"}, + {file = "multidict-6.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:0275e35209c27a3f7951e1ce7aaf93ce0d163b28948444bec61dd7badc6d3f8c"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e7be68734bd8c9a513f2b0cfd508802d6609da068f40dc57d4e3494cefc92929"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1d9ea7a7e779d7a3561aade7d596649fbecfa5c08a7674b11b423783217933f9"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ea1456df2a27c73ce51120fa2f519f1bea2f4a03a917f4a43c8707cf4cbbae1a"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf590b134eb70629e350691ecca88eac3e3b8b3c86992042fb82e3cb1830d5e1"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5c0631926c4f58e9a5ccce555ad7747d9a9f8b10619621f22f9635f069f6233e"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dce1c6912ab9ff5f179eaf6efe7365c1f425ed690b03341911bf4939ef2f3046"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0868d64af83169e4d4152ec612637a543f7a336e4a307b119e98042e852ad9c"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:141b43360bfd3bdd75f15ed811850763555a251e38b2405967f8e25fb43f7d40"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7df704ca8cf4a073334e0427ae2345323613e4df18cc224f647f251e5e75a527"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6214c5a5571802c33f80e6c84713b2c79e024995b9c5897f794b43e714daeec9"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:cd6c8fca38178e12c00418de737aef1261576bd1b6e8c6134d3e729a4e858b38"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e02021f87a5b6932fa6ce916ca004c4d441509d33bbdbeca70d05dff5e9d2479"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ebd8d160f91a764652d3e51ce0d2956b38efe37c9231cd82cfc0bed2e40b581c"}, + {file = "multidict-6.0.5-cp39-cp39-win32.whl", hash = "sha256:04da1bb8c8dbadf2a18a452639771951c662c5ad03aefe4884775454be322c9b"}, + {file = "multidict-6.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:d6f6d4f185481c9669b9447bf9d9cf3b95a0e9df9d169bbc17e363b7d5487755"}, + {file = "multidict-6.0.5-py3-none-any.whl", hash = "sha256:0d63c74e3d7ab26de115c49bffc92cc77ed23395303d496eae515d4204a625e7"}, + {file = "multidict-6.0.5.tar.gz", hash = "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da"}, +] + [[package]] name = "multipart" version = "0.2.4" @@ -1854,17 +2646,17 @@ signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] [[package]] name = "openapi-schema-validator" -version = "0.6.0" +version = "0.6.2" description = "OpenAPI schema validation for Python" optional = false python-versions = ">=3.8.0,<4.0.0" files = [ - {file = "openapi_schema_validator-0.6.0-py3-none-any.whl", hash = "sha256:9e95b95b621efec5936245025df0d6a7ffacd1551e91d09196b3053040c931d7"}, - {file = "openapi_schema_validator-0.6.0.tar.gz", hash = "sha256:921b7c1144b856ca3813e41ecff98a4050f7611824dfc5c6ead7072636af0520"}, + {file = "openapi_schema_validator-0.6.2-py3-none-any.whl", hash = "sha256:c4887c1347c669eb7cded9090f4438b710845cd0f90d1fb9e1b3303fb37339f8"}, + {file = "openapi_schema_validator-0.6.2.tar.gz", hash = "sha256:11a95c9c9017912964e3e5f2545a5b11c3814880681fcacfb73b1759bb4f2804"}, ] [package.dependencies] -jsonschema = ">=4.18.0,<5.0.0" +jsonschema = ">=4.19.1,<5.0.0" jsonschema-specifications = ">=2023.5.2,<2024.0.0" rfc3339-validator = "*" @@ -1886,24 +2678,63 @@ lazy-object-proxy = ">=1.7.1,<2.0.0" openapi-schema-validator = ">=0.6.0,<0.7.0" [[package]] -name = "packaging" -version = "21.3" -description = "Core utilities for Python packages" +name = "opentelemetry-api" +version = "1.23.0" +description = "OpenTelemetry Python API" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_api-1.23.0-py3-none-any.whl", hash = "sha256:cc03ea4025353048aadb9c64919099663664672ea1c6be6ddd8fee8e4cd5e774"}, + {file = "opentelemetry_api-1.23.0.tar.gz", hash = "sha256:14a766548c8dd2eb4dfc349739eb4c3893712a0daa996e5dbf945f9da665da9d"}, +] + +[package.dependencies] +deprecated = ">=1.2.6" +importlib-metadata = ">=6.0,<7.0" + +[[package]] +name = "opentelemetry-sdk" +version = "1.23.0" +description = "OpenTelemetry Python SDK" +optional = false +python-versions = ">=3.8" files = [ - {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, - {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, + {file = "opentelemetry_sdk-1.23.0-py3-none-any.whl", hash = "sha256:a93c96990ac0f07c6d679e2f1015864ff7a4f5587122dd5af968034436efb1fd"}, + {file = "opentelemetry_sdk-1.23.0.tar.gz", hash = "sha256:9ddf60195837b59e72fd2033d6a47e2b59a0f74f0ec37d89387d89e3da8cab7f"}, ] [package.dependencies] -pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" +opentelemetry-api = "1.23.0" +opentelemetry-semantic-conventions = "0.44b0" +typing-extensions = ">=3.7.4" + +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.44b0" +description = "OpenTelemetry Semantic Conventions" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_semantic_conventions-0.44b0-py3-none-any.whl", hash = "sha256:7c434546c9cbd797ab980cc88bf9ff3f4a5a28f941117cad21694e43d5d92019"}, + {file = "opentelemetry_semantic_conventions-0.44b0.tar.gz", hash = "sha256:2e997cb28cd4ca81a25a9a43365f593d0c2b76be0685015349a89abdf1aa4ffa"}, +] + +[[package]] +name = "packaging" +version = "23.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, +] [[package]] name = "paginate" version = "0.5.6" description = "Divides large result sets into pages for easier browsing" -optional = true +optional = false python-versions = "*" files = [ {file = "paginate-0.5.6.tar.gz", hash = "sha256:5e6007b6a9398177a7e1648d04fdd9f8c9766a1a945bceac82f1929e8c78af2d"}, @@ -1922,50 +2753,149 @@ files = [ [[package]] name = "pathspec" -version = "0.11.1" +version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, - {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, ] [[package]] name = "pbr" -version = "5.11.1" +version = "6.0.0" description = "Python Build Reasonableness" optional = false python-versions = ">=2.6" files = [ - {file = "pbr-5.11.1-py2.py3-none-any.whl", hash = "sha256:567f09558bae2b3ab53cb3c1e2e33e726ff3338e7bae3db5dc954b3a44eef12b"}, - {file = "pbr-5.11.1.tar.gz", hash = "sha256:aefc51675b0b533d56bb5fd1c8c6c0522fe31896679882e1c4c63d5e4a0fccb3"}, + {file = "pbr-6.0.0-py2.py3-none-any.whl", hash = "sha256:4a7317d5e3b17a3dccb6a8cfe67dab65b20551404c52c8ed41279fa4f0cb4cda"}, + {file = "pbr-6.0.0.tar.gz", hash = "sha256:d1377122a5a00e2f940ee482999518efe16d745d423a670c27773dfbc3c9a7d9"}, +] + +[[package]] +name = "pendulum" +version = "3.0.0" +description = "Python datetimes made easy" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pendulum-3.0.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2cf9e53ef11668e07f73190c805dbdf07a1939c3298b78d5a9203a86775d1bfd"}, + {file = "pendulum-3.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fb551b9b5e6059377889d2d878d940fd0bbb80ae4810543db18e6f77b02c5ef6"}, + {file = "pendulum-3.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c58227ac260d5b01fc1025176d7b31858c9f62595737f350d22124a9a3ad82d"}, + {file = "pendulum-3.0.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:60fb6f415fea93a11c52578eaa10594568a6716602be8430b167eb0d730f3332"}, + {file = "pendulum-3.0.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b69f6b4dbcb86f2c2fe696ba991e67347bcf87fe601362a1aba6431454b46bde"}, + {file = "pendulum-3.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:138afa9c373ee450ede206db5a5e9004fd3011b3c6bbe1e57015395cd076a09f"}, + {file = "pendulum-3.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:83d9031f39c6da9677164241fd0d37fbfc9dc8ade7043b5d6d62f56e81af8ad2"}, + {file = "pendulum-3.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0c2308af4033fa534f089595bcd40a95a39988ce4059ccd3dc6acb9ef14ca44a"}, + {file = "pendulum-3.0.0-cp310-none-win_amd64.whl", hash = "sha256:9a59637cdb8462bdf2dbcb9d389518c0263799189d773ad5c11db6b13064fa79"}, + {file = "pendulum-3.0.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3725245c0352c95d6ca297193192020d1b0c0f83d5ee6bb09964edc2b5a2d508"}, + {file = "pendulum-3.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6c035f03a3e565ed132927e2c1b691de0dbf4eb53b02a5a3c5a97e1a64e17bec"}, + {file = "pendulum-3.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:597e66e63cbd68dd6d58ac46cb7a92363d2088d37ccde2dae4332ef23e95cd00"}, + {file = "pendulum-3.0.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99a0f8172e19f3f0c0e4ace0ad1595134d5243cf75985dc2233e8f9e8de263ca"}, + {file = "pendulum-3.0.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:77d8839e20f54706aed425bec82a83b4aec74db07f26acd039905d1237a5e1d4"}, + {file = "pendulum-3.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afde30e8146292b059020fbc8b6f8fd4a60ae7c5e6f0afef937bbb24880bdf01"}, + {file = "pendulum-3.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:660434a6fcf6303c4efd36713ca9212c753140107ee169a3fc6c49c4711c2a05"}, + {file = "pendulum-3.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dee9e5a48c6999dc1106eb7eea3e3a50e98a50651b72c08a87ee2154e544b33e"}, + {file = "pendulum-3.0.0-cp311-none-win_amd64.whl", hash = "sha256:d4cdecde90aec2d67cebe4042fd2a87a4441cc02152ed7ed8fb3ebb110b94ec4"}, + {file = "pendulum-3.0.0-cp311-none-win_arm64.whl", hash = "sha256:773c3bc4ddda2dda9f1b9d51fe06762f9200f3293d75c4660c19b2614b991d83"}, + {file = "pendulum-3.0.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:409e64e41418c49f973d43a28afe5df1df4f1dd87c41c7c90f1a63f61ae0f1f7"}, + {file = "pendulum-3.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a38ad2121c5ec7c4c190c7334e789c3b4624798859156b138fcc4d92295835dc"}, + {file = "pendulum-3.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fde4d0b2024b9785f66b7f30ed59281bd60d63d9213cda0eb0910ead777f6d37"}, + {file = "pendulum-3.0.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b2c5675769fb6d4c11238132962939b960fcb365436b6d623c5864287faa319"}, + {file = "pendulum-3.0.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8af95e03e066826f0f4c65811cbee1b3123d4a45a1c3a2b4fc23c4b0dff893b5"}, + {file = "pendulum-3.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2165a8f33cb15e06c67070b8afc87a62b85c5a273e3aaa6bc9d15c93a4920d6f"}, + {file = "pendulum-3.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ad5e65b874b5e56bd942546ea7ba9dd1d6a25121db1c517700f1c9de91b28518"}, + {file = "pendulum-3.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:17fe4b2c844bbf5f0ece69cfd959fa02957c61317b2161763950d88fed8e13b9"}, + {file = "pendulum-3.0.0-cp312-none-win_amd64.whl", hash = "sha256:78f8f4e7efe5066aca24a7a57511b9c2119f5c2b5eb81c46ff9222ce11e0a7a5"}, + {file = "pendulum-3.0.0-cp312-none-win_arm64.whl", hash = "sha256:28f49d8d1e32aae9c284a90b6bb3873eee15ec6e1d9042edd611b22a94ac462f"}, + {file = "pendulum-3.0.0-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:d4e2512f4e1a4670284a153b214db9719eb5d14ac55ada5b76cbdb8c5c00399d"}, + {file = "pendulum-3.0.0-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:3d897eb50883cc58d9b92f6405245f84b9286cd2de6e8694cb9ea5cb15195a32"}, + {file = "pendulum-3.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e169cc2ca419517f397811bbe4589cf3cd13fca6dc38bb352ba15ea90739ebb"}, + {file = "pendulum-3.0.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f17c3084a4524ebefd9255513692f7e7360e23c8853dc6f10c64cc184e1217ab"}, + {file = "pendulum-3.0.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:826d6e258052715f64d05ae0fc9040c0151e6a87aae7c109ba9a0ed930ce4000"}, + {file = "pendulum-3.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2aae97087872ef152a0c40e06100b3665d8cb86b59bc8471ca7c26132fccd0f"}, + {file = "pendulum-3.0.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ac65eeec2250d03106b5e81284ad47f0d417ca299a45e89ccc69e36130ca8bc7"}, + {file = "pendulum-3.0.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a5346d08f3f4a6e9e672187faa179c7bf9227897081d7121866358af369f44f9"}, + {file = "pendulum-3.0.0-cp37-none-win_amd64.whl", hash = "sha256:235d64e87946d8f95c796af34818c76e0f88c94d624c268693c85b723b698aa9"}, + {file = "pendulum-3.0.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:6a881d9c2a7f85bc9adafcfe671df5207f51f5715ae61f5d838b77a1356e8b7b"}, + {file = "pendulum-3.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d7762d2076b9b1cb718a6631ad6c16c23fc3fac76cbb8c454e81e80be98daa34"}, + {file = "pendulum-3.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e8e36a8130819d97a479a0e7bf379b66b3b1b520e5dc46bd7eb14634338df8c"}, + {file = "pendulum-3.0.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7dc843253ac373358ffc0711960e2dd5b94ab67530a3e204d85c6e8cb2c5fa10"}, + {file = "pendulum-3.0.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0a78ad3635d609ceb1e97d6aedef6a6a6f93433ddb2312888e668365908c7120"}, + {file = "pendulum-3.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b30a137e9e0d1f751e60e67d11fc67781a572db76b2296f7b4d44554761049d6"}, + {file = "pendulum-3.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c95984037987f4a457bb760455d9ca80467be792236b69d0084f228a8ada0162"}, + {file = "pendulum-3.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d29c6e578fe0f893766c0d286adbf0b3c726a4e2341eba0917ec79c50274ec16"}, + {file = "pendulum-3.0.0-cp38-none-win_amd64.whl", hash = "sha256:deaba8e16dbfcb3d7a6b5fabdd5a38b7c982809567479987b9c89572df62e027"}, + {file = "pendulum-3.0.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:b11aceea5b20b4b5382962b321dbc354af0defe35daa84e9ff3aae3c230df694"}, + {file = "pendulum-3.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a90d4d504e82ad236afac9adca4d6a19e4865f717034fc69bafb112c320dcc8f"}, + {file = "pendulum-3.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:825799c6b66e3734227756fa746cc34b3549c48693325b8b9f823cb7d21b19ac"}, + {file = "pendulum-3.0.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad769e98dc07972e24afe0cff8d365cb6f0ebc7e65620aa1976fcfbcadc4c6f3"}, + {file = "pendulum-3.0.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6fc26907eb5fb8cc6188cc620bc2075a6c534d981a2f045daa5f79dfe50d512"}, + {file = "pendulum-3.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c717eab1b6d898c00a3e0fa7781d615b5c5136bbd40abe82be100bb06df7a56"}, + {file = "pendulum-3.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3ddd1d66d1a714ce43acfe337190be055cdc221d911fc886d5a3aae28e14b76d"}, + {file = "pendulum-3.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:822172853d7a9cf6da95d7b66a16c7160cb99ae6df55d44373888181d7a06edc"}, + {file = "pendulum-3.0.0-cp39-none-win_amd64.whl", hash = "sha256:840de1b49cf1ec54c225a2a6f4f0784d50bd47f68e41dc005b7f67c7d5b5f3ae"}, + {file = "pendulum-3.0.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3b1f74d1e6ffe5d01d6023870e2ce5c2191486928823196f8575dcc786e107b1"}, + {file = "pendulum-3.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:729e9f93756a2cdfa77d0fc82068346e9731c7e884097160603872686e570f07"}, + {file = "pendulum-3.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e586acc0b450cd21cbf0db6bae386237011b75260a3adceddc4be15334689a9a"}, + {file = "pendulum-3.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22e7944ffc1f0099a79ff468ee9630c73f8c7835cd76fdb57ef7320e6a409df4"}, + {file = "pendulum-3.0.0-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:fa30af36bd8e50686846bdace37cf6707bdd044e5cb6e1109acbad3277232e04"}, + {file = "pendulum-3.0.0-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:440215347b11914ae707981b9a57ab9c7b6983ab0babde07063c6ee75c0dc6e7"}, + {file = "pendulum-3.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:314c4038dc5e6a52991570f50edb2f08c339debdf8cea68ac355b32c4174e820"}, + {file = "pendulum-3.0.0-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5acb1d386337415f74f4d1955c4ce8d0201978c162927d07df8eb0692b2d8533"}, + {file = "pendulum-3.0.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a789e12fbdefaffb7b8ac67f9d8f22ba17a3050ceaaa635cd1cc4645773a4b1e"}, + {file = "pendulum-3.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:860aa9b8a888e5913bd70d819306749e5eb488e6b99cd6c47beb701b22bdecf5"}, + {file = "pendulum-3.0.0-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:5ebc65ea033ef0281368217fbf59f5cb05b338ac4dd23d60959c7afcd79a60a0"}, + {file = "pendulum-3.0.0-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:d9fef18ab0386ef6a9ac7bad7e43ded42c83ff7ad412f950633854f90d59afa8"}, + {file = "pendulum-3.0.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:1c134ba2f0571d0b68b83f6972e2307a55a5a849e7dac8505c715c531d2a8795"}, + {file = "pendulum-3.0.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:385680812e7e18af200bb9b4a49777418c32422d05ad5a8eb85144c4a285907b"}, + {file = "pendulum-3.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9eec91cd87c59fb32ec49eb722f375bd58f4be790cae11c1b70fac3ee4f00da0"}, + {file = "pendulum-3.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4386bffeca23c4b69ad50a36211f75b35a4deb6210bdca112ac3043deb7e494a"}, + {file = "pendulum-3.0.0-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:dfbcf1661d7146d7698da4b86e7f04814221081e9fe154183e34f4c5f5fa3bf8"}, + {file = "pendulum-3.0.0-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:04a1094a5aa1daa34a6b57c865b25f691848c61583fb22722a4df5699f6bf74c"}, + {file = "pendulum-3.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5b0ec85b9045bd49dd3a3493a5e7ddfd31c36a2a60da387c419fa04abcaecb23"}, + {file = "pendulum-3.0.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0a15b90129765b705eb2039062a6daf4d22c4e28d1a54fa260892e8c3ae6e157"}, + {file = "pendulum-3.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:bb8f6d7acd67a67d6fedd361ad2958ff0539445ef51cbe8cd288db4306503cd0"}, + {file = "pendulum-3.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd69b15374bef7e4b4440612915315cc42e8575fcda2a3d7586a0d88192d0c88"}, + {file = "pendulum-3.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc00f8110db6898360c53c812872662e077eaf9c75515d53ecc65d886eec209a"}, + {file = "pendulum-3.0.0-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:83a44e8b40655d0ba565a5c3d1365d27e3e6778ae2a05b69124db9e471255c4a"}, + {file = "pendulum-3.0.0-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:1a3604e9fbc06b788041b2a8b78f75c243021e0f512447806a6d37ee5214905d"}, + {file = "pendulum-3.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:92c307ae7accebd06cbae4729f0ba9fa724df5f7d91a0964b1b972a22baa482b"}, + {file = "pendulum-3.0.0.tar.gz", hash = "sha256:5d034998dea404ec31fae27af6b22cff1708f830a1ed7353be4d1019bb9f584e"}, ] +[package.dependencies] +python-dateutil = ">=2.6" +tzdata = ">=2020.1" + +[package.extras] +test = ["time-machine (>=2.6.0)"] + [[package]] name = "platformdirs" -version = "3.5.0" +version = "4.2.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "platformdirs-3.5.0-py3-none-any.whl", hash = "sha256:47692bc24c1958e8b0f13dd727307cff1db103fca36399f457da8e05f222fdc4"}, - {file = "platformdirs-3.5.0.tar.gz", hash = "sha256:7954a68d0ba23558d753f73437c55f89027cf8f5108c19844d4b82e5af396335"}, + {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, + {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, ] [package.extras] -docs = ["furo (>=2023.3.27)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] [[package]] name = "pluggy" -version = "1.0.0" +version = "1.4.0" description = "plugin and hook calling mechanisms for python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, - {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, + {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, + {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, ] [package.extras] @@ -1974,13 +2904,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "portalocker" -version = "2.7.0" +version = "2.8.2" description = "Wraps the portalocker recipe for easy usage" optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" files = [ - {file = "portalocker-2.7.0-py2.py3-none-any.whl", hash = "sha256:a07c5b4f3985c3cf4798369631fb7011adb498e2a46d8440efc75a8f29a0f983"}, - {file = "portalocker-2.7.0.tar.gz", hash = "sha256:032e81d534a88ec1736d03f780ba073f047a06c478b06e2937486f334e955c51"}, + {file = "portalocker-2.8.2-py3-none-any.whl", hash = "sha256:cfb86acc09b9aa7c3b43594e19be1345b9d16af3feb08bf92f23d4dce513a28e"}, + {file = "portalocker-2.8.2.tar.gz", hash = "sha256:2b035aa7828e46c58e9b31390ee1f169b98e1066ab10b9a6a861fe7e25ee4f33"}, ] [package.dependencies] @@ -1989,53 +2919,51 @@ pywin32 = {version = ">=226", markers = "platform_system == \"Windows\""} [package.extras] docs = ["sphinx (>=1.7.1)"] redis = ["redis"] -tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "pytest-timeout (>=2.1.0)", "redis", "sphinx (>=6.0.0)"] +tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "pytest-timeout (>=2.1.0)", "redis", "sphinx (>=6.0.0)", "types-redis"] [[package]] name = "protobuf" -version = "4.23.0" +version = "4.25.3" description = "" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "protobuf-4.23.0-cp310-abi3-win32.whl", hash = "sha256:6c16657d6717a0c62d5d740cb354fbad1b0d8cb811669e06fc1caa0ff4799ddd"}, - {file = "protobuf-4.23.0-cp310-abi3-win_amd64.whl", hash = "sha256:baca40d067dddd62141a129f244703160d278648b569e90bb0e3753067644711"}, - {file = "protobuf-4.23.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:2b94bd6df92d71bd1234a2ffe7ce96ddf6d10cf637a18d6b55ad0a89fbb7fc21"}, - {file = "protobuf-4.23.0-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:9f5a0fbfcdcc364f3986f9ed9f8bb1328fb84114fd790423ff3d7fdb0f85c2d1"}, - {file = "protobuf-4.23.0-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:ebde3a023b8e11bfa6c890ef34cd6a8b47d586f26135e86c21344fe433daf2e2"}, - {file = "protobuf-4.23.0-cp37-cp37m-win32.whl", hash = "sha256:7cb5b9a05ce52c6a782bb97de52679bd3438ff2b7460eff5da348db65650f227"}, - {file = "protobuf-4.23.0-cp37-cp37m-win_amd64.whl", hash = "sha256:6fe180b56e1169d72ecc4acbd39186339aed20af5384531b8e8979b02bbee159"}, - {file = "protobuf-4.23.0-cp38-cp38-win32.whl", hash = "sha256:d5a35ff54e3f62e8fc7be02bb0d2fbc212bba1a5a9cc2748090690093996f07b"}, - {file = "protobuf-4.23.0-cp38-cp38-win_amd64.whl", hash = "sha256:e62fb869762b4ba18666370e2f8a18f17f8ab92dd4467295c6d38be6f8fef60b"}, - {file = "protobuf-4.23.0-cp39-cp39-win32.whl", hash = "sha256:03eee35b60317112a72d19c54d0bff7bc58ff12fea4cd7b018232bd99758ffdf"}, - {file = "protobuf-4.23.0-cp39-cp39-win_amd64.whl", hash = "sha256:36f5370a930cb77c8ad2f4135590c672d0d2c72d4a707c7d0058dce4b4b4a598"}, - {file = "protobuf-4.23.0-py3-none-any.whl", hash = "sha256:9744e934ea5855d12191040ea198eaf704ac78665d365a89d9572e3b627c2688"}, - {file = "protobuf-4.23.0.tar.gz", hash = "sha256:5f1eba1da2a2f3f7df469fccddef3cc060b8a16cfe3cc65961ad36b4dbcf59c5"}, + {file = "protobuf-4.25.3-cp310-abi3-win32.whl", hash = "sha256:d4198877797a83cbfe9bffa3803602bbe1625dc30d8a097365dbc762e5790faa"}, + {file = "protobuf-4.25.3-cp310-abi3-win_amd64.whl", hash = "sha256:209ba4cc916bab46f64e56b85b090607a676f66b473e6b762e6f1d9d591eb2e8"}, + {file = "protobuf-4.25.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:f1279ab38ecbfae7e456a108c5c0681e4956d5b1090027c1de0f934dfdb4b35c"}, + {file = "protobuf-4.25.3-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:e7cb0ae90dd83727f0c0718634ed56837bfeeee29a5f82a7514c03ee1364c019"}, + {file = "protobuf-4.25.3-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:7c8daa26095f82482307bc717364e7c13f4f1c99659be82890dcfc215194554d"}, + {file = "protobuf-4.25.3-cp38-cp38-win32.whl", hash = "sha256:f4f118245c4a087776e0a8408be33cf09f6c547442c00395fbfb116fac2f8ac2"}, + {file = "protobuf-4.25.3-cp38-cp38-win_amd64.whl", hash = "sha256:c053062984e61144385022e53678fbded7aea14ebb3e0305ae3592fb219ccfa4"}, + {file = "protobuf-4.25.3-cp39-cp39-win32.whl", hash = "sha256:19b270aeaa0099f16d3ca02628546b8baefe2955bbe23224aaf856134eccf1e4"}, + {file = "protobuf-4.25.3-cp39-cp39-win_amd64.whl", hash = "sha256:e3c97a1555fd6388f857770ff8b9703083de6bf1f9274a002a332d65fbb56c8c"}, + {file = "protobuf-4.25.3-py3-none-any.whl", hash = "sha256:f0700d54bcf45424477e46a9f0944155b46fb0639d69728739c0e47bab83f2b9"}, + {file = "protobuf-4.25.3.tar.gz", hash = "sha256:25b5d0b42fd000320bd7830b349e3b696435f3b329810427a6bcce6a5492cc5c"}, ] [[package]] name = "py-partiql-parser" -version = "0.4.2" +version = "0.5.1" description = "Pure Python PartiQL Parser" optional = false python-versions = "*" files = [ - {file = "py-partiql-parser-0.4.2.tar.gz", hash = "sha256:9c99d545be7897c6bfa97a107f6cfbcd92e359d394e4f3b95430e6409e8dd1e1"}, - {file = "py_partiql_parser-0.4.2-py3-none-any.whl", hash = "sha256:f3f34de8dddf65ed2d47b4263560bbf97be1ecc6bd5c61da039ede90f26a10ce"}, + {file = "py-partiql-parser-0.5.1.tar.gz", hash = "sha256:aeac8f46529d8651bbae88a1a6c14dc3aa38ebc4bc6bd1eb975044c0564246c6"}, + {file = "py_partiql_parser-0.5.1-py3-none-any.whl", hash = "sha256:53053e70987dea2983e1990ad85f87a7d8cec13dd4a4b065a740bcfd661f5a6b"}, ] [package.extras] -dev = ["black (==22.6.0)", "flake8", "mypy (==0.971)", "pytest"] +dev = ["black (==22.6.0)", "flake8", "mypy", "pytest"] [[package]] name = "pyasn1" -version = "0.5.0" +version = "0.5.1" description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "pyasn1-0.5.0-py2.py3-none-any.whl", hash = "sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57"}, - {file = "pyasn1-0.5.0.tar.gz", hash = "sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde"}, + {file = "pyasn1-0.5.1-py2.py3-none-any.whl", hash = "sha256:4439847c58d40b1d0a573d07e3856e95333f1976294494c325775aeca506eb58"}, + {file = "pyasn1-0.5.1.tar.gz", hash = "sha256:6d391a96e59b23130a5cfa74d6fd7f388dbbe26cc8f1edf39fdddf08d9d6676c"}, ] [[package]] @@ -2054,13 +2982,13 @@ pyasn1 = ">=0.4.6,<0.6.0" [[package]] name = "pycodestyle" -version = "2.11.0" +version = "2.11.1" description = "Python style guide checker" optional = false python-versions = ">=3.8" files = [ - {file = "pycodestyle-2.11.0-py2.py3-none-any.whl", hash = "sha256:5d1013ba8dc7895b548be5afb05740ca82454fd899971563d2ef625d090326f8"}, - {file = "pycodestyle-2.11.0.tar.gz", hash = "sha256:259bcc17857d8a8b3b4a2327324b79e5f020a13c16074670f9c8c8f872ea76d0"}, + {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"}, + {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"}, ] [[package]] @@ -2076,47 +3004,47 @@ files = [ [[package]] name = "pydantic" -version = "1.10.13" +version = "1.10.14" description = "Data validation and settings management using python type hints" optional = false python-versions = ">=3.7" files = [ - {file = "pydantic-1.10.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:efff03cc7a4f29d9009d1c96ceb1e7a70a65cfe86e89d34e4a5f2ab1e5693737"}, - {file = "pydantic-1.10.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3ecea2b9d80e5333303eeb77e180b90e95eea8f765d08c3d278cd56b00345d01"}, - {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1740068fd8e2ef6eb27a20e5651df000978edce6da6803c2bef0bc74540f9548"}, - {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84bafe2e60b5e78bc64a2941b4c071a4b7404c5c907f5f5a99b0139781e69ed8"}, - {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bc0898c12f8e9c97f6cd44c0ed70d55749eaf783716896960b4ecce2edfd2d69"}, - {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:654db58ae399fe6434e55325a2c3e959836bd17a6f6a0b6ca8107ea0571d2e17"}, - {file = "pydantic-1.10.13-cp310-cp310-win_amd64.whl", hash = "sha256:75ac15385a3534d887a99c713aa3da88a30fbd6204a5cd0dc4dab3d770b9bd2f"}, - {file = "pydantic-1.10.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c553f6a156deb868ba38a23cf0df886c63492e9257f60a79c0fd8e7173537653"}, - {file = "pydantic-1.10.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5e08865bc6464df8c7d61439ef4439829e3ab62ab1669cddea8dd00cd74b9ffe"}, - {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e31647d85a2013d926ce60b84f9dd5300d44535a9941fe825dc349ae1f760df9"}, - {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:210ce042e8f6f7c01168b2d84d4c9eb2b009fe7bf572c2266e235edf14bacd80"}, - {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8ae5dd6b721459bfa30805f4c25880e0dd78fc5b5879f9f7a692196ddcb5a580"}, - {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f8e81fc5fb17dae698f52bdd1c4f18b6ca674d7068242b2aff075f588301bbb0"}, - {file = "pydantic-1.10.13-cp311-cp311-win_amd64.whl", hash = "sha256:61d9dce220447fb74f45e73d7ff3b530e25db30192ad8d425166d43c5deb6df0"}, - {file = "pydantic-1.10.13-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4b03e42ec20286f052490423682016fd80fda830d8e4119f8ab13ec7464c0132"}, - {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f59ef915cac80275245824e9d771ee939133be38215555e9dc90c6cb148aaeb5"}, - {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a1f9f747851338933942db7af7b6ee8268568ef2ed86c4185c6ef4402e80ba8"}, - {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:97cce3ae7341f7620a0ba5ef6cf043975cd9d2b81f3aa5f4ea37928269bc1b87"}, - {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:854223752ba81e3abf663d685f105c64150873cc6f5d0c01d3e3220bcff7d36f"}, - {file = "pydantic-1.10.13-cp37-cp37m-win_amd64.whl", hash = "sha256:b97c1fac8c49be29486df85968682b0afa77e1b809aff74b83081cc115e52f33"}, - {file = "pydantic-1.10.13-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c958d053453a1c4b1c2062b05cd42d9d5c8eb67537b8d5a7e3c3032943ecd261"}, - {file = "pydantic-1.10.13-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c5370a7edaac06daee3af1c8b1192e305bc102abcbf2a92374b5bc793818599"}, - {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d6f6e7305244bddb4414ba7094ce910560c907bdfa3501e9db1a7fd7eaea127"}, - {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3a3c792a58e1622667a2837512099eac62490cdfd63bd407993aaf200a4cf1f"}, - {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c636925f38b8db208e09d344c7aa4f29a86bb9947495dd6b6d376ad10334fb78"}, - {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:678bcf5591b63cc917100dc50ab6caebe597ac67e8c9ccb75e698f66038ea953"}, - {file = "pydantic-1.10.13-cp38-cp38-win_amd64.whl", hash = "sha256:6cf25c1a65c27923a17b3da28a0bdb99f62ee04230c931d83e888012851f4e7f"}, - {file = "pydantic-1.10.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8ef467901d7a41fa0ca6db9ae3ec0021e3f657ce2c208e98cd511f3161c762c6"}, - {file = "pydantic-1.10.13-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:968ac42970f57b8344ee08837b62f6ee6f53c33f603547a55571c954a4225691"}, - {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9849f031cf8a2f0a928fe885e5a04b08006d6d41876b8bbd2fc68a18f9f2e3fd"}, - {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:56e3ff861c3b9c6857579de282ce8baabf443f42ffba355bf070770ed63e11e1"}, - {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f00790179497767aae6bcdc36355792c79e7bbb20b145ff449700eb076c5f96"}, - {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:75b297827b59bc229cac1a23a2f7a4ac0031068e5be0ce385be1462e7e17a35d"}, - {file = "pydantic-1.10.13-cp39-cp39-win_amd64.whl", hash = "sha256:e70ca129d2053fb8b728ee7d1af8e553a928d7e301a311094b8a0501adc8763d"}, - {file = "pydantic-1.10.13-py3-none-any.whl", hash = "sha256:b87326822e71bd5f313e7d3bfdc77ac3247035ac10b0c0618bd99dcf95b1e687"}, - {file = "pydantic-1.10.13.tar.gz", hash = "sha256:32c8b48dcd3b2ac4e78b0ba4af3a2c2eb6048cb75202f0ea7b34feb740efc340"}, + {file = "pydantic-1.10.14-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7f4fcec873f90537c382840f330b90f4715eebc2bc9925f04cb92de593eae054"}, + {file = "pydantic-1.10.14-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e3a76f571970fcd3c43ad982daf936ae39b3e90b8a2e96c04113a369869dc87"}, + {file = "pydantic-1.10.14-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82d886bd3c3fbeaa963692ef6b643159ccb4b4cefaf7ff1617720cbead04fd1d"}, + {file = "pydantic-1.10.14-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:798a3d05ee3b71967844a1164fd5bdb8c22c6d674f26274e78b9f29d81770c4e"}, + {file = "pydantic-1.10.14-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:23d47a4b57a38e8652bcab15a658fdb13c785b9ce217cc3a729504ab4e1d6bc9"}, + {file = "pydantic-1.10.14-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f9f674b5c3bebc2eba401de64f29948ae1e646ba2735f884d1594c5f675d6f2a"}, + {file = "pydantic-1.10.14-cp310-cp310-win_amd64.whl", hash = "sha256:24a7679fab2e0eeedb5a8924fc4a694b3bcaac7d305aeeac72dd7d4e05ecbebf"}, + {file = "pydantic-1.10.14-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9d578ac4bf7fdf10ce14caba6f734c178379bd35c486c6deb6f49006e1ba78a7"}, + {file = "pydantic-1.10.14-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fa7790e94c60f809c95602a26d906eba01a0abee9cc24150e4ce2189352deb1b"}, + {file = "pydantic-1.10.14-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aad4e10efa5474ed1a611b6d7f0d130f4aafadceb73c11d9e72823e8f508e663"}, + {file = "pydantic-1.10.14-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1245f4f61f467cb3dfeced2b119afef3db386aec3d24a22a1de08c65038b255f"}, + {file = "pydantic-1.10.14-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:21efacc678a11114c765eb52ec0db62edffa89e9a562a94cbf8fa10b5db5c046"}, + {file = "pydantic-1.10.14-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:412ab4a3f6dbd2bf18aefa9f79c7cca23744846b31f1d6555c2ee2b05a2e14ca"}, + {file = "pydantic-1.10.14-cp311-cp311-win_amd64.whl", hash = "sha256:e897c9f35281f7889873a3e6d6b69aa1447ceb024e8495a5f0d02ecd17742a7f"}, + {file = "pydantic-1.10.14-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d604be0f0b44d473e54fdcb12302495fe0467c56509a2f80483476f3ba92b33c"}, + {file = "pydantic-1.10.14-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a42c7d17706911199798d4c464b352e640cab4351efe69c2267823d619a937e5"}, + {file = "pydantic-1.10.14-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:596f12a1085e38dbda5cbb874d0973303e34227b400b6414782bf205cc14940c"}, + {file = "pydantic-1.10.14-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bfb113860e9288d0886e3b9e49d9cf4a9d48b441f52ded7d96db7819028514cc"}, + {file = "pydantic-1.10.14-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:bc3ed06ab13660b565eed80887fcfbc0070f0aa0691fbb351657041d3e874efe"}, + {file = "pydantic-1.10.14-cp37-cp37m-win_amd64.whl", hash = "sha256:ad8c2bc677ae5f6dbd3cf92f2c7dc613507eafe8f71719727cbc0a7dec9a8c01"}, + {file = "pydantic-1.10.14-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c37c28449752bb1f47975d22ef2882d70513c546f8f37201e0fec3a97b816eee"}, + {file = "pydantic-1.10.14-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:49a46a0994dd551ec051986806122767cf144b9702e31d47f6d493c336462597"}, + {file = "pydantic-1.10.14-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53e3819bd20a42470d6dd0fe7fc1c121c92247bca104ce608e609b59bc7a77ee"}, + {file = "pydantic-1.10.14-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0fbb503bbbbab0c588ed3cd21975a1d0d4163b87e360fec17a792f7d8c4ff29f"}, + {file = "pydantic-1.10.14-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:336709883c15c050b9c55a63d6c7ff09be883dbc17805d2b063395dd9d9d0022"}, + {file = "pydantic-1.10.14-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4ae57b4d8e3312d486e2498d42aed3ece7b51848336964e43abbf9671584e67f"}, + {file = "pydantic-1.10.14-cp38-cp38-win_amd64.whl", hash = "sha256:dba49d52500c35cfec0b28aa8b3ea5c37c9df183ffc7210b10ff2a415c125c4a"}, + {file = "pydantic-1.10.14-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c66609e138c31cba607d8e2a7b6a5dc38979a06c900815495b2d90ce6ded35b4"}, + {file = "pydantic-1.10.14-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d986e115e0b39604b9eee3507987368ff8148222da213cd38c359f6f57b3b347"}, + {file = "pydantic-1.10.14-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:646b2b12df4295b4c3148850c85bff29ef6d0d9621a8d091e98094871a62e5c7"}, + {file = "pydantic-1.10.14-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282613a5969c47c83a8710cc8bfd1e70c9223feb76566f74683af889faadc0ea"}, + {file = "pydantic-1.10.14-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:466669501d08ad8eb3c4fecd991c5e793c4e0bbd62299d05111d4f827cded64f"}, + {file = "pydantic-1.10.14-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:13e86a19dca96373dcf3190fcb8797d40a6f12f154a244a8d1e8e03b8f280593"}, + {file = "pydantic-1.10.14-cp39-cp39-win_amd64.whl", hash = "sha256:08b6ec0917c30861e3fe71a93be1648a2aa4f62f866142ba21670b24444d7fd8"}, + {file = "pydantic-1.10.14-py3-none-any.whl", hash = "sha256:8ee853cd12ac2ddbf0ecbac1c289f95882b2d4482258048079d13be700aa114c"}, + {file = "pydantic-1.10.14.tar.gz", hash = "sha256:46f17b832fe27de7850896f3afee50ea682220dd218f7e9c88d436788419dca6"}, ] [package.dependencies] @@ -2128,38 +3056,39 @@ email = ["email-validator (>=1.0.3)"] [[package]] name = "pyflakes" -version = "3.1.0" +version = "3.2.0" description = "passive checker of Python programs" optional = false python-versions = ">=3.8" files = [ - {file = "pyflakes-3.1.0-py2.py3-none-any.whl", hash = "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774"}, - {file = "pyflakes-3.1.0.tar.gz", hash = "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"}, + {file = "pyflakes-3.2.0-py2.py3-none-any.whl", hash = "sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a"}, + {file = "pyflakes-3.2.0.tar.gz", hash = "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f"}, ] [[package]] name = "pygments" -version = "2.16.1" +version = "2.17.2" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.7" files = [ - {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, - {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, + {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, + {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, ] [package.extras] plugins = ["importlib-metadata"] +windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pyjwt" -version = "2.6.0" +version = "2.8.0" description = "JSON Web Token implementation in Python" optional = false python-versions = ">=3.7" files = [ - {file = "PyJWT-2.6.0-py3-none-any.whl", hash = "sha256:d83c3d892a77bbb74d3e1a2cfa90afaadb60945205d1095d9221f04466f64c14"}, - {file = "PyJWT-2.6.0.tar.gz", hash = "sha256:69285c7e31fc44f68a1feb309e948e0df53259d579295e6cfe2b1792329f05fd"}, + {file = "PyJWT-2.8.0-py3-none-any.whl", hash = "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320"}, + {file = "PyJWT-2.8.0.tar.gz", hash = "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de"}, ] [package.dependencies] @@ -2173,23 +3102,24 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] [[package]] name = "pylint" -version = "3.0.2" +version = "3.1.0" description = "python code static checker" optional = false python-versions = ">=3.8.0" files = [ - {file = "pylint-3.0.2-py3-none-any.whl", hash = "sha256:60ed5f3a9ff8b61839ff0348b3624ceeb9e6c2a92c514d81c9cc273da3b6bcda"}, - {file = "pylint-3.0.2.tar.gz", hash = "sha256:0d4c286ef6d2f66c8bfb527a7f8a629009e42c99707dec821a03e1b51a4c1496"}, + {file = "pylint-3.1.0-py3-none-any.whl", hash = "sha256:507a5b60953874766d8a366e8e8c7af63e058b26345cfcb5f91f89d987fd6b74"}, + {file = "pylint-3.1.0.tar.gz", hash = "sha256:6a69beb4a6f63debebaab0a3477ecd0f559aa726af4954fc948c51f7a2549e23"}, ] [package.dependencies] -astroid = ">=3.0.1,<=3.1.0-dev0" +astroid = ">=3.1.0,<=3.2.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.2", markers = "python_version < \"3.11\""}, - {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, + {version = ">=0.3.7", markers = "python_version >= \"3.12\""}, + {version = ">=0.3.6", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, ] -isort = ">=4.2.5,<6" +isort = ">=4.2.5,<5.13.0 || >5.13.0,<6" mccabe = ">=0.6,<0.8" platformdirs = ">=2.2.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} @@ -2202,17 +3132,17 @@ testutils = ["gitpython (>3)"] [[package]] name = "pymdown-extensions" -version = "10.3" +version = "10.7" description = "Extension pack for Python Markdown." -optional = true +optional = false python-versions = ">=3.8" files = [ - {file = "pymdown_extensions-10.3-py3-none-any.whl", hash = "sha256:77a82c621c58a83efc49a389159181d570e370fff9f810d3a4766a75fc678b66"}, - {file = "pymdown_extensions-10.3.tar.gz", hash = "sha256:94a0d8a03246712b64698af223848fd80aaf1ae4c4be29c8c61939b0467b5722"}, + {file = "pymdown_extensions-10.7-py3-none-any.whl", hash = "sha256:6ca215bc57bc12bf32b414887a68b810637d039124ed9b2e5bd3325cbb2c050c"}, + {file = "pymdown_extensions-10.7.tar.gz", hash = "sha256:c0d64d5cf62566f59e6b2b690a4095c931107c250a8c8e1351c1de5f6b036deb"}, ] [package.dependencies] -markdown = ">=3.2" +markdown = ">=3.5" pyyaml = "*" [package.extras] @@ -2220,13 +3150,13 @@ extra = ["pygments (>=2.12)"] [[package]] name = "pyparsing" -version = "3.0.9" +version = "3.1.1" description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = false python-versions = ">=3.6.8" files = [ - {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, + {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, + {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, ] [package.extras] @@ -2234,13 +3164,13 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pytest" -version = "7.4.3" +version = "8.0.2" description = "pytest: simple powerful testing with Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pytest-7.4.3-py3-none-any.whl", hash = "sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac"}, - {file = "pytest-7.4.3.tar.gz", hash = "sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5"}, + {file = "pytest-8.0.2-py3-none-any.whl", hash = "sha256:edfaaef32ce5172d5466b5127b42e0d6d35ebbe4453f0e3505d96afd93f6b096"}, + {file = "pytest-8.0.2.tar.gz", hash = "sha256:d4051d623a2e0b7e51960ba963193b09ce6daeb9759a451844a21e4ddedfc1bd"}, ] [package.dependencies] @@ -2248,7 +3178,7 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" -pluggy = ">=0.12,<2.0" +pluggy = ">=1.3.0,<2.0" tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] @@ -2272,6 +3202,24 @@ pytest = ">=4.6" [package.extras] testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] +[[package]] +name = "pytest-env" +version = "1.1.3" +description = "pytest plugin that allows you to add environment variables." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest_env-1.1.3-py3-none-any.whl", hash = "sha256:aada77e6d09fcfb04540a6e462c58533c37df35fa853da78707b17ec04d17dfc"}, + {file = "pytest_env-1.1.3.tar.gz", hash = "sha256:fcd7dc23bb71efd3d35632bde1bbe5ee8c8dc4489d6617fb010674880d96216b"}, +] + +[package.dependencies] +pytest = ">=7.4.3" +tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} + +[package.extras] +test = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "pytest-mock (>=3.12)"] + [[package]] name = "pytest-randomly" version = "3.15.0" @@ -2289,13 +3237,13 @@ pytest = "*" [[package]] name = "pytest-xdist" -version = "3.4.0" +version = "3.5.0" description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-xdist-3.4.0.tar.gz", hash = "sha256:3a94a931dd9e268e0b871a877d09fe2efb6175c2c23d60d56a6001359002b832"}, - {file = "pytest_xdist-3.4.0-py3-none-any.whl", hash = "sha256:e513118bf787677a427e025606f55e95937565e06dfaac8d87f55301e57ae607"}, + {file = "pytest-xdist-3.5.0.tar.gz", hash = "sha256:cbb36f3d67e0c478baa57fa4edc8843887e0f6cfc42d677530a36d7472b32d8a"}, + {file = "pytest_xdist-3.5.0-py3-none-any.whl", hash = "sha256:d075629c7e00b611df89f490a5063944bee7a4362a5ff11c7cc7824a03dfce24"}, ] [package.dependencies] @@ -2322,27 +3270,16 @@ files = [ six = ">=1.5" [[package]] -name = "python-jose" -version = "3.3.0" -description = "JOSE implementation in Python" +name = "pytz" +version = "2024.1" +description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "python-jose-3.3.0.tar.gz", hash = "sha256:55779b5e6ad599c6336191246e95eb2293a9ddebd555f796a65f838f07e5d78a"}, - {file = "python_jose-3.3.0-py2.py3-none-any.whl", hash = "sha256:9b1376b023f8b298536eedd47ae1089bcdb848f1535ab30555cd92002d78923a"}, + {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, + {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, ] -[package.dependencies] -cryptography = {version = ">=3.4.0", optional = true, markers = "extra == \"cryptography\""} -ecdsa = "!=0.15" -pyasn1 = "*" -rsa = "*" - -[package.extras] -cryptography = ["cryptography (>=3.4.0)"] -pycrypto = ["pyasn1", "pycrypto (>=2.6.0,<2.7.0)"] -pycryptodome = ["pyasn1", "pycryptodome (>=3.3.1,<4.0.0)"] - [[package]] name = "pywin32" version = "306" @@ -2368,58 +3305,58 @@ files = [ [[package]] name = "pyyaml" -version = "6.0" +version = "6.0.1" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.6" files = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, - {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, - {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] [[package]] name = "pyyaml-env-tag" version = "0.1" description = "A custom YAML tag for referencing environment variables in YAML files. " -optional = true +optional = false python-versions = ">=3.6" files = [ {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, @@ -2431,13 +3368,13 @@ pyyaml = "*" [[package]] name = "referencing" -version = "0.29.1" +version = "0.31.1" description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" files = [ - {file = "referencing-0.29.1-py3-none-any.whl", hash = "sha256:d3c8f323ee1480095da44d55917cfb8278d73d6b4d5f677e3e40eb21314ac67f"}, - {file = "referencing-0.29.1.tar.gz", hash = "sha256:90cb53782d550ba28d2166ef3f55731f38397def8832baac5d45235f1995e35e"}, + {file = "referencing-0.31.1-py3-none-any.whl", hash = "sha256:c19c4d006f1757e3dd75c4f784d38f8698d87b649c54f9ace14e5e8c9667c01d"}, + {file = "referencing-0.31.1.tar.gz", hash = "sha256:81a1471c68c9d5e3831c30ad1dd9815c45b558e596653db751a2bfdd17b3b9ec"}, ] [package.dependencies] @@ -2446,99 +3383,104 @@ rpds-py = ">=0.7.0" [[package]] name = "regex" -version = "2023.8.8" +version = "2023.12.25" description = "Alternative regular expression module, to replace re." optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "regex-2023.8.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:88900f521c645f784260a8d346e12a1590f79e96403971241e64c3a265c8ecdb"}, - {file = "regex-2023.8.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3611576aff55918af2697410ff0293d6071b7e00f4b09e005d614686ac4cd57c"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8a0ccc8f2698f120e9e5742f4b38dc944c38744d4bdfc427616f3a163dd9de5"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c662a4cbdd6280ee56f841f14620787215a171c4e2d1744c9528bed8f5816c96"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf0633e4a1b667bfe0bb10b5e53fe0d5f34a6243ea2530eb342491f1adf4f739"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:551ad543fa19e94943c5b2cebc54c73353ffff08228ee5f3376bd27b3d5b9800"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54de2619f5ea58474f2ac211ceea6b615af2d7e4306220d4f3fe690c91988a61"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5ec4b3f0aebbbe2fc0134ee30a791af522a92ad9f164858805a77442d7d18570"}, - {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3ae646c35cb9f820491760ac62c25b6d6b496757fda2d51be429e0e7b67ae0ab"}, - {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ca339088839582d01654e6f83a637a4b8194d0960477b9769d2ff2cfa0fa36d2"}, - {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:d9b6627408021452dcd0d2cdf8da0534e19d93d070bfa8b6b4176f99711e7f90"}, - {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:bd3366aceedf274f765a3a4bc95d6cd97b130d1dda524d8f25225d14123c01db"}, - {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7aed90a72fc3654fba9bc4b7f851571dcc368120432ad68b226bd593f3f6c0b7"}, - {file = "regex-2023.8.8-cp310-cp310-win32.whl", hash = "sha256:80b80b889cb767cc47f31d2b2f3dec2db8126fbcd0cff31b3925b4dc6609dcdb"}, - {file = "regex-2023.8.8-cp310-cp310-win_amd64.whl", hash = "sha256:b82edc98d107cbc7357da7a5a695901b47d6eb0420e587256ba3ad24b80b7d0b"}, - {file = "regex-2023.8.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1e7d84d64c84ad97bf06f3c8cb5e48941f135ace28f450d86af6b6512f1c9a71"}, - {file = "regex-2023.8.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ce0f9fbe7d295f9922c0424a3637b88c6c472b75eafeaff6f910494a1fa719ef"}, - {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06c57e14ac723b04458df5956cfb7e2d9caa6e9d353c0b4c7d5d54fcb1325c46"}, - {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e7a9aaa5a1267125eef22cef3b63484c3241aaec6f48949b366d26c7250e0357"}, - {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b7408511fca48a82a119d78a77c2f5eb1b22fe88b0d2450ed0756d194fe7a9a"}, - {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14dc6f2d88192a67d708341f3085df6a4f5a0c7b03dec08d763ca2cd86e9f559"}, - {file = "regex-2023.8.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48c640b99213643d141550326f34f0502fedb1798adb3c9eb79650b1ecb2f177"}, - {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0085da0f6c6393428bf0d9c08d8b1874d805bb55e17cb1dfa5ddb7cfb11140bf"}, - {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:964b16dcc10c79a4a2be9f1273fcc2684a9eedb3906439720598029a797b46e6"}, - {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7ce606c14bb195b0e5108544b540e2c5faed6843367e4ab3deb5c6aa5e681208"}, - {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:40f029d73b10fac448c73d6eb33d57b34607f40116e9f6e9f0d32e9229b147d7"}, - {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3b8e6ea6be6d64104d8e9afc34c151926f8182f84e7ac290a93925c0db004bfd"}, - {file = "regex-2023.8.8-cp311-cp311-win32.whl", hash = "sha256:942f8b1f3b223638b02df7df79140646c03938d488fbfb771824f3d05fc083a8"}, - {file = "regex-2023.8.8-cp311-cp311-win_amd64.whl", hash = "sha256:51d8ea2a3a1a8fe4f67de21b8b93757005213e8ac3917567872f2865185fa7fb"}, - {file = "regex-2023.8.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e951d1a8e9963ea51efd7f150450803e3b95db5939f994ad3d5edac2b6f6e2b4"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:704f63b774218207b8ccc6c47fcef5340741e5d839d11d606f70af93ee78e4d4"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22283c769a7b01c8ac355d5be0715bf6929b6267619505e289f792b01304d898"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:91129ff1bb0619bc1f4ad19485718cc623a2dc433dff95baadbf89405c7f6b57"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de35342190deb7b866ad6ba5cbcccb2d22c0487ee0cbb251efef0843d705f0d4"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b993b6f524d1e274a5062488a43e3f9f8764ee9745ccd8e8193df743dbe5ee61"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3026cbcf11d79095a32d9a13bbc572a458727bd5b1ca332df4a79faecd45281c"}, - {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:293352710172239bf579c90a9864d0df57340b6fd21272345222fb6371bf82b3"}, - {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:d909b5a3fff619dc7e48b6b1bedc2f30ec43033ba7af32f936c10839e81b9217"}, - {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:3d370ff652323c5307d9c8e4c62efd1956fb08051b0e9210212bc51168b4ff56"}, - {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:b076da1ed19dc37788f6a934c60adf97bd02c7eea461b73730513921a85d4235"}, - {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e9941a4ada58f6218694f382e43fdd256e97615db9da135e77359da257a7168b"}, - {file = "regex-2023.8.8-cp36-cp36m-win32.whl", hash = "sha256:a8c65c17aed7e15a0c824cdc63a6b104dfc530f6fa8cb6ac51c437af52b481c7"}, - {file = "regex-2023.8.8-cp36-cp36m-win_amd64.whl", hash = "sha256:aadf28046e77a72f30dcc1ab185639e8de7f4104b8cb5c6dfa5d8ed860e57236"}, - {file = "regex-2023.8.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:423adfa872b4908843ac3e7a30f957f5d5282944b81ca0a3b8a7ccbbfaa06103"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ae594c66f4a7e1ea67232a0846649a7c94c188d6c071ac0210c3e86a5f92109"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e51c80c168074faa793685656c38eb7a06cbad7774c8cbc3ea05552d615393d8"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:09b7f4c66aa9d1522b06e31a54f15581c37286237208df1345108fcf4e050c18"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e73e5243af12d9cd6a9d6a45a43570dbe2e5b1cdfc862f5ae2b031e44dd95a8"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:941460db8fe3bd613db52f05259c9336f5a47ccae7d7def44cc277184030a116"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f0ccf3e01afeb412a1a9993049cb160d0352dba635bbca7762b2dc722aa5742a"}, - {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:2e9216e0d2cdce7dbc9be48cb3eacb962740a09b011a116fd7af8c832ab116ca"}, - {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:5cd9cd7170459b9223c5e592ac036e0704bee765706445c353d96f2890e816c8"}, - {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:4873ef92e03a4309b3ccd8281454801b291b689f6ad45ef8c3658b6fa761d7ac"}, - {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:239c3c2a339d3b3ddd51c2daef10874410917cd2b998f043c13e2084cb191684"}, - {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1005c60ed7037be0d9dea1f9c53cc42f836188227366370867222bda4c3c6bd7"}, - {file = "regex-2023.8.8-cp37-cp37m-win32.whl", hash = "sha256:e6bd1e9b95bc5614a7a9c9c44fde9539cba1c823b43a9f7bc11266446dd568e3"}, - {file = "regex-2023.8.8-cp37-cp37m-win_amd64.whl", hash = "sha256:9a96edd79661e93327cfeac4edec72a4046e14550a1d22aa0dd2e3ca52aec921"}, - {file = "regex-2023.8.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f2181c20ef18747d5f4a7ea513e09ea03bdd50884a11ce46066bb90fe4213675"}, - {file = "regex-2023.8.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a2ad5add903eb7cdde2b7c64aaca405f3957ab34f16594d2b78d53b8b1a6a7d6"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9233ac249b354c54146e392e8a451e465dd2d967fc773690811d3a8c240ac601"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:920974009fb37b20d32afcdf0227a2e707eb83fe418713f7a8b7de038b870d0b"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2b6c5dfe0929b6c23dde9624483380b170b6e34ed79054ad131b20203a1a63"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96979d753b1dc3b2169003e1854dc67bfc86edf93c01e84757927f810b8c3c93"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ae54a338191e1356253e7883d9d19f8679b6143703086245fb14d1f20196be9"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2162ae2eb8b079622176a81b65d486ba50b888271302190870b8cc488587d280"}, - {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c884d1a59e69e03b93cf0dfee8794c63d7de0ee8f7ffb76e5f75be8131b6400a"}, - {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cf9273e96f3ee2ac89ffcb17627a78f78e7516b08f94dc435844ae72576a276e"}, - {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:83215147121e15d5f3a45d99abeed9cf1fe16869d5c233b08c56cdf75f43a504"}, - {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:3f7454aa427b8ab9101f3787eb178057c5250478e39b99540cfc2b889c7d0586"}, - {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0640913d2c1044d97e30d7c41728195fc37e54d190c5385eacb52115127b882"}, - {file = "regex-2023.8.8-cp38-cp38-win32.whl", hash = "sha256:0c59122ceccb905a941fb23b087b8eafc5290bf983ebcb14d2301febcbe199c7"}, - {file = "regex-2023.8.8-cp38-cp38-win_amd64.whl", hash = "sha256:c12f6f67495ea05c3d542d119d270007090bad5b843f642d418eb601ec0fa7be"}, - {file = "regex-2023.8.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:82cd0a69cd28f6cc3789cc6adeb1027f79526b1ab50b1f6062bbc3a0ccb2dbc3"}, - {file = "regex-2023.8.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bb34d1605f96a245fc39790a117ac1bac8de84ab7691637b26ab2c5efb8f228c"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:987b9ac04d0b38ef4f89fbc035e84a7efad9cdd5f1e29024f9289182c8d99e09"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dd6082f4e2aec9b6a0927202c85bc1b09dcab113f97265127c1dc20e2e32495"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7eb95fe8222932c10d4436e7a6f7c99991e3fdd9f36c949eff16a69246dee2dc"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7098c524ba9f20717a56a8d551d2ed491ea89cbf37e540759ed3b776a4f8d6eb"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b694430b3f00eb02c594ff5a16db30e054c1b9589a043fe9174584c6efa8033"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b2aeab3895d778155054abea5238d0eb9a72e9242bd4b43f42fd911ef9a13470"}, - {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:988631b9d78b546e284478c2ec15c8a85960e262e247b35ca5eaf7ee22f6050a"}, - {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:67ecd894e56a0c6108ec5ab1d8fa8418ec0cff45844a855966b875d1039a2e34"}, - {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:14898830f0a0eb67cae2bbbc787c1a7d6e34ecc06fbd39d3af5fe29a4468e2c9"}, - {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:f2200e00b62568cfd920127782c61bc1c546062a879cdc741cfcc6976668dfcf"}, - {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9691a549c19c22d26a4f3b948071e93517bdf86e41b81d8c6ac8a964bb71e5a6"}, - {file = "regex-2023.8.8-cp39-cp39-win32.whl", hash = "sha256:6ab2ed84bf0137927846b37e882745a827458689eb969028af8032b1b3dac78e"}, - {file = "regex-2023.8.8-cp39-cp39-win_amd64.whl", hash = "sha256:5543c055d8ec7801901e1193a51570643d6a6ab8751b1f7dd9af71af467538bb"}, - {file = "regex-2023.8.8.tar.gz", hash = "sha256:fcbdc5f2b0f1cd0f6a56cdb46fe41d2cce1e644e3b68832f3eeebc5fb0f7712e"}, + {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0694219a1d54336fd0445ea382d49d36882415c0134ee1e8332afd1529f0baa5"}, + {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b014333bd0217ad3d54c143de9d4b9a3ca1c5a29a6d0d554952ea071cff0f1f8"}, + {file = "regex-2023.12.25-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d865984b3f71f6d0af64d0d88f5733521698f6c16f445bb09ce746c92c97c586"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e0eabac536b4cc7f57a5f3d095bfa557860ab912f25965e08fe1545e2ed8b4c"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c25a8ad70e716f96e13a637802813f65d8a6760ef48672aa3502f4c24ea8b400"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9b6d73353f777630626f403b0652055ebfe8ff142a44ec2cf18ae470395766e"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9cc99d6946d750eb75827cb53c4371b8b0fe89c733a94b1573c9dd16ea6c9e4"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88d1f7bef20c721359d8675f7d9f8e414ec5003d8f642fdfd8087777ff7f94b5"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cb3fe77aec8f1995611f966d0c656fdce398317f850d0e6e7aebdfe61f40e1cd"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7aa47c2e9ea33a4a2a05f40fcd3ea36d73853a2aae7b4feab6fc85f8bf2c9704"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:df26481f0c7a3f8739fecb3e81bc9da3fcfae34d6c094563b9d4670b047312e1"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c40281f7d70baf6e0db0c2f7472b31609f5bc2748fe7275ea65a0b4601d9b392"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:d94a1db462d5690ebf6ae86d11c5e420042b9898af5dcf278bd97d6bda065423"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ba1b30765a55acf15dce3f364e4928b80858fa8f979ad41f862358939bdd1f2f"}, + {file = "regex-2023.12.25-cp310-cp310-win32.whl", hash = "sha256:150c39f5b964e4d7dba46a7962a088fbc91f06e606f023ce57bb347a3b2d4630"}, + {file = "regex-2023.12.25-cp310-cp310-win_amd64.whl", hash = "sha256:09da66917262d9481c719599116c7dc0c321ffcec4b1f510c4f8a066f8768105"}, + {file = "regex-2023.12.25-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1b9d811f72210fa9306aeb88385b8f8bcef0dfbf3873410413c00aa94c56c2b6"}, + {file = "regex-2023.12.25-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d902a43085a308cef32c0d3aea962524b725403fd9373dea18110904003bac97"}, + {file = "regex-2023.12.25-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d166eafc19f4718df38887b2bbe1467a4f74a9830e8605089ea7a30dd4da8887"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7ad32824b7f02bb3c9f80306d405a1d9b7bb89362d68b3c5a9be53836caebdb"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:636ba0a77de609d6510235b7f0e77ec494d2657108f777e8765efc060094c98c"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fda75704357805eb953a3ee15a2b240694a9a514548cd49b3c5124b4e2ad01b"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f72cbae7f6b01591f90814250e636065850c5926751af02bb48da94dfced7baa"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db2a0b1857f18b11e3b0e54ddfefc96af46b0896fb678c85f63fb8c37518b3e7"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7502534e55c7c36c0978c91ba6f61703faf7ce733715ca48f499d3dbbd7657e0"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e8c7e08bb566de4faaf11984af13f6bcf6a08f327b13631d41d62592681d24fe"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:283fc8eed679758de38fe493b7d7d84a198b558942b03f017b1f94dda8efae80"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:f44dd4d68697559d007462b0a3a1d9acd61d97072b71f6d1968daef26bc744bd"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:67d3ccfc590e5e7197750fcb3a2915b416a53e2de847a728cfa60141054123d4"}, + {file = "regex-2023.12.25-cp311-cp311-win32.whl", hash = "sha256:68191f80a9bad283432385961d9efe09d783bcd36ed35a60fb1ff3f1ec2efe87"}, + {file = "regex-2023.12.25-cp311-cp311-win_amd64.whl", hash = "sha256:7d2af3f6b8419661a0c421584cfe8aaec1c0e435ce7e47ee2a97e344b98f794f"}, + {file = "regex-2023.12.25-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8a0ccf52bb37d1a700375a6b395bff5dd15c50acb745f7db30415bae3c2b0715"}, + {file = "regex-2023.12.25-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c3c4a78615b7762740531c27cf46e2f388d8d727d0c0c739e72048beb26c8a9d"}, + {file = "regex-2023.12.25-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ad83e7545b4ab69216cef4cc47e344d19622e28aabec61574b20257c65466d6a"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7a635871143661feccce3979e1727c4e094f2bdfd3ec4b90dfd4f16f571a87a"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d498eea3f581fbe1b34b59c697512a8baef88212f92e4c7830fcc1499f5b45a5"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43f7cd5754d02a56ae4ebb91b33461dc67be8e3e0153f593c509e21d219c5060"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51f4b32f793812714fd5307222a7f77e739b9bc566dc94a18126aba3b92b98a3"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba99d8077424501b9616b43a2d208095746fb1284fc5ba490139651f971d39d9"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4bfc2b16e3ba8850e0e262467275dd4d62f0d045e0e9eda2bc65078c0110a11f"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8c2c19dae8a3eb0ea45a8448356ed561be843b13cbc34b840922ddf565498c1c"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:60080bb3d8617d96f0fb7e19796384cc2467447ef1c491694850ebd3670bc457"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b77e27b79448e34c2c51c09836033056a0547aa360c45eeeb67803da7b0eedaf"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:518440c991f514331f4850a63560321f833979d145d7d81186dbe2f19e27ae3d"}, + {file = "regex-2023.12.25-cp312-cp312-win32.whl", hash = "sha256:e2610e9406d3b0073636a3a2e80db05a02f0c3169b5632022b4e81c0364bcda5"}, + {file = "regex-2023.12.25-cp312-cp312-win_amd64.whl", hash = "sha256:cc37b9aeebab425f11f27e5e9e6cf580be7206c6582a64467a14dda211abc232"}, + {file = "regex-2023.12.25-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:da695d75ac97cb1cd725adac136d25ca687da4536154cdc2815f576e4da11c69"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d126361607b33c4eb7b36debc173bf25d7805847346dd4d99b5499e1fef52bc7"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4719bb05094d7d8563a450cf8738d2e1061420f79cfcc1fa7f0a44744c4d8f73"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5dd58946bce44b53b06d94aa95560d0b243eb2fe64227cba50017a8d8b3cd3e2"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22a86d9fff2009302c440b9d799ef2fe322416d2d58fc124b926aa89365ec482"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2aae8101919e8aa05ecfe6322b278f41ce2994c4a430303c4cd163fef746e04f"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e692296c4cc2873967771345a876bcfc1c547e8dd695c6b89342488b0ea55cd8"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:263ef5cc10979837f243950637fffb06e8daed7f1ac1e39d5910fd29929e489a"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:d6f7e255e5fa94642a0724e35406e6cb7001c09d476ab5fce002f652b36d0c39"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:88ad44e220e22b63b0f8f81f007e8abbb92874d8ced66f32571ef8beb0643b2b"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:3a17d3ede18f9cedcbe23d2daa8a2cd6f59fe2bf082c567e43083bba3fb00347"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d15b274f9e15b1a0b7a45d2ac86d1f634d983ca40d6b886721626c47a400bf39"}, + {file = "regex-2023.12.25-cp37-cp37m-win32.whl", hash = "sha256:ed19b3a05ae0c97dd8f75a5d8f21f7723a8c33bbc555da6bbe1f96c470139d3c"}, + {file = "regex-2023.12.25-cp37-cp37m-win_amd64.whl", hash = "sha256:a6d1047952c0b8104a1d371f88f4ab62e6275567d4458c1e26e9627ad489b445"}, + {file = "regex-2023.12.25-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b43523d7bc2abd757119dbfb38af91b5735eea45537ec6ec3a5ec3f9562a1c53"}, + {file = "regex-2023.12.25-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:efb2d82f33b2212898f1659fb1c2e9ac30493ac41e4d53123da374c3b5541e64"}, + {file = "regex-2023.12.25-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b7fca9205b59c1a3d5031f7e64ed627a1074730a51c2a80e97653e3e9fa0d415"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086dd15e9435b393ae06f96ab69ab2d333f5d65cbe65ca5a3ef0ec9564dfe770"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e81469f7d01efed9b53740aedd26085f20d49da65f9c1f41e822a33992cb1590"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:34e4af5b27232f68042aa40a91c3b9bb4da0eeb31b7632e0091afc4310afe6cb"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9852b76ab558e45b20bf1893b59af64a28bd3820b0c2efc80e0a70a4a3ea51c1"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff100b203092af77d1a5a7abe085b3506b7eaaf9abf65b73b7d6905b6cb76988"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cc038b2d8b1470364b1888a98fd22d616fba2b6309c5b5f181ad4483e0017861"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:094ba386bb5c01e54e14434d4caabf6583334090865b23ef58e0424a6286d3dc"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5cd05d0f57846d8ba4b71d9c00f6f37d6b97d5e5ef8b3c3840426a475c8f70f4"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:9aa1a67bbf0f957bbe096375887b2505f5d8ae16bf04488e8b0f334c36e31360"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:98a2636994f943b871786c9e82bfe7883ecdaba2ef5df54e1450fa9869d1f756"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:37f8e93a81fc5e5bd8db7e10e62dc64261bcd88f8d7e6640aaebe9bc180d9ce2"}, + {file = "regex-2023.12.25-cp38-cp38-win32.whl", hash = "sha256:d78bd484930c1da2b9679290a41cdb25cc127d783768a0369d6b449e72f88beb"}, + {file = "regex-2023.12.25-cp38-cp38-win_amd64.whl", hash = "sha256:b521dcecebc5b978b447f0f69b5b7f3840eac454862270406a39837ffae4e697"}, + {file = "regex-2023.12.25-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f7bc09bc9c29ebead055bcba136a67378f03d66bf359e87d0f7c759d6d4ffa31"}, + {file = "regex-2023.12.25-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e14b73607d6231f3cc4622809c196b540a6a44e903bcfad940779c80dffa7be7"}, + {file = "regex-2023.12.25-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9eda5f7a50141291beda3edd00abc2d4a5b16c29c92daf8d5bd76934150f3edc"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc6bb9aa69aacf0f6032c307da718f61a40cf970849e471254e0e91c56ffca95"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:298dc6354d414bc921581be85695d18912bea163a8b23cac9a2562bbcd5088b1"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2f4e475a80ecbd15896a976aa0b386c5525d0ed34d5c600b6d3ebac0a67c7ddf"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:531ac6cf22b53e0696f8e1d56ce2396311254eb806111ddd3922c9d937151dae"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22f3470f7524b6da61e2020672df2f3063676aff444db1daa283c2ea4ed259d6"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:89723d2112697feaa320c9d351e5f5e7b841e83f8b143dba8e2d2b5f04e10923"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0ecf44ddf9171cd7566ef1768047f6e66975788258b1c6c6ca78098b95cf9a3d"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:905466ad1702ed4acfd67a902af50b8db1feeb9781436372261808df7a2a7bca"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:4558410b7a5607a645e9804a3e9dd509af12fb72b9825b13791a37cd417d73a5"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:7e316026cc1095f2a3e8cc012822c99f413b702eaa2ca5408a513609488cb62f"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3b1de218d5375cd6ac4b5493e0b9f3df2be331e86520f23382f216c137913d20"}, + {file = "regex-2023.12.25-cp39-cp39-win32.whl", hash = "sha256:11a963f8e25ab5c61348d090bf1b07f1953929c13bd2309a0662e9ff680763c9"}, + {file = "regex-2023.12.25-cp39-cp39-win_amd64.whl", hash = "sha256:e693e233ac92ba83a87024e1d32b5f9ab15ca55ddd916d878146f4e3406b5c91"}, + {file = "regex-2023.12.25.tar.gz", hash = "sha256:29171aa128da69afdf4bde412d5bedc335f2ca8fcfe4489038577d05f16181e5"}, ] [[package]] @@ -2564,18 +3506,17 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "requests-file" -version = "1.5.1" +version = "2.0.0" description = "File transport adapter for Requests" optional = false python-versions = "*" files = [ - {file = "requests-file-1.5.1.tar.gz", hash = "sha256:07d74208d3389d01c38ab89ef403af0cfec63957d53a0081d8eca738d0247d8e"}, - {file = "requests_file-1.5.1-py2.py3-none-any.whl", hash = "sha256:dfe5dae75c12481f68ba353183c53a65e6044c923e64c24b2209f6c7570ca953"}, + {file = "requests-file-2.0.0.tar.gz", hash = "sha256:20c5931629c558fda566cacc10cfe2cd502433e628f568c34c80d96a0cc95972"}, + {file = "requests_file-2.0.0-py2.py3-none-any.whl", hash = "sha256:3e493d390adb44aa102ebea827a48717336d5268968c370eaf19abaf5cae13bf"}, ] [package.dependencies] requests = ">=1.0.0" -six = "*" [[package]] name = "requests-oauthlib" @@ -2597,23 +3538,22 @@ rsa = ["oauthlib[signedtoken] (>=3.0.0)"] [[package]] name = "responses" -version = "0.23.1" +version = "0.25.0" description = "A utility library for mocking out the `requests` Python library." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "responses-0.23.1-py3-none-any.whl", hash = "sha256:8a3a5915713483bf353b6f4079ba8b2a29029d1d1090a503c70b0dc5d9d0c7bd"}, - {file = "responses-0.23.1.tar.gz", hash = "sha256:c4d9aa9fc888188f0c673eff79a8dadbe2e75b7fe879dc80a221a06e0a68138f"}, + {file = "responses-0.25.0-py3-none-any.whl", hash = "sha256:2f0b9c2b6437db4b528619a77e5d565e4ec2a9532162ac1a131a83529db7be1a"}, + {file = "responses-0.25.0.tar.gz", hash = "sha256:01ae6a02b4f34e39bffceb0fc6786b67a25eae919c6368d05eabc8d9576c2a66"}, ] [package.dependencies] pyyaml = "*" -requests = ">=2.22.0,<3.0" -types-PyYAML = "*" -urllib3 = ">=1.25.10" +requests = ">=2.30.0,<3.0" +urllib3 = ">=1.25.10,<3.0" [package.extras] -tests = ["coverage (>=6.0.0)", "flake8", "mypy", "pytest (>=7.0.0)", "pytest-asyncio", "pytest-cov", "pytest-httpserver", "tomli", "tomli-w", "types-requests"] +tests = ["coverage (>=6.0.0)", "flake8", "mypy", "pytest (>=7.0.0)", "pytest-asyncio", "pytest-cov", "pytest-httpserver", "tomli", "tomli-w", "types-PyYAML", "types-requests"] [[package]] name = "rfc3339-validator" @@ -2631,17 +3571,17 @@ six = "*" [[package]] name = "rich" -version = "13.3.5" +version = "13.7.1" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.7.0" files = [ - {file = "rich-13.3.5-py3-none-any.whl", hash = "sha256:69cdf53799e63f38b95b9bf9c875f8c90e78dd62b2f00c13a911c7a3b9fa4704"}, - {file = "rich-13.3.5.tar.gz", hash = "sha256:2d11b9b8dd03868f09b4fffadc84a6a8cda574e40dc90821bd845720ebb8e89c"}, + {file = "rich-13.7.1-py3-none-any.whl", hash = "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222"}, + {file = "rich-13.7.1.tar.gz", hash = "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432"}, ] [package.dependencies] -markdown-it-py = ">=2.2.0,<3.0.0" +markdown-it-py = ">=2.2.0" pygments = ">=2.13.0,<3.0.0" [package.extras] @@ -2649,108 +3589,110 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rpds-py" -version = "0.8.10" +version = "0.18.0" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.8" files = [ - {file = "rpds_py-0.8.10-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:93d06cccae15b3836247319eee7b6f1fdcd6c10dabb4e6d350d27bd0bdca2711"}, - {file = "rpds_py-0.8.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3816a890a6a9e9f1de250afa12ca71c9a7a62f2b715a29af6aaee3aea112c181"}, - {file = "rpds_py-0.8.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7c6304b894546b5a6bdc0fe15761fa53fe87d28527a7142dae8de3c663853e1"}, - {file = "rpds_py-0.8.10-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ad3bfb44c8840fb4be719dc58e229f435e227fbfbe133dc33f34981ff622a8f8"}, - {file = "rpds_py-0.8.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:14f1c356712f66653b777ecd8819804781b23dbbac4eade4366b94944c9e78ad"}, - {file = "rpds_py-0.8.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:82bb361cae4d0a627006dadd69dc2f36b7ad5dc1367af9d02e296ec565248b5b"}, - {file = "rpds_py-0.8.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2e3c4f2a8e3da47f850d7ea0d7d56720f0f091d66add889056098c4b2fd576c"}, - {file = "rpds_py-0.8.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:15a90d0ac11b4499171067ae40a220d1ca3cb685ec0acc356d8f3800e07e4cb8"}, - {file = "rpds_py-0.8.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:70bb9c8004b97b4ef7ae56a2aa56dfaa74734a0987c78e7e85f00004ab9bf2d0"}, - {file = "rpds_py-0.8.10-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:d64f9f88d5203274a002b54442cafc9c7a1abff2a238f3e767b70aadf919b451"}, - {file = "rpds_py-0.8.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ccbbd276642788c4376fbe8d4e6c50f0fb4972ce09ecb051509062915891cbf0"}, - {file = "rpds_py-0.8.10-cp310-none-win32.whl", hash = "sha256:fafc0049add8043ad07ab5382ee80d80ed7e3699847f26c9a5cf4d3714d96a84"}, - {file = "rpds_py-0.8.10-cp310-none-win_amd64.whl", hash = "sha256:915031002c86a5add7c6fd4beb601b2415e8a1c956590a5f91d825858e92fe6e"}, - {file = "rpds_py-0.8.10-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:84eb541a44f7a18f07a6bfc48b95240739e93defe1fdfb4f2a295f37837945d7"}, - {file = "rpds_py-0.8.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f59996d0550894affaad8743e97b9b9c98f638b221fac12909210ec3d9294786"}, - {file = "rpds_py-0.8.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9adb5664b78fcfcd830000416c8cc69853ef43cb084d645b3f1f0296edd9bae"}, - {file = "rpds_py-0.8.10-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f96f3f98fbff7af29e9edf9a6584f3c1382e7788783d07ba3721790625caa43e"}, - {file = "rpds_py-0.8.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:376b8de737401050bd12810003d207e824380be58810c031f10ec563ff6aef3d"}, - {file = "rpds_py-0.8.10-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d1c2bc319428d50b3e0fa6b673ab8cc7fa2755a92898db3a594cbc4eeb6d1f7"}, - {file = "rpds_py-0.8.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73a1e48430f418f0ac3dfd87860e4cc0d33ad6c0f589099a298cb53724db1169"}, - {file = "rpds_py-0.8.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:134ec8f14ca7dbc6d9ae34dac632cdd60939fe3734b5d287a69683c037c51acb"}, - {file = "rpds_py-0.8.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4b519bac7c09444dd85280fd60f28c6dde4389c88dddf4279ba9b630aca3bbbe"}, - {file = "rpds_py-0.8.10-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9cd57981d9fab04fc74438d82460f057a2419974d69a96b06a440822d693b3c0"}, - {file = "rpds_py-0.8.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:69d089c026f6a8b9d64a06ff67dc3be196707b699d7f6ca930c25f00cf5e30d8"}, - {file = "rpds_py-0.8.10-cp311-none-win32.whl", hash = "sha256:220bdcad2d2936f674650d304e20ac480a3ce88a40fe56cd084b5780f1d104d9"}, - {file = "rpds_py-0.8.10-cp311-none-win_amd64.whl", hash = "sha256:6c6a0225b8501d881b32ebf3f5807a08ad3685b5eb5f0a6bfffd3a6e039b2055"}, - {file = "rpds_py-0.8.10-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:e3d0cd3dff0e7638a7b5390f3a53057c4e347f4ef122ee84ed93fc2fb7ea4aa2"}, - {file = "rpds_py-0.8.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d77dff3a5aa5eedcc3da0ebd10ff8e4969bc9541aa3333a8d41715b429e99f47"}, - {file = "rpds_py-0.8.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41c89a366eae49ad9e65ed443a8f94aee762931a1e3723749d72aeac80f5ef2f"}, - {file = "rpds_py-0.8.10-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3793c21494bad1373da517001d0849eea322e9a049a0e4789e50d8d1329df8e7"}, - {file = "rpds_py-0.8.10-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:805a5f3f05d186c5d50de2e26f765ba7896d0cc1ac5b14ffc36fae36df5d2f10"}, - {file = "rpds_py-0.8.10-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b01b39ad5411563031ea3977bbbc7324d82b088e802339e6296f082f78f6115c"}, - {file = "rpds_py-0.8.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3f1e860be21f3e83011116a65e7310486300e08d9a3028e73e8d13bb6c77292"}, - {file = "rpds_py-0.8.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a13c8e56c46474cd5958d525ce6a9996727a83d9335684e41f5192c83deb6c58"}, - {file = "rpds_py-0.8.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:93d99f957a300d7a4ced41615c45aeb0343bb8f067c42b770b505de67a132346"}, - {file = "rpds_py-0.8.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:148b0b38d719c0760e31ce9285a9872972bdd7774969a4154f40c980e5beaca7"}, - {file = "rpds_py-0.8.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3cc5e5b5514796f45f03a568981971b12a3570f3de2e76114f7dc18d4b60a3c4"}, - {file = "rpds_py-0.8.10-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:e8e24b210a4deb5a7744971f8f77393005bae7f873568e37dfd9effe808be7f7"}, - {file = "rpds_py-0.8.10-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b41941583adce4242af003d2a8337b066ba6148ca435f295f31ac6d9e4ea2722"}, - {file = "rpds_py-0.8.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c490204e16bca4f835dba8467869fe7295cdeaa096e4c5a7af97f3454a97991"}, - {file = "rpds_py-0.8.10-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ee45cd1d84beed6cbebc839fd85c2e70a3a1325c8cfd16b62c96e2ffb565eca"}, - {file = "rpds_py-0.8.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4a8ca409f1252e1220bf09c57290b76cae2f14723746215a1e0506472ebd7bdf"}, - {file = "rpds_py-0.8.10-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96b293c0498c70162effb13100624c5863797d99df75f2f647438bd10cbf73e4"}, - {file = "rpds_py-0.8.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4627520a02fccbd324b33c7a83e5d7906ec746e1083a9ac93c41ac7d15548c7"}, - {file = "rpds_py-0.8.10-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e39d7ab0c18ac99955b36cd19f43926450baba21e3250f053e0704d6ffd76873"}, - {file = "rpds_py-0.8.10-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:ba9f1d1ebe4b63801977cec7401f2d41e888128ae40b5441270d43140efcad52"}, - {file = "rpds_py-0.8.10-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:802f42200d8caf7f25bbb2a6464cbd83e69d600151b7e3b49f49a47fa56b0a38"}, - {file = "rpds_py-0.8.10-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:d19db6ba816e7f59fc806c690918da80a7d186f00247048cd833acdab9b4847b"}, - {file = "rpds_py-0.8.10-cp38-none-win32.whl", hash = "sha256:7947e6e2c2ad68b1c12ee797d15e5f8d0db36331200b0346871492784083b0c6"}, - {file = "rpds_py-0.8.10-cp38-none-win_amd64.whl", hash = "sha256:fa326b3505d5784436d9433b7980171ab2375535d93dd63fbcd20af2b5ca1bb6"}, - {file = "rpds_py-0.8.10-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:7b38a9ac96eeb6613e7f312cd0014de64c3f07000e8bf0004ad6ec153bac46f8"}, - {file = "rpds_py-0.8.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c4d42e83ddbf3445e6514f0aff96dca511421ed0392d9977d3990d9f1ba6753c"}, - {file = "rpds_py-0.8.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b21575031478609db6dbd1f0465e739fe0e7f424a8e7e87610a6c7f68b4eb16"}, - {file = "rpds_py-0.8.10-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:574868858a7ff6011192c023a5289158ed20e3f3b94b54f97210a773f2f22921"}, - {file = "rpds_py-0.8.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae40f4a70a1f40939d66ecbaf8e7edc144fded190c4a45898a8cfe19d8fc85ea"}, - {file = "rpds_py-0.8.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:37f7ee4dc86db7af3bac6d2a2cedbecb8e57ce4ed081f6464510e537589f8b1e"}, - {file = "rpds_py-0.8.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:695f642a3a5dbd4ad2ffbbacf784716ecd87f1b7a460843b9ddf965ccaeafff4"}, - {file = "rpds_py-0.8.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f43ab4cb04bde6109eb2555528a64dfd8a265cc6a9920a67dcbde13ef53a46c8"}, - {file = "rpds_py-0.8.10-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a11ab0d97be374efd04f640c04fe5c2d3dabc6dfb998954ea946ee3aec97056d"}, - {file = "rpds_py-0.8.10-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:92cf5b3ee60eef41f41e1a2cabca466846fb22f37fc580ffbcb934d1bcab225a"}, - {file = "rpds_py-0.8.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ceaac0c603bf5ac2f505a78b2dcab78d3e6b706be6596c8364b64cc613d208d2"}, - {file = "rpds_py-0.8.10-cp39-none-win32.whl", hash = "sha256:dd4f16e57c12c0ae17606c53d1b57d8d1c8792efe3f065a37cb3341340599d49"}, - {file = "rpds_py-0.8.10-cp39-none-win_amd64.whl", hash = "sha256:c03a435d26c3999c2a8642cecad5d1c4d10c961817536af52035f6f4ee2f5dd0"}, - {file = "rpds_py-0.8.10-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0da53292edafecba5e1d8c1218f99babf2ed0bf1c791d83c0ab5c29b57223068"}, - {file = "rpds_py-0.8.10-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:7d20a8ed227683401cc508e7be58cba90cc97f784ea8b039c8cd01111e6043e0"}, - {file = "rpds_py-0.8.10-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97cab733d303252f7c2f7052bf021a3469d764fc2b65e6dbef5af3cbf89d4892"}, - {file = "rpds_py-0.8.10-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8c398fda6df361a30935ab4c4bccb7f7a3daef2964ca237f607c90e9f3fdf66f"}, - {file = "rpds_py-0.8.10-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2eb4b08c45f8f8d8254cdbfacd3fc5d6b415d64487fb30d7380b0d0569837bf1"}, - {file = "rpds_py-0.8.10-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e7dfb1cbb895810fa2b892b68153c17716c6abaa22c7dc2b2f6dcf3364932a1c"}, - {file = "rpds_py-0.8.10-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89c92b74e8bf6f53a6f4995fd52f4bd510c12f103ee62c99e22bc9e05d45583c"}, - {file = "rpds_py-0.8.10-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e9c0683cb35a9b5881b41bc01d5568ffc667910d9dbc632a1fba4e7d59e98773"}, - {file = "rpds_py-0.8.10-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:0eeb2731708207d0fe2619afe6c4dc8cb9798f7de052da891de5f19c0006c315"}, - {file = "rpds_py-0.8.10-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:7495010b658ec5b52835f21d8c8b1a7e52e194c50f095d4223c0b96c3da704b1"}, - {file = "rpds_py-0.8.10-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:c72ebc22e70e04126158c46ba56b85372bc4d54d00d296be060b0db1671638a4"}, - {file = "rpds_py-0.8.10-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:2cd3045e7f6375dda64ed7db1c5136826facb0159ea982f77d9cf6125025bd34"}, - {file = "rpds_py-0.8.10-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:2418cf17d653d24ffb8b75e81f9f60b7ba1b009a23298a433a4720b2a0a17017"}, - {file = "rpds_py-0.8.10-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a2edf8173ac0c7a19da21bc68818be1321998528b5e3f748d6ee90c0ba2a1fd"}, - {file = "rpds_py-0.8.10-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f29b8c55fd3a2bc48e485e37c4e2df3317f43b5cc6c4b6631c33726f52ffbb3"}, - {file = "rpds_py-0.8.10-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a7d20c1cf8d7b3960c5072c265ec47b3f72a0c608a9a6ee0103189b4f28d531"}, - {file = "rpds_py-0.8.10-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:521fc8861a86ae54359edf53a15a05fabc10593cea7b3357574132f8427a5e5a"}, - {file = "rpds_py-0.8.10-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5c191713e98e7c28800233f039a32a42c1a4f9a001a8a0f2448b07391881036"}, - {file = "rpds_py-0.8.10-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:083df0fafe199371206111583c686c985dddaf95ab3ee8e7b24f1fda54515d09"}, - {file = "rpds_py-0.8.10-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:ed41f3f49507936a6fe7003985ea2574daccfef999775525d79eb67344e23767"}, - {file = "rpds_py-0.8.10-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:2614c2732bf45de5c7f9e9e54e18bc78693fa2f635ae58d2895b7965e470378c"}, - {file = "rpds_py-0.8.10-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:c60528671d9d467009a6ec284582179f6b88651e83367d0ab54cb739021cd7de"}, - {file = "rpds_py-0.8.10-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:ee744fca8d1ea822480a2a4e7c5f2e1950745477143668f0b523769426060f29"}, - {file = "rpds_py-0.8.10-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a38b9f526d0d6cbdaa37808c400e3d9f9473ac4ff64d33d9163fd05d243dbd9b"}, - {file = "rpds_py-0.8.10-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60e0e86e870350e03b3e25f9b1dd2c6cc72d2b5f24e070249418320a6f9097b7"}, - {file = "rpds_py-0.8.10-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f53f55a8852f0e49b0fc76f2412045d6ad9d5772251dea8f55ea45021616e7d5"}, - {file = "rpds_py-0.8.10-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c493365d3fad241d52f096e4995475a60a80f4eba4d3ff89b713bc65c2ca9615"}, - {file = "rpds_py-0.8.10-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:300eb606e6b94a7a26f11c8cc8ee59e295c6649bd927f91e1dbd37a4c89430b6"}, - {file = "rpds_py-0.8.10-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a665f6f1a87614d1c3039baf44109094926dedf785e346d8b0a728e9cabd27a"}, - {file = "rpds_py-0.8.10-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:927d784648211447201d4c6f1babddb7971abad922b32257ab74de2f2750fad0"}, - {file = "rpds_py-0.8.10-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c200b30dd573afa83847bed7e3041aa36a8145221bf0cfdfaa62d974d720805c"}, - {file = "rpds_py-0.8.10-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:08166467258fd0240a1256fce272f689f2360227ee41c72aeea103e9e4f63d2b"}, - {file = "rpds_py-0.8.10-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:996cc95830de9bc22b183661d95559ec6b3cd900ad7bc9154c4cbf5be0c9b734"}, - {file = "rpds_py-0.8.10.tar.gz", hash = "sha256:13e643ce8ad502a0263397362fb887594b49cf84bf518d6038c16f235f2bcea4"}, + {file = "rpds_py-0.18.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:5b4e7d8d6c9b2e8ee2d55c90b59c707ca59bc30058269b3db7b1f8df5763557e"}, + {file = "rpds_py-0.18.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c463ed05f9dfb9baebef68048aed8dcdc94411e4bf3d33a39ba97e271624f8f7"}, + {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01e36a39af54a30f28b73096dd39b6802eddd04c90dbe161c1b8dbe22353189f"}, + {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d62dec4976954a23d7f91f2f4530852b0c7608116c257833922a896101336c51"}, + {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd18772815d5f008fa03d2b9a681ae38d5ae9f0e599f7dda233c439fcaa00d40"}, + {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:923d39efa3cfb7279a0327e337a7958bff00cc447fd07a25cddb0a1cc9a6d2da"}, + {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39514da80f971362f9267c600b6d459bfbbc549cffc2cef8e47474fddc9b45b1"}, + {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a34d557a42aa28bd5c48a023c570219ba2593bcbbb8dc1b98d8cf5d529ab1434"}, + {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:93df1de2f7f7239dc9cc5a4a12408ee1598725036bd2dedadc14d94525192fc3"}, + {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:34b18ba135c687f4dac449aa5157d36e2cbb7c03cbea4ddbd88604e076aa836e"}, + {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c0b5dcf9193625afd8ecc92312d6ed78781c46ecbf39af9ad4681fc9f464af88"}, + {file = "rpds_py-0.18.0-cp310-none-win32.whl", hash = "sha256:c4325ff0442a12113a6379af66978c3fe562f846763287ef66bdc1d57925d337"}, + {file = "rpds_py-0.18.0-cp310-none-win_amd64.whl", hash = "sha256:7223a2a5fe0d217e60a60cdae28d6949140dde9c3bcc714063c5b463065e3d66"}, + {file = "rpds_py-0.18.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3a96e0c6a41dcdba3a0a581bbf6c44bb863f27c541547fb4b9711fd8cf0ffad4"}, + {file = "rpds_py-0.18.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30f43887bbae0d49113cbaab729a112251a940e9b274536613097ab8b4899cf6"}, + {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcb25daa9219b4cf3a0ab24b0eb9a5cc8949ed4dc72acb8fa16b7e1681aa3c58"}, + {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d68c93e381010662ab873fea609bf6c0f428b6d0bb00f2c6939782e0818d37bf"}, + {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b34b7aa8b261c1dbf7720b5d6f01f38243e9b9daf7e6b8bc1fd4657000062f2c"}, + {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e6d75ab12b0bbab7215e5d40f1e5b738aa539598db27ef83b2ec46747df90e1"}, + {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b8612cd233543a3781bc659c731b9d607de65890085098986dfd573fc2befe5"}, + {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aec493917dd45e3c69d00a8874e7cbed844efd935595ef78a0f25f14312e33c6"}, + {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:661d25cbffaf8cc42e971dd570d87cb29a665f49f4abe1f9e76be9a5182c4688"}, + {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1df3659d26f539ac74fb3b0c481cdf9d725386e3552c6fa2974f4d33d78e544b"}, + {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a1ce3ba137ed54f83e56fb983a5859a27d43a40188ba798993812fed73c70836"}, + {file = "rpds_py-0.18.0-cp311-none-win32.whl", hash = "sha256:69e64831e22a6b377772e7fb337533c365085b31619005802a79242fee620bc1"}, + {file = "rpds_py-0.18.0-cp311-none-win_amd64.whl", hash = "sha256:998e33ad22dc7ec7e030b3df701c43630b5bc0d8fbc2267653577e3fec279afa"}, + {file = "rpds_py-0.18.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:7f2facbd386dd60cbbf1a794181e6aa0bd429bd78bfdf775436020172e2a23f0"}, + {file = "rpds_py-0.18.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1d9a5be316c15ffb2b3c405c4ff14448c36b4435be062a7f578ccd8b01f0c4d8"}, + {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd5bf1af8efe569654bbef5a3e0a56eca45f87cfcffab31dd8dde70da5982475"}, + {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5417558f6887e9b6b65b4527232553c139b57ec42c64570569b155262ac0754f"}, + {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:56a737287efecafc16f6d067c2ea0117abadcd078d58721f967952db329a3e5c"}, + {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8f03bccbd8586e9dd37219bce4d4e0d3ab492e6b3b533e973fa08a112cb2ffc9"}, + {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4457a94da0d5c53dc4b3e4de1158bdab077db23c53232f37a3cb7afdb053a4e3"}, + {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0ab39c1ba9023914297dd88ec3b3b3c3f33671baeb6acf82ad7ce883f6e8e157"}, + {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9d54553c1136b50fd12cc17e5b11ad07374c316df307e4cfd6441bea5fb68496"}, + {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0af039631b6de0397ab2ba16eaf2872e9f8fca391b44d3d8cac317860a700a3f"}, + {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:84ffab12db93b5f6bad84c712c92060a2d321b35c3c9960b43d08d0f639d60d7"}, + {file = "rpds_py-0.18.0-cp312-none-win32.whl", hash = "sha256:685537e07897f173abcf67258bee3c05c374fa6fff89d4c7e42fb391b0605e98"}, + {file = "rpds_py-0.18.0-cp312-none-win_amd64.whl", hash = "sha256:e003b002ec72c8d5a3e3da2989c7d6065b47d9eaa70cd8808b5384fbb970f4ec"}, + {file = "rpds_py-0.18.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:08f9ad53c3f31dfb4baa00da22f1e862900f45908383c062c27628754af2e88e"}, + {file = "rpds_py-0.18.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c0013fe6b46aa496a6749c77e00a3eb07952832ad6166bd481c74bda0dcb6d58"}, + {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e32a92116d4f2a80b629778280103d2a510a5b3f6314ceccd6e38006b5e92dcb"}, + {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e541ec6f2ec456934fd279a3120f856cd0aedd209fc3852eca563f81738f6861"}, + {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bed88b9a458e354014d662d47e7a5baafd7ff81c780fd91584a10d6ec842cb73"}, + {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2644e47de560eb7bd55c20fc59f6daa04682655c58d08185a9b95c1970fa1e07"}, + {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e8916ae4c720529e18afa0b879473049e95949bf97042e938530e072fde061d"}, + {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:465a3eb5659338cf2a9243e50ad9b2296fa15061736d6e26240e713522b6235c"}, + {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:ea7d4a99f3b38c37eac212dbd6ec42b7a5ec51e2c74b5d3223e43c811609e65f"}, + {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:67071a6171e92b6da534b8ae326505f7c18022c6f19072a81dcf40db2638767c"}, + {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:41ef53e7c58aa4ef281da975f62c258950f54b76ec8e45941e93a3d1d8580594"}, + {file = "rpds_py-0.18.0-cp38-none-win32.whl", hash = "sha256:fdea4952db2793c4ad0bdccd27c1d8fdd1423a92f04598bc39425bcc2b8ee46e"}, + {file = "rpds_py-0.18.0-cp38-none-win_amd64.whl", hash = "sha256:7cd863afe7336c62ec78d7d1349a2f34c007a3cc6c2369d667c65aeec412a5b1"}, + {file = "rpds_py-0.18.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:5307def11a35f5ae4581a0b658b0af8178c65c530e94893345bebf41cc139d33"}, + {file = "rpds_py-0.18.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:77f195baa60a54ef9d2de16fbbfd3ff8b04edc0c0140a761b56c267ac11aa467"}, + {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39f5441553f1c2aed4de4377178ad8ff8f9d733723d6c66d983d75341de265ab"}, + {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a00312dea9310d4cb7dbd7787e722d2e86a95c2db92fbd7d0155f97127bcb40"}, + {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f2fc11e8fe034ee3c34d316d0ad8808f45bc3b9ce5857ff29d513f3ff2923a1"}, + {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:586f8204935b9ec884500498ccc91aa869fc652c40c093bd9e1471fbcc25c022"}, + {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddc2f4dfd396c7bfa18e6ce371cba60e4cf9d2e5cdb71376aa2da264605b60b9"}, + {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5ddcba87675b6d509139d1b521e0c8250e967e63b5909a7e8f8944d0f90ff36f"}, + {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7bd339195d84439cbe5771546fe8a4e8a7a045417d8f9de9a368c434e42a721e"}, + {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:d7c36232a90d4755b720fbd76739d8891732b18cf240a9c645d75f00639a9024"}, + {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6b0817e34942b2ca527b0e9298373e7cc75f429e8da2055607f4931fded23e20"}, + {file = "rpds_py-0.18.0-cp39-none-win32.whl", hash = "sha256:99f70b740dc04d09e6b2699b675874367885217a2e9f782bdf5395632ac663b7"}, + {file = "rpds_py-0.18.0-cp39-none-win_amd64.whl", hash = "sha256:6ef687afab047554a2d366e112dd187b62d261d49eb79b77e386f94644363294"}, + {file = "rpds_py-0.18.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ad36cfb355e24f1bd37cac88c112cd7730873f20fb0bdaf8ba59eedf8216079f"}, + {file = "rpds_py-0.18.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:36b3ee798c58ace201289024b52788161e1ea133e4ac93fba7d49da5fec0ef9e"}, + {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8a2f084546cc59ea99fda8e070be2fd140c3092dc11524a71aa8f0f3d5a55ca"}, + {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e4461d0f003a0aa9be2bdd1b798a041f177189c1a0f7619fe8c95ad08d9a45d7"}, + {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8db715ebe3bb7d86d77ac1826f7d67ec11a70dbd2376b7cc214199360517b641"}, + {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:793968759cd0d96cac1e367afd70c235867831983f876a53389ad869b043c948"}, + {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66e6a3af5a75363d2c9a48b07cb27c4ea542938b1a2e93b15a503cdfa8490795"}, + {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6ef0befbb5d79cf32d0266f5cff01545602344eda89480e1dd88aca964260b18"}, + {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1d4acf42190d449d5e89654d5c1ed3a4f17925eec71f05e2a41414689cda02d1"}, + {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:a5f446dd5055667aabaee78487f2b5ab72e244f9bc0b2ffebfeec79051679984"}, + {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9dbbeb27f4e70bfd9eec1be5477517365afe05a9b2c441a0b21929ee61048124"}, + {file = "rpds_py-0.18.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:22806714311a69fd0af9b35b7be97c18a0fc2826e6827dbb3a8c94eac6cf7eeb"}, + {file = "rpds_py-0.18.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:b34ae4636dfc4e76a438ab826a0d1eed2589ca7d9a1b2d5bb546978ac6485461"}, + {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c8370641f1a7f0e0669ddccca22f1da893cef7628396431eb445d46d893e5cd"}, + {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c8362467a0fdeccd47935f22c256bec5e6abe543bf0d66e3d3d57a8fb5731863"}, + {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11a8c85ef4a07a7638180bf04fe189d12757c696eb41f310d2426895356dcf05"}, + {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b316144e85316da2723f9d8dc75bada12fa58489a527091fa1d5a612643d1a0e"}, + {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf1ea2e34868f6fbf070e1af291c8180480310173de0b0c43fc38a02929fc0e3"}, + {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e546e768d08ad55b20b11dbb78a745151acbd938f8f00d0cfbabe8b0199b9880"}, + {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4901165d170a5fde6f589acb90a6b33629ad1ec976d4529e769c6f3d885e3e80"}, + {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:618a3d6cae6ef8ec88bb76dd80b83cfe415ad4f1d942ca2a903bf6b6ff97a2da"}, + {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ed4eb745efbff0a8e9587d22a84be94a5eb7d2d99c02dacf7bd0911713ed14dd"}, + {file = "rpds_py-0.18.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6c81e5f372cd0dc5dc4809553d34f832f60a46034a5f187756d9b90586c2c307"}, + {file = "rpds_py-0.18.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:43fbac5f22e25bee1d482c97474f930a353542855f05c1161fd804c9dc74a09d"}, + {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d7faa6f14017c0b1e69f5e2c357b998731ea75a442ab3841c0dbbbfe902d2c4"}, + {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:08231ac30a842bd04daabc4d71fddd7e6d26189406d5a69535638e4dcb88fe76"}, + {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:044a3e61a7c2dafacae99d1e722cc2d4c05280790ec5a05031b3876809d89a5c"}, + {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3f26b5bd1079acdb0c7a5645e350fe54d16b17bfc5e71f371c449383d3342e17"}, + {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:482103aed1dfe2f3b71a58eff35ba105289b8d862551ea576bd15479aba01f66"}, + {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1374f4129f9bcca53a1bba0bb86bf78325a0374577cf7e9e4cd046b1e6f20e24"}, + {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:635dc434ff724b178cb192c70016cc0ad25a275228f749ee0daf0eddbc8183b1"}, + {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:bc362ee4e314870a70f4ae88772d72d877246537d9f8cb8f7eacf10884862432"}, + {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:4832d7d380477521a8c1644bbab6588dfedea5e30a7d967b5fb75977c45fd77f"}, + {file = "rpds_py-0.18.0.tar.gz", hash = "sha256:42821446ee7a76f5d9f71f9e33a4fb2ffd724bb3e7f93386150b61a43115788d"}, ] [[package]] @@ -2769,76 +3711,90 @@ pyasn1 = ">=0.1.3" [[package]] name = "ruamel-yaml" -version = "0.17.24" +version = "0.18.6" description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" optional = false -python-versions = ">=3" +python-versions = ">=3.7" files = [ - {file = "ruamel.yaml-0.17.24-py3-none-any.whl", hash = "sha256:f251bd9096207af604af69d6495c3c650a3338d0493d27b04bc55477d7a884ed"}, - {file = "ruamel.yaml-0.17.24.tar.gz", hash = "sha256:90e398ee24524ebe20fc48cd1861cedd25520457b9a36cfb548613e57fde30a0"}, + {file = "ruamel.yaml-0.18.6-py3-none-any.whl", hash = "sha256:57b53ba33def16c4f3d807c0ccbc00f8a6081827e81ba2491691b76882d0c636"}, + {file = "ruamel.yaml-0.18.6.tar.gz", hash = "sha256:8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b"}, ] [package.dependencies] -"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.12\""} +"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.13\""} [package.extras] -docs = ["ryd"] +docs = ["mercurial (>5.7)", "ryd"] jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] [[package]] name = "ruamel-yaml-clib" -version = "0.2.7" +version = "0.2.8" description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" files = [ - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5859983f26d8cd7bb5c287ef452e8aacc86501487634573d260968f753e1d71"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:debc87a9516b237d0466a711b18b6ebeb17ba9f391eb7f91c649c5c4ec5006c7"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:df5828871e6648db72d1c19b4bd24819b80a755c4541d3409f0f7acd0f335c80"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:efa08d63ef03d079dcae1dfe334f6c8847ba8b645d08df286358b1f5293d24ab"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win32.whl", hash = "sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_12_6_arm64.whl", hash = "sha256:721bc4ba4525f53f6a611ec0967bdcee61b31df5a56801281027a3a6d1c2daf5"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:41d0f1fa4c6830176eef5b276af04c89320ea616655d01327d5ce65e50575c94"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win32.whl", hash = "sha256:f6d3d39611ac2e4f62c3128a9eed45f19a6608670c5a2f4f07f24e8de3441d38"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:da538167284de58a52109a9b89b8f6a53ff8437dd6dc26d33b57bf6699153122"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_12_0_arm64.whl", hash = "sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:370445fd795706fd291ab00c9df38a0caed0f17a6fb46b0f607668ecb16ce763"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win32.whl", hash = "sha256:ecdf1a604009bd35c674b9225a8fa609e0282d9b896c03dd441a91e5f53b534e"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win_amd64.whl", hash = "sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2aa261c29a5545adfef9296b7e33941f46aa5bbd21164228e833412af4c9c75f"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:40d030e2329ce5286d6b231b8726959ebbe0404c92f0a578c0e2482182e38282"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c3ca1fbba4ae962521e5eb66d72998b51f0f4d0f608d3c0347a48e1af262efa7"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win32.whl", hash = "sha256:7bdb4c06b063f6fd55e472e201317a3bb6cdeeee5d5a38512ea5c01e1acbdd93"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:be2a7ad8fd8f7442b24323d24ba0b56c51219513cfa45b9ada3b87b76c374d4b"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:91a789b4aa0097b78c93e3dc4b40040ba55bef518f84a40d4442f713b4094acb"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:99e77daab5d13a48a4054803d052ff40780278240a902b880dd37a51ba01a307"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:3243f48ecd450eddadc2d11b5feb08aca941b5cd98c9b1db14b2fd128be8c697"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:8831a2cedcd0f0927f788c5bdf6567d9dc9cc235646a434986a852af1cb54b4b"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win32.whl", hash = "sha256:3110a99e0f94a4a3470ff67fc20d3f96c25b13d24c6980ff841e82bafe827cac"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:92460ce908546ab69770b2e576e4f99fbb4ce6ab4b245345a3869a0a0410488f"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bf9a6bc4a0221538b1a7de3ed7bca4c93c02346853f44e1cd764be0023cd3640"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a7b301ff08055d73223058b5c46c55638917f04d21577c95e00e0c4d79201a6b"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win32.whl", hash = "sha256:d5e51e2901ec2366b79f16c2299a03e74ba4531ddcfacc1416639c557aef0ad8"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:184faeaec61dbaa3cace407cffc5819f7b977e75360e8d5ca19461cd851a5fc5"}, - {file = "ruamel.yaml.clib-0.2.7.tar.gz", hash = "sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:d92f81886165cb14d7b067ef37e142256f1c6a90a65cd156b063a43da1708cfd"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win32.whl", hash = "sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:b5edda50e5e9e15e54a6a8a0070302b00c518a9d32accc2346ad6c984aacd279"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win32.whl", hash = "sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:7048c338b6c86627afb27faecf418768acb6331fc24cfa56c93e8c9780f815fa"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win32.whl", hash = "sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win_amd64.whl", hash = "sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b"}, + {file = "ruamel.yaml.clib-0.2.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:3fcc54cb0c8b811ff66082de1680b4b14cf8a81dce0d4fbf665c2265a81e07a1"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win32.whl", hash = "sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win_amd64.whl", hash = "sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:665f58bfd29b167039f714c6998178d27ccd83984084c286110ef26b230f259f"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win32.whl", hash = "sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win_amd64.whl", hash = "sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:9eb5dee2772b0f704ca2e45b1713e4e5198c18f515b52743576d196348f374d3"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win32.whl", hash = "sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win_amd64.whl", hash = "sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15"}, + {file = "ruamel.yaml.clib-0.2.8.tar.gz", hash = "sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512"}, ] [[package]] name = "s3transfer" -version = "0.6.1" +version = "0.6.2" description = "An Amazon S3 Transfer Manager" optional = false python-versions = ">= 3.7" files = [ - {file = "s3transfer-0.6.1-py3-none-any.whl", hash = "sha256:3c0da2d074bf35d6870ef157158641178a4204a6e689e82546083e31e0311346"}, - {file = "s3transfer-0.6.1.tar.gz", hash = "sha256:640bb492711f4c0c0905e1f62b6aaeb771881935ad27884852411f8e9cacbca9"}, + {file = "s3transfer-0.6.2-py3-none-any.whl", hash = "sha256:b014be3a8a2aab98cfe1abc7229cc5a9a0cf05eb9c1f2b86b230fd8df3f78084"}, + {file = "s3transfer-0.6.2.tar.gz", hash = "sha256:cab66d3380cca3e70939ef2255d01cd8aece6a4907a9528740f668c4b0611861"}, ] [package.dependencies] @@ -2849,26 +3805,54 @@ crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"] [[package]] name = "safety" -version = "2.3.5" +version = "3.0.1" description = "Checks installed dependencies for known vulnerabilities and licenses." optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "safety-2.3.5-py3-none-any.whl", hash = "sha256:2227fcac1b22b53c1615af78872b48348661691450aa25d6704a5504dbd1f7e2"}, - {file = "safety-2.3.5.tar.gz", hash = "sha256:a60c11f8952f412cbb165d70cb1f673a3b43a2ba9a93ce11f97e6a4de834aa3a"}, + {file = "safety-3.0.1-py3-none-any.whl", hash = "sha256:1ed058bc4bef132b974e58d7fcad020fb897cd255328016f8a5a194b94ca91d2"}, + {file = "safety-3.0.1.tar.gz", hash = "sha256:1f2000f03652f3a0bfc67f8fd1e98bc5723ccb76e15cb1bdd68545c3d803df01"}, ] [package.dependencies] +Authlib = ">=1.2.0" Click = ">=8.0.2" -dparse = ">=0.6.2" -packaging = ">=21.0,<22.0" +dparse = ">=0.6.4b0" +jinja2 = ">=3.1.0" +marshmallow = ">=3.15.0" +packaging = ">=21.0" +pydantic = ">=1.10.12,<2.0" requests = "*" +rich = "*" "ruamel.yaml" = ">=0.17.21" -setuptools = ">=19.3" +safety-schemas = ">=0.0.1" +setuptools = ">=65.5.1" +typer = "*" +typing-extensions = ">=4.7.1" +urllib3 = ">=1.26.5" [package.extras] -github = ["jinja2 (>=3.1.0)", "pygithub (>=1.43.3)"] +github = ["pygithub (>=1.43.3)"] gitlab = ["python-gitlab (>=1.3.0)"] +spdx = ["spdx-tools (>=0.8.2)"] + +[[package]] +name = "safety-schemas" +version = "0.0.2" +description = "Schemas for Safety tools" +optional = false +python-versions = ">=3.7" +files = [ + {file = "safety_schemas-0.0.2-py3-none-any.whl", hash = "sha256:277c077ce6e53221874a87c29515ffdd2f3773a6db4d035a9f67cc98db3b8c7f"}, + {file = "safety_schemas-0.0.2.tar.gz", hash = "sha256:7d1b040ec06480f05cff6b45ea7a93e09c8942df864fb0d01ddeb67c323cfa8c"}, +] + +[package.dependencies] +dparse = ">=0.6.4b0" +packaging = ">=21.0" +pydantic = "*" +ruamel-yaml = ">=0.17.21" +typing-extensions = ">=4.7.1" [[package]] name = "sarif-om" @@ -2901,28 +3885,28 @@ contextlib2 = ">=0.5.5" [[package]] name = "setuptools" -version = "67.7.2" +version = "69.1.1" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "setuptools-67.7.2-py3-none-any.whl", hash = "sha256:23aaf86b85ca52ceb801d32703f12d77517b2556af839621c641fca11287952b"}, - {file = "setuptools-67.7.2.tar.gz", hash = "sha256:f104fa03692a2602fa0fec6c6a9e63b6c8a968de13e17c026957dd1f53d80990"}, + {file = "setuptools-69.1.1-py3-none-any.whl", hash = "sha256:02fa291a0471b3a18b2b2481ed902af520c69e8ae0919c13da936542754b4c56"}, + {file = "setuptools-69.1.1.tar.gz", hash = "sha256:5c0806c7d9af348e6dd3777b4f4dbb42c7ad85b190104837488eab9a7c945cf8"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "shodan" -version = "1.30.1" +version = "1.31.0" description = "Python library and command-line utility for Shodan (https://developer.shodan.io)" optional = false python-versions = "*" files = [ - {file = "shodan-1.30.1.tar.gz", hash = "sha256:bedb6e8c2b4459592c1bc17b4d4b57dab0cb58a455ad589ee26a6304242cd505"}, + {file = "shodan-1.31.0.tar.gz", hash = "sha256:c73275386ea02390e196c35c660706a28dd4d537c5a21eb387ab6236fac251f6"}, ] [package.dependencies] @@ -2946,57 +3930,60 @@ files = [ [[package]] name = "slack-sdk" -version = "3.24.0" +version = "3.27.0" description = "The Slack API Platform SDK for Python" optional = false -python-versions = ">=3.6.0" +python-versions = ">=3.6" files = [ - {file = "slack_sdk-3.24.0-py2.py3-none-any.whl", hash = "sha256:cae64f0177a53d34cca59cc691d4535edd18929843a936b97cea421db9e4fbfe"}, - {file = "slack_sdk-3.24.0.tar.gz", hash = "sha256:741ea5381e65f4407d24ed81203912cbd6bfe807a6704b1d3c5ad346c86000b6"}, + {file = "slack_sdk-3.27.0-py2.py3-none-any.whl", hash = "sha256:a901c68cb5547d5459cdefd81343d116db56d65f6b33f4081ddf1cdd243bf07e"}, + {file = "slack_sdk-3.27.0.tar.gz", hash = "sha256:811472ce598db855ab3c02f098fa430323ccb253cfe17ba20c7b05ab206d984d"}, ] [package.extras] -optional = ["SQLAlchemy (>=1.4,<3)", "aiodns (>1.0)", "aiohttp (>=3.7.3,<4)", "boto3 (<=2)", "websocket-client (>=1,<2)", "websockets (>=10,<11)"] -testing = ["Flask (>=1,<2)", "Flask-Sockets (>=0.2,<1)", "Jinja2 (==3.0.3)", "Werkzeug (<2)", "black (==22.8.0)", "boto3 (<=2)", "click (==8.0.4)", "flake8 (>=5,<6)", "itsdangerous (==1.1.0)", "moto (>=3,<4)", "psutil (>=5,<6)", "pytest (>=6.2.5,<7)", "pytest-asyncio (<1)", "pytest-cov (>=2,<3)"] +optional = ["SQLAlchemy (>=1.4,<3)", "aiodns (>1.0)", "aiohttp (>=3.7.3,<4)", "boto3 (<=2)", "websocket-client (>=1,<2)", "websockets (>=10,<11)", "websockets (>=9.1,<10)"] [[package]] name = "smmap" -version = "5.0.0" +version = "5.0.1" description = "A pure Python implementation of a sliding window memory map manager" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, - {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, + {file = "smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da"}, + {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"}, ] [[package]] -name = "sshpubkeys" -version = "3.3.1" -description = "SSH public key parser" +name = "sniffio" +version = "1.3.1" +description = "Sniff out which async library your code is running under" optional = false -python-versions = ">=3" +python-versions = ">=3.7" files = [ - {file = "sshpubkeys-3.3.1-py2.py3-none-any.whl", hash = "sha256:946f76b8fe86704b0e7c56a00d80294e39bc2305999844f079a217885060b1ac"}, - {file = "sshpubkeys-3.3.1.tar.gz", hash = "sha256:3020ed4f8c846849299370fbe98ff4157b0ccc1accec105e07cfa9ae4bb55064"}, + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, ] -[package.dependencies] -cryptography = ">=2.1.4" -ecdsa = ">=0.13" - -[package.extras] -dev = ["twine", "wheel", "yapf"] +[[package]] +name = "std-uritemplate" +version = "0.0.54" +description = "std-uritemplate implementation for Python" +optional = false +python-versions = ">=3.8,<4.0" +files = [ + {file = "std_uritemplate-0.0.54-py3-none-any.whl", hash = "sha256:b58c0db64675df084af4d22d63e17f07cd2588d85c2633fb49582985ea002936"}, + {file = "std_uritemplate-0.0.54.tar.gz", hash = "sha256:1552a7077bff4fb795e8842468a43c085ba620c7373cf94080d3853688507fd4"}, +] [[package]] name = "stevedore" -version = "5.0.0" +version = "5.2.0" description = "Manage dynamic plugins for Python applications" optional = false python-versions = ">=3.8" files = [ - {file = "stevedore-5.0.0-py3-none-any.whl", hash = "sha256:bd5a71ff5e5e5f5ea983880e4a1dd1bb47f8feebbb3d95b592398e2f02194771"}, - {file = "stevedore-5.0.0.tar.gz", hash = "sha256:2c428d2338976279e8eb2196f7a94910960d9f7ba2f41f3988511e95ca447021"}, + {file = "stevedore-5.2.0-py3-none-any.whl", hash = "sha256:1c15d95766ca0569cad14cb6272d4d31dae66b011a929d7c18219c176ea1b5c9"}, + {file = "stevedore-5.2.0.tar.gz", hash = "sha256:46b93ca40e1114cea93d738a6c1e365396981bb6bb78c27045b7587c9473544d"}, ] [package.dependencies] @@ -3032,13 +4019,13 @@ widechars = ["wcwidth"] [[package]] name = "tldextract" -version = "3.4.4" +version = "5.1.1" description = "Accurately separates a URL's subdomain, domain, and public suffix, using the Public Suffix List (PSL). By default, this includes the public ICANN TLDs and their exceptions. You can optionally support the Public Suffix List's private domains as well." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "tldextract-3.4.4-py3-none-any.whl", hash = "sha256:581e7dbefc90e7bb857bb6f768d25c811a3c5f0892ed56a9a2999ddb7b1b70c2"}, - {file = "tldextract-3.4.4.tar.gz", hash = "sha256:5fe3210c577463545191d45ad522d3d5e78d55218ce97215e82004dcae1e1234"}, + {file = "tldextract-5.1.1-py3-none-any.whl", hash = "sha256:b9c4510a8766d377033b6bace7e9f1f17a891383ced3c5d50c150f181e9e1cc2"}, + {file = "tldextract-5.1.1.tar.gz", hash = "sha256:9b6dbf803cb5636397f0203d48541c0da8ba53babaf0e8a6feda2d88746813d4"}, ] [package.dependencies] @@ -3047,16 +4034,8 @@ idna = "*" requests = ">=2.1.0" requests-file = ">=1.4" -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] +[package.extras] +testing = ["black", "mypy", "pytest", "pytest-gitignore", "pytest-mock", "responses", "ruff", "tox", "types-filelock", "types-requests"] [[package]] name = "tomli" @@ -3071,35 +4050,56 @@ files = [ [[package]] name = "tomlkit" -version = "0.11.8" +version = "0.12.4" description = "Style preserving TOML library" optional = false python-versions = ">=3.7" files = [ - {file = "tomlkit-0.11.8-py3-none-any.whl", hash = "sha256:8c726c4c202bdb148667835f68d68780b9a003a9ec34167b6c673b38eff2a171"}, - {file = "tomlkit-0.11.8.tar.gz", hash = "sha256:9330fc7faa1db67b541b28e62018c17d20be733177d290a13b24c62d1614e0c3"}, + {file = "tomlkit-0.12.4-py3-none-any.whl", hash = "sha256:5cd82d48a3dd89dee1f9d64420aa20ae65cfbd00668d6f094d7578a78efbb77b"}, + {file = "tomlkit-0.12.4.tar.gz", hash = "sha256:7ca1cfc12232806517a8515047ba66a19369e71edf2439d0f5824f91032b6cc3"}, ] [[package]] -name = "types-pyyaml" -version = "6.0.12.9" -description = "Typing stubs for PyYAML" +name = "typer" +version = "0.9.0" +description = "Typer, build great CLIs. Easy to code. Based on Python type hints." optional = false -python-versions = "*" +python-versions = ">=3.6" files = [ - {file = "types-PyYAML-6.0.12.9.tar.gz", hash = "sha256:c51b1bd6d99ddf0aa2884a7a328810ebf70a4262c292195d3f4f9a0005f9eeb6"}, - {file = "types_PyYAML-6.0.12.9-py3-none-any.whl", hash = "sha256:5aed5aa66bd2d2e158f75dda22b059570ede988559f030cf294871d3b647e3e8"}, + {file = "typer-0.9.0-py3-none-any.whl", hash = "sha256:5d96d986a21493606a358cae4461bd8cdf83cbf33a5aa950ae629ca3b51467ee"}, + {file = "typer-0.9.0.tar.gz", hash = "sha256:50922fd79aea2f4751a8e0408ff10d2662bd0c8bbfa84755a699f3bada2978b2"}, ] +[package.dependencies] +click = ">=7.1.1,<9.0.0" +typing-extensions = ">=3.7.4.3" + +[package.extras] +all = ["colorama (>=0.4.3,<0.5.0)", "rich (>=10.11.0,<14.0.0)", "shellingham (>=1.3.0,<2.0.0)"] +dev = ["autoflake (>=1.3.1,<2.0.0)", "flake8 (>=3.8.3,<4.0.0)", "pre-commit (>=2.17.0,<3.0.0)"] +doc = ["cairosvg (>=2.5.2,<3.0.0)", "mdx-include (>=1.4.1,<2.0.0)", "mkdocs (>=1.1.2,<2.0.0)", "mkdocs-material (>=8.1.4,<9.0.0)", "pillow (>=9.3.0,<10.0.0)"] +test = ["black (>=22.3.0,<23.0.0)", "coverage (>=6.2,<7.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.910)", "pytest (>=4.4.0,<8.0.0)", "pytest-cov (>=2.10.0,<5.0.0)", "pytest-sugar (>=0.9.4,<0.10.0)", "pytest-xdist (>=1.32.0,<4.0.0)", "rich (>=10.11.0,<14.0.0)", "shellingham (>=1.3.0,<2.0.0)"] + [[package]] name = "typing-extensions" -version = "4.5.0" -description = "Backported and Experimental Type Hints for Python 3.7+" +version = "4.10.0" +description = "Backported and Experimental Type Hints for Python 3.8+" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.10.0-py3-none-any.whl", hash = "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475"}, + {file = "typing_extensions-4.10.0.tar.gz", hash = "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb"}, +] + +[[package]] +name = "tzdata" +version = "2024.1" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" files = [ - {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, - {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, + {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"}, + {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, ] [[package]] @@ -3131,52 +4131,54 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "vulture" -version = "2.10" +version = "2.11" description = "Find dead code" optional = false python-versions = ">=3.8" files = [ - {file = "vulture-2.10-py2.py3-none-any.whl", hash = "sha256:568a4176db7468d0157817ae3bb1847a19f1ddc629849af487f9d3b279bff77d"}, - {file = "vulture-2.10.tar.gz", hash = "sha256:2a5c3160bffba77595b6e6dfcc412016bd2a09cd4b66cdf7fbba913684899f6f"}, + {file = "vulture-2.11-py2.py3-none-any.whl", hash = "sha256:12d745f7710ffbf6aeb8279ba9068a24d4e52e8ed333b8b044035c9d6b823aba"}, + {file = "vulture-2.11.tar.gz", hash = "sha256:f0fbb60bce6511aad87ee0736c502456737490a82d919a44e6d92262cb35f1c2"}, ] [package.dependencies] -toml = "*" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} [[package]] name = "watchdog" -version = "3.0.0" +version = "4.0.0" description = "Filesystem events monitoring" -optional = true -python-versions = ">=3.7" +optional = false +python-versions = ">=3.8" files = [ - {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:336adfc6f5cc4e037d52db31194f7581ff744b67382eb6021c868322e32eef41"}, - {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a70a8dcde91be523c35b2bf96196edc5730edb347e374c7de7cd20c43ed95397"}, - {file = "watchdog-3.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:adfdeab2da79ea2f76f87eb42a3ab1966a5313e5a69a0213a3cc06ef692b0e96"}, - {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b57a1e730af3156d13b7fdddfc23dea6487fceca29fc75c5a868beed29177ae"}, - {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ade88d0d778b1b222adebcc0927428f883db07017618a5e684fd03b83342bd9"}, - {file = "watchdog-3.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7e447d172af52ad204d19982739aa2346245cc5ba6f579d16dac4bfec226d2e7"}, - {file = "watchdog-3.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9fac43a7466eb73e64a9940ac9ed6369baa39b3bf221ae23493a9ec4d0022674"}, - {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8ae9cda41fa114e28faf86cb137d751a17ffd0316d1c34ccf2235e8a84365c7f"}, - {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25f70b4aa53bd743729c7475d7ec41093a580528b100e9a8c5b5efe8899592fc"}, - {file = "watchdog-3.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4f94069eb16657d2c6faada4624c39464f65c05606af50bb7902e036e3219be3"}, - {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7c5f84b5194c24dd573fa6472685b2a27cc5a17fe5f7b6fd40345378ca6812e3"}, - {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa7f6a12e831ddfe78cdd4f8996af9cf334fd6346531b16cec61c3b3c0d8da0"}, - {file = "watchdog-3.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:233b5817932685d39a7896b1090353fc8efc1ef99c9c054e46c8002561252fb8"}, - {file = "watchdog-3.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:13bbbb462ee42ec3c5723e1205be8ced776f05b100e4737518c67c8325cf6100"}, - {file = "watchdog-3.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8f3ceecd20d71067c7fd4c9e832d4e22584318983cabc013dbf3f70ea95de346"}, - {file = "watchdog-3.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c9d8c8ec7efb887333cf71e328e39cffbf771d8f8f95d308ea4125bf5f90ba64"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0e06ab8858a76e1219e68c7573dfeba9dd1c0219476c5a44d5333b01d7e1743a"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:c07253088265c363d1ddf4b3cdb808d59a0468ecd017770ed716991620b8f77a"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:5113334cf8cf0ac8cd45e1f8309a603291b614191c9add34d33075727a967709"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:51f90f73b4697bac9c9a78394c3acbbd331ccd3655c11be1a15ae6fe289a8c83"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:ba07e92756c97e3aca0912b5cbc4e5ad802f4557212788e72a72a47ff376950d"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33"}, - {file = "watchdog-3.0.0-py3-none-win32.whl", hash = "sha256:3ed7c71a9dccfe838c2f0b6314ed0d9b22e77d268c67e015450a29036a81f60f"}, - {file = "watchdog-3.0.0-py3-none-win_amd64.whl", hash = "sha256:4c9956d27be0bb08fc5f30d9d0179a855436e655f046d288e2bcc11adfae893c"}, - {file = "watchdog-3.0.0-py3-none-win_ia64.whl", hash = "sha256:5d9f3a10e02d7371cd929b5d8f11e87d4bad890212ed3901f9b4d68767bee759"}, - {file = "watchdog-3.0.0.tar.gz", hash = "sha256:4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9"}, + {file = "watchdog-4.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:39cb34b1f1afbf23e9562501673e7146777efe95da24fab5707b88f7fb11649b"}, + {file = "watchdog-4.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c522392acc5e962bcac3b22b9592493ffd06d1fc5d755954e6be9f4990de932b"}, + {file = "watchdog-4.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6c47bdd680009b11c9ac382163e05ca43baf4127954c5f6d0250e7d772d2b80c"}, + {file = "watchdog-4.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8350d4055505412a426b6ad8c521bc7d367d1637a762c70fdd93a3a0d595990b"}, + {file = "watchdog-4.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c17d98799f32e3f55f181f19dd2021d762eb38fdd381b4a748b9f5a36738e935"}, + {file = "watchdog-4.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4986db5e8880b0e6b7cd52ba36255d4793bf5cdc95bd6264806c233173b1ec0b"}, + {file = "watchdog-4.0.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:11e12fafb13372e18ca1bbf12d50f593e7280646687463dd47730fd4f4d5d257"}, + {file = "watchdog-4.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5369136a6474678e02426bd984466343924d1df8e2fd94a9b443cb7e3aa20d19"}, + {file = "watchdog-4.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76ad8484379695f3fe46228962017a7e1337e9acadafed67eb20aabb175df98b"}, + {file = "watchdog-4.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:45cc09cc4c3b43fb10b59ef4d07318d9a3ecdbff03abd2e36e77b6dd9f9a5c85"}, + {file = "watchdog-4.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eed82cdf79cd7f0232e2fdc1ad05b06a5e102a43e331f7d041e5f0e0a34a51c4"}, + {file = "watchdog-4.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba30a896166f0fee83183cec913298151b73164160d965af2e93a20bbd2ab605"}, + {file = "watchdog-4.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d18d7f18a47de6863cd480734613502904611730f8def45fc52a5d97503e5101"}, + {file = "watchdog-4.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2895bf0518361a9728773083908801a376743bcc37dfa252b801af8fd281b1ca"}, + {file = "watchdog-4.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:87e9df830022488e235dd601478c15ad73a0389628588ba0b028cb74eb72fed8"}, + {file = "watchdog-4.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6e949a8a94186bced05b6508faa61b7adacc911115664ccb1923b9ad1f1ccf7b"}, + {file = "watchdog-4.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6a4db54edea37d1058b08947c789a2354ee02972ed5d1e0dca9b0b820f4c7f92"}, + {file = "watchdog-4.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d31481ccf4694a8416b681544c23bd271f5a123162ab603c7d7d2dd7dd901a07"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:8fec441f5adcf81dd240a5fe78e3d83767999771630b5ddfc5867827a34fa3d3"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:6a9c71a0b02985b4b0b6d14b875a6c86ddea2fdbebd0c9a720a806a8bbffc69f"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:557ba04c816d23ce98a06e70af6abaa0485f6d94994ec78a42b05d1c03dcbd50"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:d0f9bd1fd919134d459d8abf954f63886745f4660ef66480b9d753a7c9d40927"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:f9b2fdca47dc855516b2d66eef3c39f2672cbf7e7a42e7e67ad2cbfcd6ba107d"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:73c7a935e62033bd5e8f0da33a4dcb763da2361921a69a5a95aaf6c93aa03a87"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:6a80d5cae8c265842c7419c560b9961561556c4361b297b4c431903f8c33b269"}, + {file = "watchdog-4.0.0-py3-none-win32.whl", hash = "sha256:8f9a542c979df62098ae9c58b19e03ad3df1c9d8c6895d96c0d51da17b243b1c"}, + {file = "watchdog-4.0.0-py3-none-win_amd64.whl", hash = "sha256:f970663fa4f7e80401a7b0cbeec00fa801bf0287d93d48368fc3e6fa32716245"}, + {file = "watchdog-4.0.0-py3-none-win_ia64.whl", hash = "sha256:9a03e16e55465177d416699331b0f3564138f1807ecc5f2de9d55d8f188d08c7"}, + {file = "watchdog-4.0.0.tar.gz", hash = "sha256:e3e7065cbdabe6183ab82199d7a4f6b3ba0a438c5a512a68559846ccb76a78ec"}, ] [package.extras] @@ -3184,17 +4186,17 @@ watchmedo = ["PyYAML (>=3.10)"] [[package]] name = "websocket-client" -version = "1.5.1" +version = "1.7.0" description = "WebSocket client for Python with low level API options" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "websocket-client-1.5.1.tar.gz", hash = "sha256:3f09e6d8230892547132177f575a4e3e73cfdf06526e20cc02aa1c3b47184d40"}, - {file = "websocket_client-1.5.1-py3-none-any.whl", hash = "sha256:cdf5877568b7e83aa7cf2244ab56a3213de587bbe0ce9d8b9600fc77b455d89e"}, + {file = "websocket-client-1.7.0.tar.gz", hash = "sha256:10e511ea3a8c744631d3bd77e61eb17ed09304c413ad42cf6ddfa4c7787e8fe6"}, + {file = "websocket_client-1.7.0-py3-none-any.whl", hash = "sha256:f4c3d22fec12a2461427a29957ff07d35098ee2d976d3ba244e688b8b4057588"}, ] [package.extras] -docs = ["Sphinx (>=3.4)", "sphinx-rtd-theme (>=0.5)"] +docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"] optional = ["python-socks", "wsaccel"] test = ["websockets"] @@ -3296,13 +4298,13 @@ files = [ [[package]] name = "xlsxwriter" -version = "3.1.0" +version = "3.2.0" description = "A Python module for creating Excel XLSX files." optional = false python-versions = ">=3.6" files = [ - {file = "XlsxWriter-3.1.0-py3-none-any.whl", hash = "sha256:b70a147d36235d1ee835cfd037396f789db1f76740a0e5c917d54137169341de"}, - {file = "XlsxWriter-3.1.0.tar.gz", hash = "sha256:02913b50b74c00f165933d5da3e3a02cab4204cb4932722a1b342c5c71034122"}, + {file = "XlsxWriter-3.2.0-py3-none-any.whl", hash = "sha256:ecfd5405b3e0e228219bcaf24c2ca0915e012ca9464a14048021d21a995d490e"}, + {file = "XlsxWriter-3.2.0.tar.gz", hash = "sha256:9977d0c661a72866a61f9f7a809e25ebbb0fb7036baa3b9fe74afcfca6b3cb8c"}, ] [[package]] @@ -3316,25 +4318,125 @@ files = [ {file = "xmltodict-0.13.0.tar.gz", hash = "sha256:341595a488e3e01a85a9d8911d8912fd922ede5fecc4dce437eb4b6c8d037e56"}, ] +[[package]] +name = "yarl" +version = "1.9.4" +description = "Yet another URL library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541"}, + {file = "yarl-1.9.4-cp310-cp310-win32.whl", hash = "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d"}, + {file = "yarl-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98"}, + {file = "yarl-1.9.4-cp311-cp311-win32.whl", hash = "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31"}, + {file = "yarl-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10"}, + {file = "yarl-1.9.4-cp312-cp312-win32.whl", hash = "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7"}, + {file = "yarl-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984"}, + {file = "yarl-1.9.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434"}, + {file = "yarl-1.9.4-cp37-cp37m-win32.whl", hash = "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749"}, + {file = "yarl-1.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3"}, + {file = "yarl-1.9.4-cp38-cp38-win32.whl", hash = "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece"}, + {file = "yarl-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0"}, + {file = "yarl-1.9.4-cp39-cp39-win32.whl", hash = "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575"}, + {file = "yarl-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15"}, + {file = "yarl-1.9.4-py3-none-any.whl", hash = "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad"}, + {file = "yarl-1.9.4.tar.gz", hash = "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf"}, +] + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" + [[package]] name = "zipp" -version = "3.15.0" +version = "3.17.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, - {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] - -[extras] -docs = ["mkdocs", "mkdocs-material"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] [metadata] lock-version = "2.0" -python-versions = ">=3.9,<3.12" -content-hash = "5eeda2c0549c1a40ebedefe766f0d7e27e78ed123aaacb3e42d242271774b1da" +python-versions = ">=3.9,<3.13" +content-hash = "dc655cec9f8bc9b586a4af5cdadc1fa8babc95467a0cd2a25482c0a0b0fd1171" diff --git a/prowler/compliance/aws/aws_account_security_onboarding_aws.json b/prowler/compliance/aws/aws_account_security_onboarding_aws.json new file mode 100644 index 00000000000..53f8fbb3e0a --- /dev/null +++ b/prowler/compliance/aws/aws_account_security_onboarding_aws.json @@ -0,0 +1,1190 @@ +{ + "Framework": "AWS-Account-Security-Onboarding", + "Version": "", + "Provider": "AWS", + "Description": "Checklist when onboarding new AWS Accounts to existing AWS Organization.", + "Requirements": [ + { + "Id": "Predefine IAM Roles", + "Description": "Check if exists predefine IAM Roles", + "Attributes": [ + { + "Section": "Deploy account from predefined IaC template", + "Service": "IAM", + "Type": "Automated" + } + ], + "Checks": [ + "iam_no_custom_policy_permissive_role_assumption", + "iam_policy_attached_only_to_group_or_roles", + "iam_support_role_created", + "iam_role_cross_service_confused_deputy_prevention" + ] + }, + { + "Id": "Enabled security services", + "Description": "Check if security services are enabled", + "Attributes": [ + { + "Section": "Deploy account from predefined IaC template", + "Service": "SecurityServices", + "Type": "Automated" + } + ], + "Checks": [ + "securityhub_enabled", + "guardduty_is_enabled", + "accessanalyzer_enabled", + "macie_is_enabled" + ] + }, + { + "Id": "IDC integration, SSO configuration", + "Description": "Check if IDC integration and SSO configuration is enabled", + "Attributes": [ + { + "Section": "Deploy account from predefined IaC template", + "Service": "IAM Identity Center", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Organization invitation", + "Description": "Check if organization invitation is enabled", + "Attributes": [ + { + "Section": "Deploy account from predefined IaC template", + "Service": "Organizations", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Billing, emergency, security contacts", + "Description": "Check if billing, emergency, security contacts are configured", + "Attributes": [ + { + "Section": "Deploy account from predefined IaC template", + "Service": "Billing", + "Type": "Automated" + } + ], + "Checks": [ + "account_maintain_current_contact_details", + "account_security_contact_information_is_registered" + ] + }, + { + "Id": "Root user - distribution email + MFA", + "Description": "Check if root user has distribution email and MFA enabled", + "Attributes": [ + { + "Section": "Deploy account from predefined IaC template", + "Service": "IAM", + "Type": "Automated" + } + ], + "Checks": [ + "iam_root_mfa_enabled", + "iam_root_hardware_mfa_enabled" + ] + }, + { + "Id": "S3 Block Public Access", + "Description": "Block public access to S3 buckets", + "Attributes": [ + { + "Section": "Deploy account from predefined IaC template", + "Service": "S3", + "Type": "Automated" + } + ], + "Checks": [ + "s3_account_level_public_access_blocks", + "s3_bucket_public_access", + "s3_bucket_level_public_access_block" + ] + }, + { + "Id": "Disable AMI public sharing", + "Description": "Disable AMI public sharing", + "Attributes": [ + { + "Section": "Deploy account from predefined IaC template", + "Service": "EC2", + "Type": "Automated" + } + ], + "Checks": [ + "ec2_ami_public" + ] + }, + { + "Id": "Block unused regions", + "Description": "Block unsued regions", + "Attributes": [ + { + "Section": "SCPs", + "SubSection": "Apply existing SCPs based on OU placement", + "Service": "IAM", + "Type": "Automated" + } + ], + "Checks": [ + "organizations_scp_check_deny_regions" + ] + }, + { + "Id": "Block tampering with security-related settings and services", + "Description": "Block tampering with security-related settings and services", + "Attributes": [ + { + "Section": "SCPs", + "SubSection": "Apply existing SCPs based on OU placement", + "Service": "IAM", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Restrict instances types", + "Description": "Restrict instances types", + "Attributes": [ + { + "Section": "SCPs", + "SubSection": "Apply existing SCPs based on OU placement", + "Service": "IAM", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Block root user", + "Description": "Block root user", + "Attributes": [ + { + "Section": "SCPs", + "SubSection": "Apply existing SCPs based on OU placement", + "Service": "IAM", + "Type": "Automated" + } + ], + "Checks": [ + "iam_no_root_access_key", + "iam_avoid_root_usage" + ] + }, + { + "Id": "Add custom SCPs if required", + "Description": "Add custom SCPs if required", + "Attributes": [ + { + "Section": "SCPs", + "Service": "IAM", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Send DNS Resolvers queries to SIEM", + "Description": "Send DNS Resolvers queries to SIEM", + "Attributes": [ + { + "Section": "Logging", + "Service": "Logging", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Send VPC Flow Logs (only DENYs) to S3 bucket", + "Description": "Send VPC Flow Logs (only DENYs) to S3 bucket", + "Attributes": [ + { + "Section": "Logging", + "Service": "Logging", + "Type": "Automated" + } + ], + "Checks": [ + "vpc_flow_logs_enabled" + ] + }, + { + "Id": "Send S3 access logs for critical buckets to separate S3 bucket", + "Description": "Send S3 access logs for critical buckets to separate S3 bucket", + "Attributes": [ + { + "Section": "Logging", + "Service": "Logging", + "Type": "Automated" + } + ], + "Checks": [ + "cloudtrail_logs_s3_bucket_access_logging_enabled", + "cloudtrail_s3_dataevents_write_enabled" + ] + }, + { + "Id": "Establish ready-to-be-enabled pipelines to deliver ALB and CFD to SIEM to toggle in case of emergency and investigations", + "Description": "Establish ready-to-be-enabled pipelines to deliver ALB and CFD to SIEM to toggle in case of emergency and investigations", + "Attributes": [ + { + "Section": "Logging", + "Service": "Logging", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Alert on each High finding", + "Description": "Checks that GuardDuty is enabled and configured to send High findings to CloudWatch Events", + "Attributes": [ + { + "Section": "Alerting", + "SubSection": "GuardDuty", + "Service": "GuardDuty", + "Type": "Automated" + } + ], + "Checks": [ + "guardduty_is_enabled", + "guardduty_is_enabled" + ] + }, + { + "Id": "Alerts based on aggregated findings with severity Medium and below", + "Description": "Alert based on aggregated findings with severity Medium and below", + "Attributes": [ + { + "Section": "Alerting", + "SubSection": "GuardDuty", + "Service": "GuardDuty", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Critical alert on every root user activity", + "Description": "Send critical alert on every root user activity", + "Attributes": [ + { + "Section": "Alerting", + "SubSection": "CloudTrail", + "Service": "CloudTrail", + "Type": "Automated" + } + ], + "Checks": [ + "cloudwatch_log_metric_filter_root_usage" + ] + }, + { + "Id": "Critical alert on cloudtrail settings changes", + "Description": "Send critical alert on cloudtrail settings changes", + "Attributes": [ + { + "Section": "Alerting", + "SubSection": "CloudTrail", + "Service": "CloudTrail", + "Type": "Automated" + } + ], + "Checks": [ + "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled" + ] + }, + { + "Id": "Alert on rise of ConsoleLoginFailures events", + "Description": "Alert on rise ConsoleLoginFailures events", + "Attributes": [ + { + "Section": "Alerting", + "SubSection": "CloudTrail", + "Service": "CloudTrail", + "Type": "Automated" + } + ], + "Checks": [ + "cloudwatch_log_metric_filter_authentication_failures" + ] + }, + { + "Id": "Alert on IAM user changes", + "Description": "Alert on IAM user changes", + "Attributes": [ + { + "Section": "Alerting", + "SubSection": "CloudTrail", + "Service": "CloudTrail", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Alert on snapshot manipulations", + "Description": "Alert when a snapshot is manipulated", + "Attributes": [ + { + "Section": "Alerting", + "SubSection": "CloudTrail", + "Service": "CloudTrail", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Alerts on raised cost anomaly events", + "Description": "Alert when cost anomaly events are raised", + "Attributes": [ + { + "Section": "Alerting", + "SubSection": "Cost Anomaly", + "Service": "Billing", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Alerts based on (at least) each new CRITICAL finding", + "Description": "Alerts triggered by every new CRITICAL finding, at a minimum.", + "Attributes": [ + { + "Section": "Alerting", + "SubSection": "SecurityHub", + "Service": "SecurityHub", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Realert on inactivity in a set period", + "Description": "Activate a re-alert system for detecting inactivity within a specified time frame.", + "Attributes": [ + { + "Section": "Alerting", + "SubSection": "SecurityHub", + "Service": "SecurityHub", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Alerts based on rate-based rules", + "Description": "Notifications triggered by rate-based regulations", + "Attributes": [ + { + "Section": "Alerting", + "SubSection": "WAF", + "Service": "WAF", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Alerts based on high amount of blocked requests by managed rules", + "Description": "Notifications triggered by a significant number of blocked requests as a result of managed rules.", + "Attributes": [ + { + "Section": "Alerting", + "SubSection": "WAF", + "Service": "WAF", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Alert based on DDoSDetected metric", + "Description": "Generate an alert triggered by the detection of a DDoS attack based on the DDoSDetected metric.", + "Attributes": [ + { + "Section": "Alerting", + "SubSection": "Shield", + "Service": "Shield", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Adopt incident response guide and prepared battle card", + "Description": "Utilize the incident response manual and have the battle card ready for use.", + "Attributes": [ + { + "Section": "Alerting", + "SubSection": "Shield", + "Service": "Shield", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Alert on blocked DNS query", + "Description": "Notify when a DNS query is obstructed.", + "Attributes": [ + { + "Section": "Alerting", + "SubSection": "R53 DNS Resolver", + "Service": "Route53", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Alert on critical vulnerabilities in AMIs/Images", + "Description": "Notification regarding severe vulnerabilities detected in AMIs/Images.", + "Attributes": [ + { + "Section": "Alerting", + "SubSection": "Vulnerability Scanning", + "Service": "Inspector", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Create Cost Anomaly Detection monitors to alert spending anomalies", + "Description": "Develop monitoring systems for detecting cost anomalies and generating alerts for irregular spending patterns.", + "Attributes": [ + { + "Section": "Budget Alarms", + "SubSection": "Prod", + "Service": "CloudWatch", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Create Cost Anomaly Detection monitors to alert spending anomalies", + "Description": "Establish monitoring systems for cost anomaly detection to promptly notify about unusual spending patterns.", + "Attributes": [ + { + "Section": "Budget Alarms", + "SubSection": "QA", + "Service": "CloudWatch", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Configure Budgets Actions to stop services in cases of big unexpected spendings", + "Description": "Set up Budgets Actions to halt services when significant unexpected expenses occur.", + "Attributes": [ + { + "Section": "Budget Alarms", + "SubSection": "QA", + "Service": "SNS", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Create analyzers in each active regions", + "Description": "Establish analyzers within every active region.", + "Attributes": [ + { + "Section": "IAM Access Analyzer", + "Service": "IAM Access Analyzer", + "Type": "Automated" + } + ], + "Checks": [ + "accessanalyzer_enabled", + "accessanalyzer_enabled_without_findings" + ] + }, + { + "Id": "Verify that events are present in SecurityHub aggregated view", + "Description": "Confirm the presence of events within the aggregated view of SecurityHub.", + "Attributes": [ + { + "Section": "IAM Access Analyzer", + "Service": "SecurityHub", + "Type": "Automated" + } + ], + "Checks": [ + "securityhub_enabled", + "accessanalyzer_enabled", + "accessanalyzer_enabled_without_findings" + ] + }, + { + "Id": "Consider enabling for critical buckets only", + "Description": "Please contemplate activating this feature exclusively for essential or crucial buckets.", + "Attributes": [ + { + "Section": "Macie", + "Service": "Macie", + "Type": "Automated" + } + ], + "Checks": [ + "macie_is_enabled" + ] + }, + { + "Id": "Enable and configure AWS Inspector", + "Description": "Enable and set up AWS Inspector.", + "Attributes": [ + { + "Section": "Vulnerability Scanning", + "SubSection": "EC2 used as servers", + "Service": "EC2", + "Type": "Automated" + } + ], + "Checks": [ + "inspector2_findings_exist" + ] + }, + { + "Id": "Export scan results as metrics in centralized collector", + "Description": "Export scan results as metrics to a centralized collector.", + "Attributes": [ + { + "Section": "Vulnerability Scanning", + "SubSection": "EC2 used as servers", + "Service": "EC2", + "Type": "Automated" + } + ], + "Checks": [ + "guardduty_centrally_managed" + ] + }, + { + "Id": "Scan images for vulnerability on upload to ECR", + "Description": "Check uploaded images for vulnerabilities when adding them to the ECR (Elastic Container Registry).", + "Attributes": [ + { + "Section": "Vulnerability Scanning", + "SubSection": "ECR used as docker images hub", + "Service": "ECR", + "Type": "Automated" + } + ], + "Checks": [ + "inspector2_findings_exist", + "ecr_registry_scan_images_on_push_enabled", + "ecr_repositories_scan_vulnerabilities_in_latest_image", + "ecr_repositories_scan_images_on_push_enabled" + ] + }, + { + "Id": "Deploy solution to periodically rescan currently used images and report found vulnerabilities", + "Description": "Implement a solution to conduct regular scans on currently employed images and notify about any identified vulnerabilities.", + "Attributes": [ + { + "Section": "Vulnerability Scanning", + "SubSection": "ECR used as docker images hub", + "Service": "ECR", + "Type": "Automated" + } + ], + "Checks": [ + "ecr_repositories_scan_vulnerabilities_in_latest_image" + ] + }, + { + "Id": "Export scan results as metrics in centralized collector", + "Description": "Generate metric data from scan results and store it in a centralized collector.", + "Attributes": [ + { + "Section": "Vulnerability Scanning", + "SubSection": "ECR used as docker images hub", + "Service": "ECR", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Enable as part of Organization trail", + "Description": "Activate as a component of the Organization trail.", + "Attributes": [ + { + "Section": "AWS Cloudtrail", + "Service": "CloudTrail", + "Type": "Automated" + } + ], + "Checks": [ + "cloudtrail_multi_region_enabled", + "cloudtrail_multi_region_enabled_logging_management_events" + ] + }, + { + "Id": "Confirm that logs are present in S3 bucket and SIEM", + "Description": "Verify the existence of logs within both the S3 bucket and the SIEM system.", + "Attributes": [ + { + "Section": "AWS Cloudtrail", + "Service": "CloudTrail", + "Type": "Automated" + } + ], + "Checks": [ + "cloudtrail_logs_s3_bucket_access_logging_enabled", + "cloudtrail_s3_dataevents_read_enabled", + "cloudtrail_s3_dataevents_write_enabled" + ] + }, + { + "Id": "Deploy solution to alert on at least critical new findings", + "Description": "Implement a solution to trigger alerts for newly identified critical issues at minimum.", + "Attributes": [ + { + "Section": "Enable AWS SecurityHub", + "Service": "SecurityHub", + "Type": "Automated" + } + ], + "Checks": [ + "securityhub_enabled" + ] + }, + { + "Id": "Apply SecurityHub Central Configuration for Organization", + "Description": "Apply SecurityHub Central Configuration for Organization", + "Attributes": [ + { + "Section": "Enable AWS SecurityHub", + "Service": "SecurityHub", + "Type": "Automated" + } + ], + "Checks": [ + "securityhub_enabled" + ] + }, + { + "Id": "Enable/disable additional standards and controls", + "Description": "Implement SecurityHub Central Configuration across the organization.", + "Attributes": [ + { + "Section": "Enable AWS SecurityHub", + "Service": "SecurityHub", + "Type": "Automated" + } + ], + "Checks": [ + "securityhub_enabled" + ] + }, + { + "Id": "Confirm that findings are being visible in the aggregated view", + "Description": "Please verify that the findings are visible when viewed in the aggregated perspective.", + "Attributes": [ + { + "Section": "Enable AWS SecurityHub", + "Service": "SecurityHub", + "Type": "Automated" + } + ], + "Checks": [ + "securityhub_enabled" + ] + }, + { + "Id": "Ensure that there are no critical (and considered critical) findings present in account", + "Description": "Make certain that there are no critical findings, whether deemed critical or not, within the account.", + "Attributes": [ + { + "Section": "Enable AWS SecurityHub", + "Service": "SecurityHub", + "Type": "Automated" + } + ], + "Checks": [ + "securityhub_enabled" + ] + }, + { + "Id": "Enable continuous recording for most of the resources", + "Description": "Activate continuous recording for the majority of resources.", + "Attributes": [ + { + "Section": "Enable AWS Config", + "Service": "Config", + "Type": "Automated" + } + ], + "Checks": [ + "config_recorder_all_regions_enabled" + ] + }, + { + "Id": "Consider periodic recording for some resources to optimize bill", + "Description": "Think about implementing scheduled monitoring for specific resources in order to maximize cost efficiency.", + "Attributes": [ + { + "Section": "Enable AWS Config", + "Service": "Config", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Confirm that records are present in central aggregator", + "Description": "Confirm that records are present in central aggregator", + "Attributes": [ + { + "Section": "Enable AWS Config", + "Service": "Config", + "Type": "Automated" + } + ], + "Checks": [ + "config_recorder_all_regions_enabled" + ] + }, + { + "Id": "Enable as part of central configuration for Organization", + "Description": "Please verify the existence of records within the central aggregator.", + "Attributes": [ + { + "Section": "Enable GuardDuty", + "Service": "GuardDuty", + "Type": "Must" + } + ], + "Checks": [ + "guardduty_is_enabled", + "guardduty_centrally_managed" + ] + }, + { + "Id": "Threat Detection", + "Description": "Detection of Threats in your AWS environment", + "Attributes": [ + { + "Section": "Enable GuardDuty", + "Service": "GuardDuty", + "Type": "Must" + } + ], + "Checks": [ + "guardduty_is_enabled", + "guardduty_no_high_severity_findings" + ] + }, + { + "Id": "RDS protection", + "Description": "Protection for RDS instances", + "Attributes": [ + { + "Section": "Enable GuardDuty", + "Service": "GuardDuty", + "Type": "Must" + } + ], + "Checks": [ + "guardduty_is_enabled", + "guardduty_no_high_severity_findings" + ] + }, + { + "Id": "Lambda protection", + "Description": "Protection using Lambda", + "Attributes": [ + { + "Section": "Enable GuardDuty", + "Service": "Lambda", + "Type": "Must" + } + ], + "Checks": [ + "guardduty_is_enabled", + "guardduty_no_high_severity_findings" + ] + }, + { + "Id": "S3 protection", + "Description": "Protection using S3", + "Attributes": [ + { + "Section": "Enable GuardDuty", + "Service": "S3", + "Type": "Must" + } + ], + "Checks": [ + "guardduty_is_enabled", + "guardduty_no_high_severity_findings" + ] + }, + { + "Id": "Malware Scanning", + "Description": "Conducting a Comprehensive Scan for Malicious Software", + "Attributes": [ + { + "Section": "Enable GuardDuty", + "Service": "GuardDuty", + "Type": "Must" + } + ], + "Checks": [ + "guardduty_is_enabled", + "guardduty_no_high_severity_findings" + ] + }, + { + "Id": "Confirm that events are present in SIEM", + "Description": "Confirm that events are present in SIEM", + "Attributes": [ + { + "Section": "Enable GuardDuty", + "Service": "GuardDuty", + "Type": "Must" + } + ], + "Checks": [ + "guardduty_is_enabled", + "guardduty_no_high_severity_findings" + ] + }, + { + "Id": "Apply suppression filters to disable useless findings", + "Description": "Implementing suppression filters to deactivate non-essential detections.", + "Attributes": [ + { + "Section": "Enable GuardDuty", + "Service": "GuardDuty", + "Type": "Must" + } + ], + "Checks": [ + "guardduty_is_enabled", + "guardduty_no_high_severity_findings" + ] + }, + { + "Id": "Include in process of incident response based on events", + "Description": "Incorporate within the procedural framework of incident response, taking into account the triggering events.", + "Attributes": [ + { + "Section": "Enable GuardDuty", + "Service": "GuardDuty", + "Type": "Must" + } + ], + "Checks": [ + "guardduty_is_enabled", + "guardduty_no_high_severity_findings" + ] + }, + { + "Id": "Runtime protection", + "Description": "Brand new and in need of thorough testing.", + "Attributes": [ + { + "Section": "Enable GuardDuty", + "Service": "GuardDuty", + "Type": "Optional" + } + ], + "Checks": [ + "guardduty_is_enabled", + "guardduty_no_high_severity_findings" + ] + }, + { + "Id": "EKS protection (if EKS is used)", + "Description": "Enhanced Kubernetes Security (EKS) protection, if the Kubernetes service is employed.", + "Attributes": [ + { + "Section": "Enable GuardDuty", + "Service": "EKS", + "Type": "Optional" + } + ], + "Checks": [] + }, + { + "Id": "Apply managed domain name lists for Resolver in block mode)", + "Description": "Utilize managed domain name lists within Resolver to implement block mode.", + "Attributes": [ + { + "Section": "R53 DNS Resolver Firewall", + "Service": "Route53", + "Type": "Automated" + } + ], + "Checks": [ + "route53_domains_privacy_protection_enabled", + "route53_domains_transferlock_enabled" + ] + }, + { + "Id": "Use strictly AWS VPC DNS resolver", + "Description": "Exclusively Employ Amazon Web Services (AWS) Virtual Private Cloud (VPC) DNS Resolver", + "Attributes": [ + { + "Section": "R53 DNS Resolver Firewall", + "Service": "Route53", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Ban outbound DNS calls from all VPCs to ports 53", + "Description": "Prohibit all Virtual Private Clouds (VPCs) from initiating outbound DNS calls on port 53.", + "Attributes": [ + { + "Section": "R53 DNS Resolver Firewall", + "Service": "Route53", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Apply custom threat list for GuardDuty to alert on access to DoH servers", + "Description": "Implement a customized threat list within GuardDuty to generate alerts when there is access to Domain Name System over HTTPS (DoH) servers.", + "Attributes": [ + { + "Section": "R53 DNS Resolver Firewall", + "Service": "Route53", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Enable Shield Advanced subscription for public facing account", + "Description": "Activate the Shield Advanced subscription for the publicly accessible account.", + "Attributes": [ + { + "Section": "Shield Advanced", + "Service": "Shield Advanced", + "Type": "Automated" + } + ], + "Checks": [ + "shield_advanced_protection_in_route53_hosted_zones", + "shield_advanced_protection_in_classic_load_balancers", + "shield_advanced_protection_in_internet_facing_load_balancers", + "shield_advanced_protection_in_cloudfront_distributions", + "shield_advanced_protection_in_associated_elastic_ips", + "shield_advanced_protection_in_global_accelerators" + ] + }, + { + "Id": "Export metrics in centralized collector", + "Description": "Exporting metrics to a centralized collector for data aggregation and analysis.", + "Attributes": [ + { + "Section": "Shield Advanced", + "Service": "Shield Advanced", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Create DDoS battle card with main info about protected services", + "Description": "Prepare a Detailed Distributed Denial of Service (DDoS) Battle Card Encompassing Key Information Regarding Safeguarded Services.", + "Attributes": [ + { + "Section": "Shield Advanced", + "Service": "Shield Advanced", + "Type": "Automated" + } + ], + "Checks": [ + "shield_advanced_protection_in_route53_hosted_zones", + "shield_advanced_protection_in_classic_load_balancers", + "shield_advanced_protection_in_internet_facing_load_balancers", + "shield_advanced_protection_in_cloudfront_distributions", + "shield_advanced_protection_in_associated_elastic_ips", + "shield_advanced_protection_in_global_accelerators" + ] + }, + { + "Id": "CFD + ALB + secret rotation architecture", + "Description": "Designing an Architecture for Computational Fluid Dynamics (CFD), Application Load Balancing (ALB), and Secret Rotation Integration", + "Attributes": [ + { + "Section": "WAFv2", + "SubSection": "Deploy WAF setup for each public web service", + "Service": "WAFv2", + "Type": "Must" + } + ], + "Checks": [ + "apigateway_restapi_waf_acl_attached", + "cloudfront_distributions_using_waf", + "elbv2_waf_acl_attached" + ] + }, + { + "Id": "Predefined set of managed rules", + "Description": "A pre-established collection of rules under management control.", + "Attributes": [ + { + "Section": "WAFv2", + "SubSection": "Deploy WAF setup for each public web service", + "Service": "WAFv2", + "Type": "Must" + } + ], + "Checks": [ + "apigateway_restapi_waf_acl_attached", + "cloudfront_distributions_using_waf", + "elbv2_waf_acl_attached" + ] + }, + { + "Id": "Global allow - and block-lists", + "Description": "Establishing International Lists for Permissions and Restrictions", + "Attributes": [ + { + "Section": "WAFv2", + "SubSection": "Deploy WAF setup for each public web service", + "Service": "WAFv2", + "Type": "Must" + } + ], + "Checks": [ + "apigateway_restapi_waf_acl_attached", + "cloudfront_distributions_using_waf", + "elbv2_waf_acl_attached" + ] + }, + { + "Id": "Blanket rate-based rules", + "Description": "Establishing rules based on a standardized, all-encompassing rate.", + "Attributes": [ + { + "Section": "WAFv2", + "SubSection": "Deploy WAF setup for each public web service", + "Service": "WAFv2", + "Type": "Must" + } + ], + "Checks": [] + }, + { + "Id": "Service-unique exclusion rules", + "Description": "Exclusion rules specific to the service provided.", + "Attributes": [ + { + "Section": "WAFv2", + "SubSection": "Deploy WAF setup for each public web service", + "Service": "WAFv2", + "Type": "Must" + } + ], + "Checks": [ + "apigateway_restapi_waf_acl_attached", + "cloudfront_distributions_using_waf", + "elbv2_waf_acl_attached" + ] + }, + { + "Id": "Additional managed rules", + "Description": "Supplementary managed rules", + "Attributes": [ + { + "Section": "WAFv2", + "SubSection": "Deploy WAF setup for each public web service", + "Service": "WAFv2", + "Type": "Discuss" + } + ], + "Checks": [] + }, + { + "Id": "Scoped-down rate-based rules", + "Description": "Rate-based rules with a narrowed scope", + "Attributes": [ + { + "Section": "WAFv2", + "SubSection": "Deploy WAF setup for each public web service", + "Service": "WAFv2", + "Type": "Discuss" + } + ], + "Checks": [ + "apigateway_restapi_waf_acl_attached", + "cloudfront_distributions_using_waf", + "elbv2_waf_acl_attached" + ] + }, + { + "Id": "Enable Shield Advanced automatic application layer DDoS mitigation", + "Description": "Activate automatic application layer Distributed Denial of Service (DDoS) mitigation within Shield Advanced.", + "Attributes": [ + { + "Section": "WAFv2", + "Service": "Shield Advanced", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Configure R53 health checks for all protected resources", + "Description": "Establishing Amazon Route 53 (R53) health checks to monitor the well-being of all safeguarded resources.", + "Attributes": [ + { + "Section": "WAFv2", + "Service": "Route53", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Configure sensitive fields redaction and send WAF logs to SIEM", + "Description": "Configure the redaction of sensitive fields and transmit Web Application Firewall (WAF) logs to the Security Information and Event Management (SIEM) system.", + "Attributes": [ + { + "Section": "WAFv2", + "Service": "WAFv2", + "Type": "Manual" + } + ], + "Checks": [] + }, + { + "Id": "Export metrics in centralized collector", + "Description": "Exporting metrics to a centralized collector for comprehensive data aggregation.", + "Attributes": [ + { + "Section": "WAFv2", + "Service": "CloudWatch", + "Type": "Automated" + } + ], + "Checks": [ + "wafv2_webacl_logging_enabled" + ] + } + ] +} diff --git a/prowler/compliance/aws/cis_2.0_aws.json b/prowler/compliance/aws/cis_2.0_aws.json index 6ea5cdad135..a89bace8106 100644 --- a/prowler/compliance/aws/cis_2.0_aws.json +++ b/prowler/compliance/aws/cis_2.0_aws.json @@ -468,27 +468,6 @@ }, { "Id": "2.1.1", - "Description": "Ensure all S3 buckets employ encryption-at-rest", - "Checks": [ - "s3_bucket_default_encryption" - ], - "Attributes": [ - { - "Section": "2.1. Simple Storage Service (S3)", - "Profile": "Level 2", - "AssessmentStatus": "Automated", - "Description": "Amazon S3 provides a variety of no, or low, cost encryption options to protect data at rest.", - "RationaleStatement": "Encrypting data at rest reduces the likelihood that it is unintentionally exposed and can nullify the impact of disclosure if the encryption remains unbroken.", - "ImpactStatement": "Amazon S3 buckets with default bucket encryption using SSE-KMS cannot be used as destination buckets for Amazon S3 server access logging. Only SSE-S3 default encryption is supported for server access log destination buckets.", - "RemediationProcedure": "**From Console:** 1. Login to AWS Management Console and open the Amazon S3 console using https://console.aws.amazon.com/s3/ 2. Select a Bucket. 3. Click on 'Properties'. 4. Click edit on `Default Encryption`. 5. Select either `AES-256`, `AWS-KMS`, `SSE-KMS` or `SSE-S3`. 6. Click `Save` 7. Repeat for all the buckets in your AWS account lacking encryption. **From Command Line:** Run either ``` aws s3api put-bucket-encryption --bucket --server-side-encryption-configuration '{\"Rules\": [{\"ApplyServerSideEncryptionByDefault\": {\"SSEAlgorithm\": \"AES256\"}}]}' ``` or ``` aws s3api put-bucket-encryption --bucket --server-side-encryption-configuration '{\"Rules\": [{\"ApplyServerSideEncryptionByDefault\": {\"SSEAlgorithm\": \"aws:kms\",\"KMSMasterKeyID\": \"aws/s3\"}}]}' ``` **Note:** the KMSMasterKeyID can be set to the master key of your choosing; aws/s3 is an AWS preconfigured default.", - "AuditProcedure": "**From Console:** 1. Login to AWS Management Console and open the Amazon S3 console using https://console.aws.amazon.com/s3/ 2. Select a Bucket. 3. Click on 'Properties'. 4. Verify that `Default Encryption` is enabled, and displays either `AES-256`, `AWS-KMS`, `SSE-KMS` or `SSE-S3`. 5. Repeat for all the buckets in your AWS account. **From Command Line:** 1. Run command to list buckets ``` aws s3 ls ``` 2. For each bucket, run ``` aws s3api get-bucket-encryption --bucket ``` 3. Verify that either ``` \"SSEAlgorithm\": \"AES256\" ``` or ``` \"SSEAlgorithm\": \"aws:kms\"``` is displayed.", - "AdditionalInformation": "S3 bucket encryption only applies to objects as they are placed in the bucket. Enabling S3 bucket encryption does **not** encrypt objects previously stored within the bucket.", - "References": "https://docs.aws.amazon.com/AmazonS3/latest/user-guide/default-bucket-encryption.html:https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html#bucket-encryption-related-resources" - } - ] - }, - { - "Id": "2.1.2", "Description": "Ensure S3 Bucket Policy is set to deny HTTP requests", "Checks": [ "s3_bucket_secure_transport_policy" @@ -509,7 +488,7 @@ ] }, { - "Id": "2.1.3", + "Id": "2.1.2", "Description": "Ensure MFA Delete is enabled on S3 buckets", "Checks": [ "s3_bucket_no_mfa_delete" @@ -530,7 +509,7 @@ ] }, { - "Id": "2.1.4", + "Id": "2.1.3", "Description": "Ensure all data in Amazon S3 has been discovered, classified and secured when required.", "Checks": [ "macie_is_enabled" @@ -551,7 +530,7 @@ ] }, { - "Id": "2.1.5", + "Id": "2.1.4", "Description": "Ensure that S3 Buckets are configured with 'Block public access (bucket settings)'", "Checks": [ "s3_bucket_level_public_access_block", diff --git a/prowler/compliance/aws/cis_3.0_aws.json b/prowler/compliance/aws/cis_3.0_aws.json new file mode 100644 index 00000000000..39bcc11b535 --- /dev/null +++ b/prowler/compliance/aws/cis_3.0_aws.json @@ -0,0 +1,1317 @@ +{ + "Framework": "CIS", + "Version": "3.0", + "Provider": "AWS", + "Description": "The CIS Amazon Web Services Foundations Benchmark provides prescriptive guidance for configuring security options for a subset of Amazon Web Services with an emphasis on foundational, testable, and architecture agnostic settings.", + "Requirements": [ + { + "Id": "1.1", + "Description": "Maintain current contact details", + "Checks": [ + "account_maintain_current_contact_details" + ], + "Attributes": [ + { + "Section": "1. Identity and Access Management", + "Profile": "Level 1", + "AssessmentStatus": "Manual", + "Description": "Ensure contact email and telephone details for AWS accounts are current and map to more than one individual in your organization. An AWS account supports a number of contact details, and AWS will use these to contact the account owner if activity judged to be in breach of Acceptable Use Policy or indicative of likely security compromise is observed by the AWS Abuse team. Contact details should not be for a single individual, as circumstances may arise where that individual is unavailable. Email contact details should point to a mail alias which forwards email to multiple individuals within the organization; where feasible, phone contact details should point to a PABX hunt group or other call-forwarding system.", + "RationaleStatement": "If an AWS account is observed to be behaving in a prohibited or suspicious manner, AWS will attempt to contact the account owner by email and phone using the contact details listed. If this is unsuccessful and the account behavior needs urgent mitigation, proactive measures may be taken, including throttling of traffic between the account exhibiting suspicious behavior and the AWS API endpoints and the Internet. This will result in impaired service to and from the account in question, so it is in both the customers' and AWS' best interests that prompt contact can be established. This is best achieved by setting AWS account contact details to point to resources which have multiple individuals as recipients, such as email aliases and PABX hunt groups.", + "ImpactStatement": "", + "RemediationProcedure": "This activity can only be performed via the AWS Console, with a user who has permission to read and write Billing information (aws-portal:*Billing ). 1. Sign in to the AWS Management Console and open the Billing and Cost Management console at https://console.aws.amazon.com/billing/home#/. 2. On the navigation bar, choose your account name, and then choose Account. 3. On the Account Settings page, next to Account Settings, choose Edit. 4. Next to the field that you need to update, choose Edit. 5. After you have entered your changes, choose Save changes. 6. After you have made your changes, choose Done. 7. To edit your contact information, under Contact Information, choose Edit. 8. For the fields that you want to change, type your updated information, and then choose Update.", + "AuditProcedure": "This activity can only be performed via the AWS Console, with a user who has permission to read and write Billing information (aws-portal:*Billing ) 1. Sign in to the AWS Management Console and open the Billing and Cost Management console at https://console.aws.amazon.com/billing/home#/. 2. On the navigation bar, choose your account name, and then choose Account. 3. On the Account Settings page, review and verify the current details. 4. Under Contact Information, review and verify the current details.", + "AdditionalInformation": "", + "References": "https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/manage-account-payment.html#contact-info" + } + ] + }, + { + "Id": "1.10", + "Description": "Ensure multi-factor authentication (MFA) is enabled for all IAM users that have a console password", + "Checks": [ + "iam_user_mfa_enabled_console_access" + ], + "Attributes": [ + { + "Section": "1. Identity and Access Management", + "Profile": "Level 1", + "AssessmentStatus": "Automated", + "Description": "Multi-Factor Authentication (MFA) adds an extra layer of authentication assurance beyond traditional credentials. With MFA enabled, when a user signs in to the AWS Console, they will be prompted for their user name and password as well as for an authentication code from their physical or virtual MFA token. It is recommended that MFA be enabled for all accounts that have a console password.", + "RationaleStatement": "Enabling MFA provides increased security for console access as it requires the authenticating principal to possess a device that displays a time-sensitive key and have knowledge of a credential.", + "ImpactStatement": "AWS will soon end support for SMS multi-factor authentication (MFA). New customers are not allowed to use this feature. We recommend that existing customers switch to one of the following alternative methods of MFA.", + "RemediationProcedure": "Perform the following to enable MFA: **From Console:** 1. Sign in to the AWS Management Console and open the IAM console at 'https://console.aws.amazon.com/iam/' 2. In the left pane, select `Users`. 3. In the `User Name` list, choose the name of the intended MFA user. 4. Choose the `Security Credentials` tab, and then choose `Manage MFA Device`. 5. In the `Manage MFA Device wizard`, choose `Virtual MFA` device, and then choose `Continue`. IAM generates and displays configuration information for the virtual MFA device, including a QR code graphic. The graphic is a representation of the 'secret configuration key' that is available for manual entry on devices that do not support QR codes. 6. Open your virtual MFA application. (For a list of apps that you can use for hosting virtual MFA devices, see Virtual MFA Applications at https://aws.amazon.com/iam/details/mfa/#Virtual_MFA_Applications). If the virtual MFA application supports multiple accounts (multiple virtual MFA devices), choose the option to create a new account (a new virtual MFA device). 7. Determine whether the MFA app supports QR codes, and then do one of the following: - Use the app to scan the QR code. For example, you might choose the camera icon or choose an option similar to Scan code, and then use the device's camera to scan the code. - In the Manage MFA Device wizard, choose Show secret key for manual configuration, and then type the secret configuration key into your MFA application. When you are finished, the virtual MFA device starts generating one-time passwords. 8. In the `Manage MFA Device wizard`, in the `MFA Code 1 box`, type the `one-time password` that currently appears in the virtual MFA device. Wait up to 30 seconds for the device to generate a new one-time password. Then type the second `one-time password` into the `MFA Code 2 box`. 9. Click `Assign MFA`.", + "AuditProcedure": "Perform the following to determine if a MFA device is enabled for all IAM users having a console password: **From Console:** 1. Open the IAM console at [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/). 2. In the left pane, select `Users` 3. If the `MFA` or `Password age` columns are not visible in the table, click the gear icon at the upper right corner of the table and ensure a checkmark is next to both, then click `Close`. 4. Ensure that for each user where the `Password age` column shows a password age, the `MFA` column shows `Virtual`, `U2F Security Key`, or `Hardware`. **From Command Line:** 1. Run the following command (OSX/Linux/UNIX) to generate a list of all IAM users along with their password and MFA status: ``` aws iam generate-credential-report ``` ``` aws iam get-credential-report --query 'Content' --output text | base64 -d | cut -d, -f1,4,8 ``` 2. The output of this command will produce a table similar to the following: ``` user,password_enabled,mfa_active elise,false,false brandon,true,true rakesh,false,false helene,false,false paras,true,true anitha,false,false ``` 3. For any column having `password_enabled` set to `true` , ensure `mfa_active` is also set to `true.`", + "AdditionalInformation": "**Forced IAM User Self-Service Remediation** Amazon has published a pattern that forces users to self-service setup MFA before they have access to their complete permissions set. Until they complete this step, they cannot access their full permissions. This pattern can be used on new AWS accounts. It can also be used on existing accounts - it is recommended users are given instructions and a grace period to accomplish MFA enrollment before active enforcement on existing AWS accounts.", + "References": "https://tools.ietf.org/html/rfc6238:https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa.html:https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#enable-mfa-for-privileged-users:https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_enable_virtual.html:https://blogs.aws.amazon.com/security/post/Tx2SJJYE082KBUK/How-to-Delegate-Management-of-Multi-Factor-Authentication-to-AWS-IAM-Users" + } + ] + }, + { + "Id": "1.11", + "Description": "Do not setup access keys during initial user setup for all IAM users that have a console password", + "Checks": [ + "iam_user_no_setup_initial_access_key" + ], + "Attributes": [ + { + "Section": "1. Identity and Access Management", + "Profile": "Level 1", + "AssessmentStatus": "Automated", + "Description": "AWS console defaults to no check boxes selected when creating a new IAM user. When cerating the IAM User credentials you have to determine what type of access they require. Programmatic access: The IAM user might need to make API calls, use the AWS CLI, or use the Tools for Windows PowerShell. In that case, create an access key (access key ID and a secret access key) for that user. AWS Management Console access: If the user needs to access the AWS Management Console, create a password for the user.", + "RationaleStatement": "Requiring the additional steps be taken by the user for programmatic access after their profile has been created will give a stronger indication of intent that access keys are [a] necessary for their work and [b] once the access key is established on an account that the keys may be in use somewhere in the organization. **Note**: Even if it is known the user will need access keys, require them to create the keys themselves or put in a support ticket to have them created as a separate step from user creation.", + "ImpactStatement": "", + "RemediationProcedure": "Perform the following to delete access keys that do not pass the audit: **From Console:** 1. Login to the AWS Management Console: 2. Click `Services` 3. Click `IAM` 4. Click on `Users` 5. Click on `Security Credentials` 6. As an Administrator - Click on the X `(Delete)` for keys that were created at the same time as the user profile but have not been used. 7. As an IAM User - Click on the X `(Delete)` for keys that were created at the same time as the user profile but have not been used. **From Command Line:** ``` aws iam delete-access-key --access-key-id --user-name ```", + "AuditProcedure": "Perform the following to determine if access keys were created upon user creation and are being used and rotated as prescribed: **From Console:** 1. Login to the AWS Management Console 2. Click `Services` 3. Click `IAM` 4. Click on a User where column `Password age` and `Access key age` is not set to `None` 5. Click on `Security credentials` Tab 6. Compare the user 'Creation time` to the Access Key `Created` date. 6. For any that match, the key was created during initial user setup. - Keys that were created at the same time as the user profile and do not have a last used date should be deleted. Refer to the remediation below. **From Command Line:** 1. Run the following command (OSX/Linux/UNIX) to generate a list of all IAM users along with their access keys utilization: ``` aws iam generate-credential-report ``` ``` aws iam get-credential-report --query 'Content' --output text | base64 -d | cut -d, -f1,4,9,11,14,16 ``` 2. The output of this command will produce a table similar to the following: ``` user,password_enabled,access_key_1_active,access_key_1_last_used_date,access_key_2_active,access_key_2_last_used_date elise,false,true,2015-04-16T15:14:00+00:00,false,N/A brandon,true,true,N/A,false,N/A rakesh,false,false,N/A,false,N/A helene,false,true,2015-11-18T17:47:00+00:00,false,N/A paras,true,true,2016-08-28T12:04:00+00:00,true,2016-03-04T10:11:00+00:00 anitha,true,true,2016-06-08T11:43:00+00:00,true,N/A ``` 3. For any user having `password_enabled` set to `true` AND `access_key_last_used_date` set to `N/A` refer to the remediation below.", + "AdditionalInformation": "Credential report does not appear to contain \"Key Creation Date\"", + "References": "https://docs.aws.amazon.com/cli/latest/reference/iam/delete-access-key.html:https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html" + } + ] + }, + { + "Id": "1.12", + "Description": "Ensure credentials unused for 45 days or greater are disabled", + "Checks": [ + "iam_user_accesskey_unused", + "iam_user_console_access_unused" + ], + "Attributes": [ + { + "Section": "1. Identity and Access Management", + "Profile": "Level 1", + "AssessmentStatus": "Automated", + "Description": "AWS IAM users can access AWS resources using different types of credentials, such as passwords or access keys. It is recommended that all credentials that have been unused in 45 or greater days be deactivated or removed.", + "RationaleStatement": "Disabling or removing unnecessary credentials will reduce the window of opportunity for credentials associated with a compromised or abandoned account to be used.", + "ImpactStatement": "", + "RemediationProcedure": "**From Console:** Perform the following to manage Unused Password (IAM user console access) 1. Login to the AWS Management Console: 2. Click `Services` 3. Click `IAM` 4. Click on `Users` 5. Click on `Security Credentials` 6. Select user whose `Console last sign-in` is greater than 45 days 7. Click `Security credentials` 8. In section `Sign-in credentials`, `Console password` click `Manage` 9. Under Console Access select `Disable` 10.Click `Apply` Perform the following to deactivate Access Keys: 1. Login to the AWS Management Console: 2. Click `Services` 3. Click `IAM` 4. Click on `Users` 5. Click on `Security Credentials` 6. Select any access keys that are over 45 days old and that have been used and - Click on `Make Inactive` 7. Select any access keys that are over 45 days old and that have not been used and - Click the X to `Delete`", + "AuditProcedure": "Perform the following to determine if unused credentials exist: **From Console:** 1. Login to the AWS Management Console 2. Click `Services` 3. Click `IAM` 4. Click on `Users` 5. Click the `Settings` (gear) icon. 6. Select `Console last sign-in`, `Access key last used`, and `Access Key Id` 7. Click on `Close` 8. Check and ensure that `Console last sign-in` is less than 45 days ago. **Note** - `Never` means the user has never logged in. 9. Check and ensure that `Access key age` is less than 45 days and that `Access key last used` does not say `None` If the user hasn't signed into the Console in the last 45 days or Access keys are over 45 days old refer to the remediation. **From Command Line:** **Download Credential Report:** 1. Run the following commands: ``` aws iam generate-credential-report aws iam get-credential-report --query 'Content' --output text | base64 -d | cut -d, -f1,4,5,6,9,10,11,14,15,16 | grep -v '^' ``` **Ensure unused credentials do not exist:** 2. For each user having `password_enabled` set to `TRUE` , ensure `password_last_used_date` is less than `45` days ago. - When `password_enabled` is set to `TRUE` and `password_last_used` is set to `No_Information` , ensure `password_last_changed` is less than 45 days ago. 3. For each user having an `access_key_1_active` or `access_key_2_active` to `TRUE` , ensure the corresponding `access_key_n_last_used_date` is less than `45` days ago. - When a user having an `access_key_x_active` (where x is 1 or 2) to `TRUE` and corresponding access_key_x_last_used_date is set to `N/A', ensure `access_key_x_last_rotated` is less than 45 days ago.", + "AdditionalInformation": " is excluded in the audit since the root account should not be used for day to day business and would likely be unused for more than 45 days.", + "References": "https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#remove-credentials:https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_finding-unused.html:https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_passwords_admin-change-user.html:https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html" + } + ] + }, + { + "Id": "1.13", + "Description": "Ensure there is only one active access key available for any single IAM user", + "Checks": [ + "iam_user_two_active_access_key" + ], + "Attributes": [ + { + "Section": "1. Identity and Access Management", + "Profile": "Level 1", + "AssessmentStatus": "Automated", + "Description": "Access keys are long-term credentials for an IAM user or the AWS account 'root' user. You can use access keys to sign programmatic requests to the AWS CLI or AWS API (directly or using the AWS SDK)", + "RationaleStatement": "Access keys are long-term credentials for an IAM user or the AWS account 'root' user. You can use access keys to sign programmatic requests to the AWS CLI or AWS API. One of the best ways to protect your account is to not allow users to have multiple access keys.", + "ImpactStatement": "", + "RemediationProcedure": "**From Console:** 1. Sign in to the AWS Management Console and navigate to IAM dashboard at `https://console.aws.amazon.com/iam/`. 2. In the left navigation panel, choose `Users`. 3. Click on the IAM user name that you want to examine. 4. On the IAM user configuration page, select `Security Credentials` tab. 5. In `Access Keys` section, choose one access key that is less than 90 days old. This should be the only active key used by this IAM user to access AWS resources programmatically. Test your application(s) to make sure that the chosen access key is working. 6. In the same `Access Keys` section, identify your non-operational access keys (other than the chosen one) and deactivate it by clicking the `Make Inactive` link. 7. If you receive the `Change Key Status` confirmation box, click `Deactivate` to switch off the selected key. 8. Repeat steps no. 3 – 7 for each IAM user in your AWS account. **From Command Line:** 1. Using the IAM user and access key information provided in the `Audit CLI`, choose one access key that is less than 90 days old. This should be the only active key used by this IAM user to access AWS resources programmatically. Test your application(s) to make sure that the chosen access key is working. 2. Run the `update-access-key` command below using the IAM user name and the non-operational access key IDs to deactivate the unnecessary key(s). Refer to the Audit section to identify the unnecessary access key ID for the selected IAM user **Note** - the command does not return any output: ``` aws iam update-access-key --access-key-id --status Inactive --user-name ``` 3. To confirm that the selected access key pair has been successfully `deactivated` run the `list-access-keys` audit command again for that IAM User: ``` aws iam list-access-keys --user-name ``` - The command output should expose the metadata for each access key associated with the IAM user. If the non-operational key pair(s) `Status` is set to `Inactive`, the key has been successfully deactivated and the IAM user access configuration adheres now to this recommendation. 4. Repeat steps no. 1 – 3 for each IAM user in your AWS account.", + "AuditProcedure": "**From Console:** 1. Sign in to the AWS Management Console and navigate to IAM dashboard at `https://console.aws.amazon.com/iam/`. 2. In the left navigation panel, choose `Users`. 3. Click on the IAM user name that you want to examine. 4. On the IAM user configuration page, select `Security Credentials` tab. 5. Under `Access Keys` section, in the Status column, check the current status for each access key associated with the IAM user. If the selected IAM user has more than one access key activated then the users access configuration does not adhere to security best practices and the risk of accidental exposures increases. - Repeat steps no. 3 – 5 for each IAM user in your AWS account. **From Command Line:** 1. Run `list-users` command to list all IAM users within your account: ``` aws iam list-users --query \"Users[*].UserName\" ``` The command output should return an array that contains all your IAM user names. 2. Run `list-access-keys` command using the IAM user name list to return the current status of each access key associated with the selected IAM user: ``` aws iam list-access-keys --user-name ``` The command output should expose the metadata `(\"Username\", \"AccessKeyId\", \"Status\", \"CreateDate\")` for each access key on that user account. 3. Check the `Status` property value for each key returned to determine each keys current state. If the `Status` property value for more than one IAM access key is set to `Active`, the user access configuration does not adhere to this recommendation, refer to the remediation below. - Repeat steps no. 2 and 3 for each IAM user in your AWS account.", + "AdditionalInformation": "", + "References": "https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html" + } + ] + }, + { + "Id": "1.14", + "Description": "Ensure access keys are rotated every 90 days or less", + "Checks": [ + "iam_rotate_access_key_90_days" + ], + "Attributes": [ + { + "Section": "1. Identity and Access Management", + "Profile": "Level 1", + "AssessmentStatus": "Automated", + "Description": "Access keys consist of an access key ID and secret access key, which are used to sign programmatic requests that you make to AWS. AWS users need their own access keys to make programmatic calls to AWS from the AWS Command Line Interface (AWS CLI), Tools for Windows PowerShell, the AWS SDKs, or direct HTTP calls using the APIs for individual AWS services. It is recommended that all access keys be regularly rotated.", + "RationaleStatement": "Rotating access keys will reduce the window of opportunity for an access key that is associated with a compromised or terminated account to be used. Access keys should be rotated to ensure that data cannot be accessed with an old key which might have been lost, cracked, or stolen.", + "ImpactStatement": "", + "RemediationProcedure": "Perform the following to rotate access keys: **From Console:** 1. Go to Management Console (https://console.aws.amazon.com/iam) 2. Click on `Users` 3. Click on `Security Credentials` 4. As an Administrator - Click on `Make Inactive` for keys that have not been rotated in `90` Days 5. As an IAM User - Click on `Make Inactive` or `Delete` for keys which have not been rotated or used in `90` Days 6. Click on `Create Access Key` 7. Update programmatic call with new Access Key credentials **From Command Line:** 1. While the first access key is still active, create a second access key, which is active by default. Run the following command: ``` aws iam create-access-key ``` At this point, the user has two active access keys. 2. Update all applications and tools to use the new access key. 3. Determine whether the first access key is still in use by using this command: ``` aws iam get-access-key-last-used ``` 4. One approach is to wait several days and then check the old access key for any use before proceeding. Even if step Step 3 indicates no use of the old key, it is recommended that you do not immediately delete the first access key. Instead, change the state of the first access key to Inactive using this command: ``` aws iam update-access-key ``` 5. Use only the new access key to confirm that your applications are working. Any applications and tools that still use the original access key will stop working at this point because they no longer have access to AWS resources. If you find such an application or tool, you can switch its state back to Active to reenable the first access key. Then return to step Step 2 and update this application to use the new key. 6. After you wait some period of time to ensure that all applications and tools have been updated, you can delete the first access key with this command: ``` aws iam delete-access-key ```", + "AuditProcedure": "Perform the following to determine if access keys are rotated as prescribed: **From Console:** 1. Go to Management Console (https://console.aws.amazon.com/iam) 2. Click on `Users` 3. Click `setting` icon 4. Select `Console last sign-in` 5. Click `Close` 6. Ensure that `Access key age` is less than 90 days ago. note) `None` in the `Access key age` means the user has not used the access key. **From Command Line:** ``` aws iam generate-credential-report aws iam get-credential-report --query 'Content' --output text | base64 -d ``` The `access_key_1_last_rotated` field in this file notes The date and time, in ISO 8601 date-time format, when the user's access key was created or last changed. If the user does not have an active access key, the value in this field is N/A (not applicable).", + "AdditionalInformation": "", + "References": "https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#rotate-credentials:https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_finding-unused.html:https://docs.aws.amazon.com/general/latest/gr/managing-aws-access-keys.html:https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html" + } + ] + }, + { + "Id": "1.15", + "Description": "Ensure IAM Users Receive Permissions Only Through Groups", + "Checks": [ + "iam_policy_attached_only_to_group_or_roles" + ], + "Attributes": [ + { + "Section": "1. Identity and Access Management", + "Profile": "Level 1", + "AssessmentStatus": "Automated", + "Description": "IAM users are granted access to services, functions, and data through IAM policies. There are three ways to define policies for a user: 1) Edit the user policy directly, aka an inline, or user, policy; 2) attach a policy directly to a user; 3) add the user to an IAM group that has an attached policy. Only the third implementation is recommended.", + "RationaleStatement": "Assigning IAM policy only through groups unifies permissions management to a single, flexible layer consistent with organizational functional roles. By unifying permissions management, the likelihood of excessive permissions is reduced.", + "ImpactStatement": "", + "RemediationProcedure": "Perform the following to create an IAM group and assign a policy to it: 1. Sign in to the AWS Management Console and open the IAM console at [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/). 2. In the navigation pane, click `Groups` and then click `Create New Group` . 3. In the `Group Name` box, type the name of the group and then click `Next Step` . 4. In the list of policies, select the check box for each policy that you want to apply to all members of the group. Then click `Next Step` . 5. Click `Create Group` Perform the following to add a user to a given group: 1. Sign in to the AWS Management Console and open the IAM console at [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/). 2. In the navigation pane, click `Groups` 3. Select the group to add a user to 4. Click `Add Users To Group` 5. Select the users to be added to the group 6. Click `Add Users` Perform the following to remove a direct association between a user and policy: 1. Sign in to the AWS Management Console and open the IAM console at [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/). 2. In the left navigation pane, click on Users 3. For each user: - Select the user - Click on the `Permissions` tab - Expand `Permissions policies` - Click `X` for each policy; then click Detach or Remove (depending on policy type)", + "AuditProcedure": "Perform the following to determine if an inline policy is set or a policy is directly attached to users: 1. Run the following to get a list of IAM users: ``` aws iam list-users --query 'Users[*].UserName' --output text ``` 2. For each user returned, run the following command to determine if any policies are attached to them: ``` aws iam list-attached-user-policies --user-name aws iam list-user-policies --user-name ``` 3. If any policies are returned, the user has an inline policy or direct policy attachment.", + "AdditionalInformation": "", + "References": "http://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html:http://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html" + } + ] + }, + { + "Id": "1.16", + "Description": "Ensure IAM policies that allow full \"*:*\" administrative privileges are not attached", + "Checks": [ + "iam_aws_attached_policy_no_administrative_privileges", + "iam_customer_attached_policy_no_administrative_privileges" + ], + "Attributes": [ + { + "Section": "1. Identity and Access Management", + "Profile": "Level 1", + "AssessmentStatus": "Automated", + "Description": "IAM policies are the means by which privileges are granted to users, groups, or roles. It is recommended and considered a standard security advice to grant _least privilege_ -that is, granting only the permissions required to perform a task. Determine what users need to do and then craft policies for them that let the users perform _only_ those tasks, instead of allowing full administrative privileges.", + "RationaleStatement": "It's more secure to start with a minimum set of permissions and grant additional permissions as necessary, rather than starting with permissions that are too lenient and then trying to tighten them later. Providing full administrative privileges instead of restricting to the minimum set of permissions that the user is required to do exposes the resources to potentially unwanted actions. IAM policies that have a statement with \"Effect\": \"Allow\" with \"Action\": \"\\*\" over \"Resource\": \"\\*\" should be removed.", + "ImpactStatement": "", + "RemediationProcedure": "From Console: Perform the following to detach the policy that has full administrative privileges: 1. Sign in to the AWS Management Console and open the IAM console at https://console.aws.amazon.com/iam/. 2. In the navigation pane, click Policies and then search for the policy name found in the audit step. 3. Select the policy that needs to be deleted. 4. In the policy action menu, select first Detach 5. Select all Users, Groups, Roles that have this policy attached 6. Click Detach Policy 7. In the policy action menu, select Detach 8. Select the newly detached policy and select Delete From Command Line: Perform the following to detach the policy that has full administrative privileges as found in the audit step: 1. Lists all IAM users, groups, and roles that the specified managed policy is attached to. aws iam list-entities-for-policy --policy-arn 2. Detach the policy from all IAM Users: aws iam detach-user-policy --user-name --policy-arn 3. Detach the policy from all IAM Groups: aws iam detach-group-policy --group-name --policy-arn 4. Detach the policy from all IAM Roles: aws iam detach-role-policy --role-name --policy-arn ", + "AuditProcedure": "Perform the following to determine what policies are created: **From Command Line:** 1. Run the following to get a list of IAM policies: ``` aws iam list-policies --only-attached --output text ``` 2. For each policy returned, run the following command to determine if any policies is allowing full administrative privileges on the account: ``` aws iam get-policy-version --policy-arn --version-id ``` 3. In output ensure policy should not have any Statement block with `\"Effect\": \"Allow\"` and `Action` set to `\"*\"` and `Resource` set to `\"*\"`", + "AdditionalInformation": "", + "References": "https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html:https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html:https://docs.aws.amazon.com/cli/latest/reference/iam/index.html#cli-aws-iam" + } + ] + }, + { + "Id": "1.17", + "Description": "Ensure a support role has been created to manage incidents with AWS Support", + "Checks": [ + "iam_support_role_created" + ], + "Attributes": [ + { + "Section": "1. Identity and Access Management", + "Profile": "Level 1", + "AssessmentStatus": "Automated", + "Description": "AWS provides a support center that can be used for incident notification and response, as well as technical support and customer services. Create an IAM Role to allow authorized users to manage incidents with AWS Support.", + "RationaleStatement": "By implementing least privilege for access control, an IAM Role will require an appropriate IAM Policy to allow Support Center Access in order to manage Incidents with AWS Support.", + "ImpactStatement": "All AWS Support plans include an unlimited number of account and billing supportcases, with no long-term contracts. Support billing calculations are performed on a per-account basis for all plans. Enterprise Support plan customers have the option toinclude multiple enabled accounts in an aggregated monthly billing calculation. Monthlycharges for the Business and Enterprise support plans are based on each month's AWSusage charges, subject to a monthly minimum, billed in advance.When assigning rights, keep in mind that other policies may grant access to Support aswell. This may include AdministratorAccess and other policies including customermanaged policies. Utilizing the AWS managed 'AWSSupportAccess' role is one simpleway of ensuring that this permission is properly granted.To better support the principle of separation of duties, it would be best to only attach thisrole where necessary.", + "RemediationProcedure": "**From Command Line:** 1. Create an IAM role for managing incidents with AWS: - Create a trust relationship policy document that allows to manage AWS incidents, and save it locally as /tmp/TrustPolicy.json: ``` { \"Version\": \"2012-10-17\", \"Statement\": [ { \"Effect\": \"Allow\", \"Principal\": { \"AWS\": \"\" }, \"Action\": \"sts:AssumeRole\" } ] } ``` 2. Create the IAM role using the above trust policy: ``` aws iam create-role --role-name --assume-role-policy-document file:///tmp/TrustPolicy.json ``` 3. Attach 'AWSSupportAccess' managed policy to the created IAM role: ``` aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AWSSupportAccess --role-name ```", + "AuditProcedure": "**From Command Line:** 1. List IAM policies, filter for the 'AWSSupportAccess' managed policy, and note the \"Arn\" element value: ``` aws iam list-policies --query \"Policies[?PolicyName == 'AWSSupportAccess']\" ``` 2. Check if the 'AWSSupportAccess' policy is attached to any role: ``` aws iam list-entities-for-policy --policy-arn arn:aws:iam::aws:policy/AWSSupportAccess ``` 3. In Output, Ensure `PolicyRoles` does not return empty. 'Example: Example: PolicyRoles: [ ]' If it returns empty refer to the remediation below.", + "AdditionalInformation": "AWSSupportAccess policy is a global AWS resource. It has same ARN as `arn:aws:iam::aws:policy/AWSSupportAccess` for every account.", + "References": "https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html:https://aws.amazon.com/premiumsupport/pricing/:https://docs.aws.amazon.com/cli/latest/reference/iam/list-policies.html:https://docs.aws.amazon.com/cli/latest/reference/iam/attach-role-policy.html:https://docs.aws.amazon.com/cli/latest/reference/iam/list-entities-for-policy.html" + } + ] + }, + { + "Id": "1.18", + "Description": "Ensure IAM instance roles are used for AWS resource access from instances", + "Checks": [ + "ec2_instance_profile_attached" + ], + "Attributes": [ + { + "Section": "1. Identity and Access Management", + "Profile": "Level 2", + "AssessmentStatus": "Manual", + "Description": "AWS access from within AWS instances can be done by either encoding AWS keys into AWS API calls or by assigning the instance to a role which has an appropriate permissions policy for the required access. \"AWS Access\" means accessing the APIs of AWS in order to access AWS resources or manage AWS account resources.", + "RationaleStatement": "AWS IAM roles reduce the risks associated with sharing and rotating credentials that can be used outside of AWS itself. If credentials are compromised, they can be used from outside of the AWS account they give access to. In contrast, in order to leverage role permissions an attacker would need to gain and maintain access to a specific instance to use the privileges associated with it. Additionally, if credentials are encoded into compiled applications or other hard to change mechanisms, then they are even more unlikely to be properly rotated due to service disruption risks. As time goes on, credentials that cannot be rotated are more likely to be known by an increasing number of individuals who no longer work for the organization owning the credentials.", + "ImpactStatement": "", + "RemediationProcedure": "IAM roles can only be associated at the launch of an instance. To remediate an instance to add it to a role you must create a new instance. If the instance has no external dependencies on its current private ip or public addresses are elastic IPs: 1. In AWS IAM create a new role. Assign a permissions policy if needed permissions are already known. 2. In the AWS console launch a new instance with identical settings to the existing instance, and ensure that the newly created role is selected. 3. Shutdown both the existing instance and the new instance. 4. Detach disks from both instances. 5. Attach the existing instance disks to the new instance. 6. Boot the new instance and you should have the same machine, but with the associated role. **Note:** if your environment has dependencies on a dynamically assigned PRIVATE IP address you can create an AMI from the existing instance, destroy the old one and then when launching from the AMI, manually assign the previous private IP address. **Note: **if your environment has dependencies on a dynamically assigned PUBLIC IP address there is not a way ensure the address is retained and assign an instance role. Dependencies on dynamically assigned public IP addresses are a bad practice and, if possible, you may wish to rebuild the instance with a new elastic IP address and make the investment to remediate affected systems while assigning the system to a role.", + "AuditProcedure": "Where an instance is associated with a Role: For instances that are known to perform AWS actions, ensure that they belong to an instance role that has the necessary permissions: 1. Login to AWS Console (with appropriate permissions to View Identity Access Management Account Settings) 2. Open the EC2 Dashboard and choose \"Instances\" 3. Click the EC2 instance that performs AWS actions, in the lower pane details find \"IAM Role\" 4. If the Role is blank, the instance is not assigned to one. 5. If the Role is filled in, it does not mean the instance might not \\*also\\* have credentials encoded on it for some activities. Where an Instance Contains Embedded Credentials: - On the instance that is known to perform AWS actions, audit all scripts and environment variables to ensure that none of them contain AWS credentials. Where an Instance Application Contains Embedded Credentials: - Applications that run on an instance may also have credentials embedded. This is a bad practice, but even worse if the source code is stored in a public code repository such as github. When an application contains credentials can be determined by eliminating all other sources of credentials and if the application can still access AWS resources - it likely contains embedded credentials. Another method is to examine all source code and configuration files of the application.", + "AdditionalInformation": "", + "References": "https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html" + } + ] + }, + { + "Id": "1.19", + "Description": "Ensure that all the expired SSL/TLS certificates stored in AWS IAM are removed", + "Checks": [ + "iam_no_expired_server_certificates_stored" + ], + "Attributes": [ + { + "Section": "1. Identity and Access Management", + "Profile": "Level 1", + "AssessmentStatus": "Automated", + "Description": "To enable HTTPS connections to your website or application in AWS, you need an SSL/TLS server certificate. You can use ACM or IAM to store and deploy server certificates. Use IAM as a certificate manager only when you must support HTTPS connections in a region that is not supported by ACM. IAM securely encrypts your private keys and stores the encrypted version in IAM SSL certificate storage. IAM supports deploying server certificates in all regions, but you must obtain your certificate from an external provider for use with AWS. You cannot upload an ACM certificate to IAM. Additionally, you cannot manage your certificates from the IAM Console.", + "RationaleStatement": "Removing expired SSL/TLS certificates eliminates the risk that an invalid certificate will be deployed accidentally to a resource such as AWS Elastic Load Balancer (ELB), which can damage the credibility of the application/website behind the ELB. As a best practice, it is recommended to delete expired certificates.", + "ImpactStatement": "Deleting the certificate could have implications for your application if you are using an expired server certificate with Elastic Load Balancing, CloudFront, etc. One has to make configurations at respective services to ensure there is no interruption in application functionality.", + "RemediationProcedure": "**From Console:** Removing expired certificates via AWS Management Console is not currently supported. To delete SSL/TLS certificates stored in IAM via the AWS API use the Command Line Interface (CLI). **From Command Line:** To delete Expired Certificate run following command by replacing with the name of the certificate to delete: ``` aws iam delete-server-certificate --server-certificate-name ``` When the preceding command is successful, it does not return any output.", + "AuditProcedure": "**From Console:** Getting the certificates expiration information via AWS Management Console is not currently supported. To request information about the SSL/TLS certificates stored in IAM via the AWS API use the Command Line Interface (CLI). **From Command Line:** Run list-server-certificates command to list all the IAM-stored server certificates: ``` aws iam list-server-certificates ``` The command output should return an array that contains all the SSL/TLS certificates currently stored in IAM and their metadata (name, ID, expiration date, etc): ``` { \"ServerCertificateMetadataList\": [ { \"ServerCertificateId\": \"EHDGFRW7EJFYTE88D\", \"ServerCertificateName\": \"MyServerCertificate\", \"Expiration\": \"2018-07-10T23:59:59Z\", \"Path\": \"/\", \"Arn\": \"arn:aws:iam::012345678910:server-certificate/MySSLCertificate\", \"UploadDate\": \"2018-06-10T11:56:08Z\" } ] } ``` Verify the `ServerCertificateName` and `Expiration` parameter value (expiration date) for each SSL/TLS certificate returned by the list-server-certificates command and determine if there are any expired server certificates currently stored in AWS IAM. If so, use the AWS API to remove them. If this command returns: ``` { { \"ServerCertificateMetadataList\": [] } ``` This means that there are no expired certificates, It DOES NOT mean that no certificates exist.", + "AdditionalInformation": "", + "References": "https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html:https://docs.aws.amazon.com/cli/latest/reference/iam/delete-server-certificate.html" + } + ] + }, + { + "Id": "1.2", + "Description": "Ensure security contact information is registered", + "Checks": [ + "account_security_contact_information_is_registered" + ], + "Attributes": [ + { + "Section": "1. Identity and Access Management", + "Profile": "Level 1", + "AssessmentStatus": "Manual", + "Description": "AWS provides customers with the option of specifying the contact information for account's security team. It is recommended that this information be provided.", + "RationaleStatement": "Specifying security-specific contact information will help ensure that security advisories sent by AWS reach the team in your organization that is best equipped to respond to them.", + "ImpactStatement": "", + "RemediationProcedure": "Perform the following to establish security contact information: **From Console:** 1. Click on your account name at the top right corner of the console. 2. From the drop-down menu Click `My Account` 3. Scroll down to the `Alternate Contacts` section 4. Enter contact information in the `Security` section **Note:** Consider specifying an internal email distribution list to ensure emails are regularly monitored by more than one individual.", + "AuditProcedure": "Perform the following to determine if security contact information is present: **From Console:** 1. Click on your account name at the top right corner of the console 2. From the drop-down menu Click `My Account` 3. Scroll down to the `Alternate Contacts` section 4. Ensure contact information is specified in the `Security` section", + "AdditionalInformation": "", + "References": "" + } + ] + }, + { + "Id": "1.20", + "Description": "Ensure that IAM Access analyzer is enabled for all regions", + "Checks": [ + "accessanalyzer_enabled" + ], + "Attributes": [ + { + "Section": "1. Identity and Access Management", + "Profile": "Level 1", + "AssessmentStatus": "Automated", + "Description": "Enable IAM Access analyzer for IAM policies about all resources in each region. IAM Access Analyzer is a technology introduced at AWS reinvent 2019. After the Analyzer is enabled in IAM, scan results are displayed on the console showing the accessible resources. Scans show resources that other accounts and federated users can access, such as KMS keys and IAM roles. So the results allow you to determine if an unintended user is allowed, making it easier for administrators to monitor least privileges access. Access Analyzer analyzes only policies that are applied to resources in the same AWS Region.", + "RationaleStatement": "AWS IAM Access Analyzer helps you identify the resources in your organization and accounts, such as Amazon S3 buckets or IAM roles, that are shared with an external entity. This lets you identify unintended access to your resources and data. Access Analyzer identifies resources that are shared with external principals by using logic-based reasoning to analyze the resource-based policies in your AWS environment. IAM Access Analyzer continuously monitors all policies for S3 bucket, IAM roles, KMS(Key Management Service) keys, AWS Lambda functions, and Amazon SQS(Simple Queue Service) queues.", + "ImpactStatement": "", + "RemediationProcedure": "**From Console:** Perform the following to enable IAM Access analyzer for IAM policies: 1. Open the IAM console at `https://console.aws.amazon.com/iam/.` 2. Choose `Access analyzer`. 3. Choose `Create analyzer`. 4. On the `Create analyzer` page, confirm that the `Region` displayed is the Region where you want to enable Access Analyzer. 5. Enter a name for the analyzer. `Optional as it will generate a name for you automatically`. 6. Add any tags that you want to apply to the analyzer. `Optional`. 7. Choose `Create Analyzer`. 8. Repeat these step for each active region **From Command Line:** Run the following command: ``` aws accessanalyzer create-analyzer --analyzer-name --type ``` Repeat this command above for each active region. **Note:** The IAM Access Analyzer is successfully configured only when the account you use has the necessary permissions.", + "AuditProcedure": "**From Console:** 1. Open the IAM console at `https://console.aws.amazon.com/iam/` 2. Choose `Access analyzer` 3. Click 'Analyzers' 4. Ensure that at least one analyzer is present 5. Ensure that the `STATUS` is set to `Active` 6. Repeat these step for each active region **From Command Line:** 1. Run the following command: ``` aws accessanalyzer list-analyzers | grep status ``` 2. Ensure that at least one Analyzer the `status` is set to `ACTIVE` 3. Repeat the steps above for each active region. If an Access analyzer is not listed for each region or the status is not set to active refer to the remediation procedure below.", + "AdditionalInformation": "", + "References": "https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html:https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-getting-started.html:https://docs.aws.amazon.com/cli/latest/reference/accessanalyzer/get-analyzer.html:https://docs.aws.amazon.com/cli/latest/reference/accessanalyzer/create-analyzer.html" + } + ] + }, + { + "Id": "1.21", + "Description": "Ensure IAM users are managed centrally via identity federation or AWS Organizations for multi-account environments", + "Checks": [ + "iam_check_saml_providers_sts" + ], + "Attributes": [ + { + "Section": "1. Identity and Access Management", + "Profile": "Level 2", + "AssessmentStatus": "Manual", + "Description": "In multi-account environments, IAM user centralization facilitates greater user control. User access beyond the initial account is then provided via role assumption. Centralization of users can be accomplished through federation with an external identity provider or through the use of AWS Organizations.", + "RationaleStatement": "Centralizing IAM user management to a single identity store reduces complexity and thus the likelihood of access management errors.", + "ImpactStatement": "", + "RemediationProcedure": "The remediation procedure will vary based on the individual organization's implementation of identity federation and/or AWS Organizations with the acceptance criteria that no non-service IAM users, and non-root accounts, are present outside the account providing centralized IAM user management.", + "AuditProcedure": "For multi-account AWS environments with an external identity provider: 1. Determine the master account for identity federation or IAM user management 2. Login to that account through the AWS Management Console 3. Click Services 4. Click IAM 5. Click Identity providers 6. Verify the configuration Then, determine all accounts that should not have local users present. For each account: 1. Determine all accounts that should not have local users present 2. Log into the AWS Management Console 3. Switch role into each identified account 4. Click Services 5. Click IAM 6. Click Users 7. Confirm that no IAM users representing individuals are present For multi-account AWS environments implementing AWS Organizations without an external identity provider: 1. Determine all accounts that should not have local users present 2. Log into the AWS Management Console 3. Switch role into each identified account 4. Click Services 5. Click IAM 6. Click Users 7. Confirm that no IAM users representing individuals are present", + "AdditionalInformation": "", + "References": "" + } + ] + }, + { + "Id": "1.22", + "Description": "Ensure access to AWSCloudShellFullAccess is restricted", + "Checks": [], + "Attributes": [ + { + "Section": "1. Identity and Access Management", + "Profile": "Level 1", + "AssessmentStatus": "Manual", + "Description": "AWS CloudShell is a convenient way of running CLI commands against AWS services; a managed IAM policy ('AWSCloudShellFullAccess') provides full access to CloudShell, which allows file upload and download capability between a user's local system and the CloudShell environment. Within the CloudShell environment a user has sudo permissions, and can access the internet. So it is feasible to install file transfer software (for example) and move data from CloudShell to external internet servers.", + "RationaleStatement": "Access to this policy should be restricted as it presents a potential channel for data exfiltration by malicious cloud admins that are given full permissions to the service. AWS documentation describes how to create a more restrictive IAM policy which denies file transfer permissions.", + "ImpactStatement": "", + "RemediationProcedure": "**From Console** 1. Open the IAM console at https://console.aws.amazon.com/iam/ 2. In the left pane, select Policies 3. Search for and select AWSCloudShellFullAccess 4. On the Entities attached tab, for each item, check the box and select Detach", + "AuditProcedure": "**From Console** 1. Open the IAM console at https://console.aws.amazon.com/iam/ 2. In the left pane, select Policies 3. Search for and select AWSCloudShellFullAccess 4. On the Entities attached tab, ensure that there are no entities using this policy **From Command Line** 1. List IAM policies, filter for the 'AWSCloudShellFullAccess' managed policy, and note the \"\"Arn\"\" element value: ``` aws iam list-policies --query \"\"Policies[?PolicyName == 'AWSCloudShellFullAccess']\"\" ``` 2. Check if the 'AWSCloudShellFullAccess' policy is attached to any role: ``` aws iam list-entities-for-policy --policy-arn arn:aws:iam::aws:policy/AWSCloudShellFullAccess ``` 3. In Output, Ensure PolicyRoles returns empty. 'Example: Example: PolicyRoles: [ ]' If it does not return empty refer to the remediation below. Note: Keep in mind that other policies may grant access.", + "AdditionalInformation": "", + "References": "https://docs.aws.amazon.com/cloudshell/latest/userguide/sec-auth-with-identities.html" + } + ] + }, + { + "Id": "1.3", + "Description": "Ensure security questions are registered in the AWS account", + "Checks": [ + "account_security_questions_are_registered_in_the_aws_account" + ], + "Attributes": [ + { + "Section": "1. Identity and Access Management", + "Profile": "Level 1", + "AssessmentStatus": "Manual", + "Description": "The AWS support portal allows account owners to establish security questions that can be used to authenticate individuals calling AWS customer service for support. It is recommended that security questions be established.", + "RationaleStatement": "When creating a new AWS account, a default super user is automatically created. This account is referred to as the 'root user' or 'root' account. It is recommended that the use of this account be limited and highly controlled. During events in which the 'root' password is no longer accessible or the MFA token associated with 'root' is lost/destroyed it is possible, through authentication using secret questions and associated answers, to recover 'root' user login access.", + "ImpactStatement": "", + "RemediationProcedure": "**From Console:** 1. Login to the AWS Account as the 'root' user 2. Click on the __ from the top right of the console 3. From the drop-down menu Click _My Account_ 4. Scroll down to the `Configure Security Questions` section 5. Click on `Edit` 6. Click on each `Question` - From the drop-down select an appropriate question - Click on the `Answer` section - Enter an appropriate answer - Follow process for all 3 questions 7. Click `Update` when complete 8. Save Questions and Answers and place in a secure physical location", + "AuditProcedure": "**From Console:** 1. Login to the AWS account as the 'root' user 2. On the top right you will see the __ 3. Click on the __ 4. From the drop-down menu Click `My Account` 5. In the `Configure Security Challenge Questions` section on the `Personal Information` page, configure three security challenge questions. 6. Click `Save questions` .", + "AdditionalInformation": "", + "References": "" + } + ] + }, + { + "Id": "1.4", + "Description": "Ensure no 'root' user account access key exists", + "Checks": [ + "iam_no_root_access_key" + ], + "Attributes": [ + { + "Section": "1. Identity and Access Management", + "Profile": "Level 1", + "AssessmentStatus": "Automated", + "Description": "The 'root' user account is the most privileged user in an AWS account. AWS Access Keys provide programmatic access to a given AWS account. It is recommended that all access keys associated with the 'root' user account be removed.", + "RationaleStatement": "Removing access keys associated with the 'root' user account limits vectors by which the account can be compromised. Additionally, removing the 'root' access keys encourages the creation and use of role based accounts that are least privileged.", + "ImpactStatement": "", + "RemediationProcedure": "Perform the following to delete or disable active 'root' user access keys **From Console:** 1. Sign in to the AWS Management Console as 'root' and open the IAM console at [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/). 2. Click on __ at the top right and select `My Security Credentials` from the drop down list 3. On the pop out screen Click on `Continue to Security Credentials` 4. Click on `Access Keys` _(Access Key ID and Secret Access Key)_ 5. Under the `Status` column if there are any Keys which are Active - Click on `Make Inactive` - (Temporarily disable Key - may be needed again) - Click `Delete` - (Deleted keys cannot be recovered)", + "AuditProcedure": "Perform the following to determine if the 'root' user account has access keys: **From Console:** 1. Login to the AWS Management Console 2. Click `Services` 3. Click `IAM` 4. Click on `Credential Report` 5. This will download a `.csv` file which contains credential usage for all IAM users within an AWS Account - open this file 6. For the `` user, ensure the `access_key_1_active` and `access_key_2_active` fields are set to `FALSE` . **From Command Line:** Run the following command: ``` aws iam get-account-summary | grep \"AccountAccessKeysPresent\" ``` If no 'root' access keys exist the output will show \"AccountAccessKeysPresent\": 0,. If the output shows a \"1\" than 'root' keys exist, refer to the remediation procedure below.", + "AdditionalInformation": "IAM User account \"root\" for us-gov cloud regions is not enabled by default. However, on request to AWS support enables 'root' access only through access-keys (CLI, API methods) for us-gov cloud region.", + "References": "http://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html:http://docs.aws.amazon.com/general/latest/gr/managing-aws-access-keys.html:http://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccountSummary.html:https://aws.amazon.com/blogs/security/an-easier-way-to-determine-the-presence-of-aws-account-access-keys/" + } + ] + }, + { + "Id": "1.5", + "Description": "Ensure MFA is enabled for the 'root' user account", + "Checks": [ + "iam_root_mfa_enabled" + ], + "Attributes": [ + { + "Section": "1. Identity and Access Management", + "Profile": "Level 1", + "AssessmentStatus": "Automated", + "Description": "The 'root' user account is the most privileged user in an AWS account. Multi-factor Authentication (MFA) adds an extra layer of protection on top of a username and password. With MFA enabled, when a user signs in to an AWS website, they will be prompted for their username and password as well as for an authentication code from their AWS MFA device. **Note:** When virtual MFA is used for 'root' accounts, it is recommended that the device used is NOT a personal device, but rather a dedicated mobile device (tablet or phone) that is managed to be kept charged and secured independent of any individual personal devices. (\"non-personal virtual MFA\") This lessens the risks of losing access to the MFA due to device loss, device trade-in or if the individual owning the device is no longer employed at the company.", + "RationaleStatement": "Enabling MFA provides increased security for console access as it requires the authenticating principal to possess a device that emits a time-sensitive key and have knowledge of a credential.", + "ImpactStatement": "", + "RemediationProcedure": "Perform the following to establish MFA for the 'root' user account: 1. Sign in to the AWS Management Console and open the IAM console at [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/). Note: to manage MFA devices for the 'root' AWS account, you must use your 'root' account credentials to sign in to AWS. You cannot manage MFA devices for the 'root' account using other credentials. 2. Choose `Dashboard` , and under `Security Status` , expand `Activate MFA` on your root account. 3. Choose `Activate MFA` 4. In the wizard, choose `A virtual MFA` device and then choose `Next Step` . 5. IAM generates and displays configuration information for the virtual MFA device, including a QR code graphic. The graphic is a representation of the 'secret configuration key' that is available for manual entry on devices that do not support QR codes. 6. Open your virtual MFA application. (For a list of apps that you can use for hosting virtual MFA devices, see [Virtual MFA Applications](http://aws.amazon.com/iam/details/mfa/#Virtual_MFA_Applications).) If the virtual MFA application supports multiple accounts (multiple virtual MFA devices), choose the option to create a new account (a new virtual MFA device). 7. Determine whether the MFA app supports QR codes, and then do one of the following: - Use the app to scan the QR code. For example, you might choose the camera icon or choose an option similar to Scan code, and then use the device's camera to scan the code. - In the Manage MFA Device wizard, choose Show secret key for manual configuration, and then type the secret configuration key into your MFA application. When you are finished, the virtual MFA device starts generating one-time passwords. In the Manage MFA Device wizard, in the Authentication Code 1 box, type the one-time password that currently appears in the virtual MFA device. Wait up to 30 seconds for the device to generate a new one-time password. Then type the second one-time password into the Authentication Code 2 box. Choose Assign Virtual MFA.", + "AuditProcedure": "Perform the following to determine if the 'root' user account has MFA setup: **From Console:** 1. Login to the AWS Management Console 2. Click `Services` 3. Click `IAM` 4. Click on `Credential Report` 5. This will download a `.csv` file which contains credential usage for all IAM users within an AWS Account - open this file 6. For the `` user, ensure the `mfa_active` field is set to `TRUE` . **From Command Line:** 1. Run the following command: ``` aws iam get-account-summary | grep \"AccountMFAEnabled\" ``` 2. Ensure the AccountMFAEnabled property is set to 1", + "AdditionalInformation": "IAM User account \"root\" for us-gov cloud regions does not have console access. This recommendation is not applicable for us-gov cloud regions.", + "References": "https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#id_root-user_manage_mfa:https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_enable_virtual.html#enable-virt-mfa-for-root" + } + ] + }, + { + "Id": "1.6", + "Description": "Ensure hardware MFA is enabled for the 'root' user account", + "Checks": [ + "iam_root_hardware_mfa_enabled" + ], + "Attributes": [ + { + "Section": "1. Identity and Access Management", + "Profile": "Level 2", + "AssessmentStatus": "Automated", + "Description": "The 'root' user account is the most privileged user in an AWS account. MFA adds an extra layer of protection on top of a user name and password. With MFA enabled, when a user signs in to an AWS website, they will be prompted for their user name and password as well as for an authentication code from their AWS MFA device. For Level 2, it is recommended that the 'root' user account be protected with a hardware MFA.", + "RationaleStatement": "A hardware MFA has a smaller attack surface than a virtual MFA. For example, a hardware MFA does not suffer the attack surface introduced by the mobile smartphone on which a virtual MFA resides. **Note**: Using hardware MFA for many, many AWS accounts may create a logistical device management issue. If this is the case, consider implementing this Level 2 recommendation selectively to the highest security AWS accounts and the Level 1 recommendation applied to the remaining accounts.", + "ImpactStatement": "", + "RemediationProcedure": "Perform the following to establish a hardware MFA for the 'root' user account: 1. Sign in to the AWS Management Console and open the IAM console at [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/). Note: to manage MFA devices for the AWS 'root' user account, you must use your 'root' account credentials to sign in to AWS. You cannot manage MFA devices for the 'root' account using other credentials. 2. Choose `Dashboard` , and under `Security Status` , expand `Activate MFA` on your root account. 3. Choose `Activate MFA` 4. In the wizard, choose `A hardware MFA` device and then choose `Next Step` . 5. In the `Serial Number` box, enter the serial number that is found on the back of the MFA device. 6. In the `Authentication Code 1` box, enter the six-digit number displayed by the MFA device. You might need to press the button on the front of the device to display the number. 7. Wait 30 seconds while the device refreshes the code, and then enter the next six-digit number into the `Authentication Code 2` box. You might need to press the button on the front of the device again to display the second number. 8. Choose `Next Step` . The MFA device is now associated with the AWS account. The next time you use your AWS account credentials to sign in, you must type a code from the hardware MFA device. Remediation for this recommendation is not available through AWS CLI.", + "AuditProcedure": "Perform the following to determine if the 'root' user account has a hardware MFA setup: 1. Run the following command to determine if the 'root' account has MFA setup: ``` aws iam get-account-summary | grep \"AccountMFAEnabled\" ``` The `AccountMFAEnabled` property is set to `1` will ensure that the 'root' user account has MFA (Virtual or Hardware) Enabled. If `AccountMFAEnabled` property is set to `0` the account is not compliant with this recommendation. 2. If `AccountMFAEnabled` property is set to `1`, determine 'root' account has Hardware MFA enabled. Run the following command to list all virtual MFA devices: ``` aws iam list-virtual-mfa-devices ``` If the output contains one MFA with the following Serial Number, it means the MFA is virtual, not hardware and the account is not compliant with this recommendation: `\"SerialNumber\": \"arn:aws:iam::__:mfa/root-account-mfa-device\"`", + "AdditionalInformation": "IAM User account 'root' for us-gov cloud regions does not have console access. This control is not applicable for us-gov cloud regions.", + "References": "https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_enable_virtual.html:https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_enable_physical.html#enable-hw-mfa-for-root" + } + ] + }, + { + "Id": "1.7", + "Description": "Eliminate use of the 'root' user for administrative and daily tasks", + "Checks": [ + "iam_avoid_root_usage" + ], + "Attributes": [ + { + "Section": "1. Identity and Access Management", + "Profile": "Level 1", + "AssessmentStatus": "Automated", + "Description": "With the creation of an AWS account, a 'root user' is created that cannot be disabled or deleted. That user has unrestricted access to and control over all resources in the AWS account. It is highly recommended that the use of this account be avoided for everyday tasks.", + "RationaleStatement": "The 'root user' has unrestricted access to and control over all account resources. Use of it is inconsistent with the principles of least privilege and separation of duties, and can lead to unnecessary harm due to error or account compromise.", + "ImpactStatement": "", + "RemediationProcedure": "If you find that the 'root' user account is being used for daily activity to include administrative tasks that do not require the 'root' user: 1. Change the 'root' user password. 2. Deactivate or delete any access keys associate with the 'root' user. **Remember, anyone who has 'root' user credentials for your AWS account has unrestricted access to and control of all the resources in your account, including billing information.", + "AuditProcedure": "**From Console:** 1. Login to the AWS Management Console at `https://console.aws.amazon.com/iam/` 2. In the left pane, click `Credential Report` 3. Click on `Download Report` 4. Open of Save the file locally 5. Locate the `` under the user column 6. Review `password_last_used, access_key_1_last_used_date, access_key_2_last_used_date` to determine when the 'root user' was last used. **From Command Line:** Run the following CLI commands to provide a credential report for determining the last time the 'root user' was used: ``` aws iam generate-credential-report ``` ``` aws iam get-credential-report --query 'Content' --output text | base64 -d | cut -d, -f1,5,11,16 | grep -B1 '' ``` Review `password_last_used`, `access_key_1_last_used_date`, `access_key_2_last_used_date` to determine when the _root user_ was last used. **Note:** There are a few conditions under which the use of the 'root' user account is required. Please see the reference links for all of the tasks that require use of the 'root' user.", + "AdditionalInformation": "The 'root' user for us-gov cloud regions is not enabled by default. However, on request to AWS support, they can enable the 'root' user and grant access only through access-keys (CLI, API methods) for us-gov cloud region. If the 'root' user for us-gov cloud regions is enabled, this recommendation is applicable. Monitoring usage of the 'root' user can be accomplished by implementing recommendation 3.3 Ensure a log metric filter and alarm exist for usage of the 'root' user.", + "References": "https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html:https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html:https://docs.aws.amazon.com/general/latest/gr/aws_tasks-that-require-root.html" + } + ] + }, + { + "Id": "1.8", + "Description": "Ensure IAM password policy requires minimum length of 14 or greater", + "Checks": [ + "iam_password_policy_minimum_length_14" + ], + "Attributes": [ + { + "Section": "1. Identity and Access Management", + "Profile": "Level 1", + "AssessmentStatus": "Automated", + "Description": "Password policies are, in part, used to enforce password complexity requirements. IAM password policies can be used to ensure password are at least a given length. It is recommended that the password policy require a minimum password length 14.", + "RationaleStatement": "Setting a password complexity policy increases account resiliency against brute force login attempts.", + "ImpactStatement": "", + "RemediationProcedure": "Perform the following to set the password policy as prescribed: **From Console:** 1. Login to AWS Console (with appropriate permissions to View Identity Access Management Account Settings) 2. Go to IAM Service on the AWS Console 3. Click on Account Settings on the Left Pane 4. Set \"Minimum password length\" to `14` or greater. 5. Click \"Apply password policy\" **From Command Line:** ``` aws iam update-account-password-policy --minimum-password-length 14 ``` Note: All commands starting with \"aws iam update-account-password-policy\" can be combined into a single command.", + "AuditProcedure": "Perform the following to ensure the password policy is configured as prescribed: **From Console:** 1. Login to AWS Console (with appropriate permissions to View Identity Access Management Account Settings) 2. Go to IAM Service on the AWS Console 3. Click on Account Settings on the Left Pane 4. Ensure \"Minimum password length\" is set to 14 or greater. **From Command Line:** ``` aws iam get-account-password-policy ``` Ensure the output of the above command includes \"MinimumPasswordLength\": 14 (or higher)", + "AdditionalInformation": "", + "References": "https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_passwords_account-policy.html:https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#configure-strong-password-policy" + } + ] + }, + { + "Id": "1.9", + "Description": "Ensure IAM password policy prevents password reuse", + "Checks": [ + "iam_password_policy_reuse_24" + ], + "Attributes": [ + { + "Section": "1. Identity and Access Management", + "Profile": "Level 1", + "AssessmentStatus": "Automated", + "Description": "IAM password policies can prevent the reuse of a given password by the same user. It is recommended that the password policy prevent the reuse of passwords.", + "RationaleStatement": "Preventing password reuse increases account resiliency against brute force login attempts.", + "ImpactStatement": "", + "RemediationProcedure": "Perform the following to set the password policy as prescribed: **From Console:** 1. Login to AWS Console (with appropriate permissions to View Identity Access Management Account Settings) 2. Go to IAM Service on the AWS Console 3. Click on Account Settings on the Left Pane 4. Check \"Prevent password reuse\" 5. Set \"Number of passwords to remember\" is set to `24` **From Command Line:** ``` aws iam update-account-password-policy --password-reuse-prevention 24 ``` Note: All commands starting with \"aws iam update-account-password-policy\" can be combined into a single command.", + "AuditProcedure": "Perform the following to ensure the password policy is configured as prescribed: **From Console:** 1. Login to AWS Console (with appropriate permissions to View Identity Access Management Account Settings) 2. Go to IAM Service on the AWS Console 3. Click on Account Settings on the Left Pane 4. Ensure \"Prevent password reuse\" is checked 5. Ensure \"Number of passwords to remember\" is set to 24 **From Command Line:** ``` aws iam get-account-password-policy ``` Ensure the output of the above command includes \"PasswordReusePrevention\": 24", + "AdditionalInformation": "", + "References": "https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_passwords_account-policy.html:https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#configure-strong-password-policy" + } + ] + }, + { + "Id": "2.1.1", + "Description": "Ensure S3 Bucket Policy is set to deny HTTP requests", + "Checks": [ + "s3_bucket_secure_transport_policy" + ], + "Attributes": [ + { + "Section": "2.1. Simple Storage Service (S3)", + "Profile": "Level 2", + "AssessmentStatus": "Automated", + "Description": "At the Amazon S3 bucket level, you can configure permissions through a bucket policy making the objects accessible only through HTTPS.", + "RationaleStatement": "By default, Amazon S3 allows both HTTP and HTTPS requests. To achieve only allowing access to Amazon S3 objects through HTTPS you also have to explicitly deny access to HTTP requests. Bucket policies that allow HTTPS requests without explicitly denying HTTP requests will not comply with this recommendation.", + "ImpactStatement": "", + "RemediationProcedure": "**From Console:** 1. Login to AWS Management Console and open the Amazon S3 console using https://console.aws.amazon.com/s3/ 2. Select the Check box next to the Bucket. 3. Click on 'Permissions'. 4. Click 'Bucket Policy' 5. Add this to the existing policy filling in the required information ``` { \"Sid\": \", \"Effect\": \"Deny\", \"Principal\": \"*\", \"Action\": \"s3:*\", \"Resource\": \"arn:aws:s3:::/*\", \"Condition\": { \"Bool\": { \"aws:SecureTransport\": \"false\" } } } ``` 6. Save 7. Repeat for all the buckets in your AWS account that contain sensitive data. **From Console** using AWS Policy Generator: 1. Repeat steps 1-4 above. 2. Click on `Policy Generator` at the bottom of the Bucket Policy Editor 3. Select Policy Type `S3 Bucket Policy` 4. Add Statements - `Effect` = Deny - `Principal` = * - `AWS Service` = Amazon S3 - `Actions` = * - `Amazon Resource Name` = 5. Generate Policy 6. Copy the text and add it to the Bucket Policy. **From Command Line:** 1. Export the bucket policy to a json file. ``` aws s3api get-bucket-policy --bucket --query Policy --output text > policy.json ``` 2. Modify the policy.json file by adding in this statement: ``` { \"Sid\": \", \"Effect\": \"Deny\", \"Principal\": \"*\", \"Action\": \"s3:*\", \"Resource\": \"arn:aws:s3:::/*\", \"Condition\": { \"Bool\": { \"aws:SecureTransport\": \"false\" } } } ``` 3. Apply this modified policy back to the S3 bucket: ``` aws s3api put-bucket-policy --bucket --policy file://policy.json ```", + "AuditProcedure": "To allow access to HTTPS you can use a condition that checks for the key `\"aws:SecureTransport: true\"`. This means that the request is sent through HTTPS but that HTTP can still be used. So to make sure you do not allow HTTP access confirm that there is a bucket policy that explicitly denies access for HTTP requests and that it contains the key \"aws:SecureTransport\": \"false\". **From Console:** 1. Login to AWS Management Console and open the Amazon S3 console using https://console.aws.amazon.com/s3/ 2. Select the Check box next to the Bucket. 3. Click on 'Permissions', then Click on `Bucket Policy`. 4. Ensure that a policy is listed that matches: ``` '{ \"Sid\": , \"Effect\": \"Deny\", \"Principal\": \"*\", \"Action\": \"s3:*\", \"Resource\": \"arn:aws:s3:::/*\", \"Condition\": { \"Bool\": { \"aws:SecureTransport\": \"false\" }' ``` `` and `` will be specific to your account 5. Repeat for all the buckets in your AWS account. **From Command Line:** 1. List all of the S3 Buckets ``` aws s3 ls ``` 2. Using the list of buckets run this command on each of them: ``` aws s3api get-bucket-policy --bucket | grep aws:SecureTransport ``` 3. Confirm that `aws:SecureTransport` is set to false `aws:SecureTransport:false` 4. Confirm that the policy line has Effect set to Deny 'Effect:Deny'", + "AdditionalInformation": "", + "References": "https://aws.amazon.com/premiumsupport/knowledge-center/s3-bucket-policy-for-config-rule/:https://aws.amazon.com/blogs/security/how-to-use-bucket-policies-and-apply-defense-in-depth-to-help-secure-your-amazon-s3-data/:https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/get-bucket-policy.html" + } + ] + }, + { + "Id": "2.1.2", + "Description": "Ensure MFA Delete is enabled on S3 buckets", + "Checks": [ + "s3_bucket_no_mfa_delete" + ], + "Attributes": [ + { + "Section": "2.1. Simple Storage Service (S3)", + "Profile": "Level 1", + "AssessmentStatus": "Automated", + "Description": "Once MFA Delete is enabled on your sensitive and classified S3 bucket it requires the user to have two forms of authentication.", + "RationaleStatement": "Adding MFA delete to an S3 bucket, requires additional authentication when you change the version state of your bucket or you delete and object version adding another layer of security in the event your security credentials are compromised or unauthorized access is granted.", + "ImpactStatement": "", + "RemediationProcedure": "Perform the steps below to enable MFA delete on an S3 bucket. Note: -You cannot enable MFA Delete using the AWS Management Console. You must use the AWS CLI or API. -You must use your 'root' account to enable MFA Delete on S3 buckets. **From Command line:** 1. Run the s3api put-bucket-versioning command ``` aws s3api put-bucket-versioning --profile my-root-profile --bucket Bucket_Name --versioning-configuration Status=Enabled,MFADelete=Enabled --mfa “arn:aws:iam::aws_account_id:mfa/root-account-mfa-device passcode” ```", + "AuditProcedure": "Perform the steps below to confirm MFA delete is configured on an S3 Bucket **From Console:** 1. Login to the S3 console at `https://console.aws.amazon.com/s3/` 2. Click the `Check` box next to the Bucket name you want to confirm 3. In the window under `Properties` 4. Confirm that Versioning is `Enabled` 5. Confirm that MFA Delete is `Enabled` **From Command Line:** 1. Run the `get-bucket-versioning` ``` aws s3api get-bucket-versioning --bucket my-bucket ``` Output example: ``` Enabled Enabled ``` If the Console or the CLI output does not show Versioning and MFA Delete `enabled` refer to the remediation below.", + "AdditionalInformation": "", + "References": "https://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html#MultiFactorAuthenticationDelete:https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMFADelete.html:https://aws.amazon.com/blogs/security/securing-access-to-aws-using-mfa-part-3/:https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_lost-or-broken.html" + } + ] + }, + { + "Id": "2.1.3", + "Description": "Ensure all data in Amazon S3 has been discovered, classified and secured when required.", + "Checks": [ + "macie_is_enabled" + ], + "Attributes": [ + { + "Section": "2.1. Simple Storage Service (S3)", + "Profile": "Level 2", + "AssessmentStatus": "Manual", + "Description": "Amazon S3 buckets can contain sensitive data, that for security purposes should be discovered, monitored, classified and protected. Macie along with other 3rd party tools can automatically provide an inventory of Amazon S3 buckets.", + "RationaleStatement": "Using a Cloud service or 3rd Party software to continuously monitor and automate the process of data discovery and classification for S3 buckets using machine learning and pattern matching is a strong defense in protecting that information. Amazon Macie is a fully managed data security and data privacy service that uses machine learning and pattern matching to discover and protect your sensitive data in AWS.", + "ImpactStatement": "There is a cost associated with using Amazon Macie. There is also typically a cost associated with 3rd Party tools that perform similar processes and protection.", + "RemediationProcedure": "Perform the steps below to enable and configure Amazon Macie **From Console:** 1. Log on to the Macie console at `https://console.aws.amazon.com/macie/` 2. Click `Get started`. 3. Click `Enable Macie`. Setup a repository for sensitive data discovery results 1. In the Left pane, under Settings, click `Discovery results`. 2. Make sure `Create bucket` is selected. 3. Create a bucket, enter a name for the bucket. The name must be unique across all S3 buckets. In addition, the name must start with a lowercase letter or a number. 4. Click on `Advanced`. 5. Block all public access, make sure `Yes` is selected. 6. KMS encryption, specify the AWS KMS key that you want to use to encrypt the results. The key must be a symmetric, customer master key (CMK) that's in the same Region as the S3 bucket. 7. Click on `Save` Create a job to discover sensitive data 1. In the left pane, click `S3 buckets`. Macie displays a list of all the S3 buckets for your account. 2. Select the `check box` for each bucket that you want Macie to analyze as part of the job 3. Click `Create job`. 3. Click `Quick create`. 4. For the Name and description step, enter a name and, optionally, a description of the job. 5. Then click `Next`. 6. For the Review and create step, click `Submit`. Review your findings 1. In the left pane, click `Findings`. 2. To view the details of a specific finding, choose any field other than the check box for the finding. If you are using a 3rd Party tool to manage and protect your s3 data, follow the Vendor documentation for implementing and configuring that tool.", + "AuditProcedure": "Perform the following steps to determine if Macie is running: **From Console:** 1. Login to the Macie console at https://console.aws.amazon.com/macie/ 2. In the left hand pane click on By job under findings. 3. Confirm that you have a Job setup for your S3 Buckets When you log into the Macie console if you aren't taken to the summary page and you don't have a job setup and running then refer to the remediation procedure below. If you are using a 3rd Party tool to manage and protect your s3 data you meet this recommendation.", + "AdditionalInformation": "", + "References": "https://aws.amazon.com/macie/getting-started/:https://docs.aws.amazon.com/workspaces/latest/adminguide/data-protection.html:https://docs.aws.amazon.com/macie/latest/user/data-classification.html" + } + ] + }, + { + "Id": "2.1.4", + "Description": "Ensure that S3 Buckets are configured with 'Block public access (bucket settings)'", + "Checks": [ + "s3_bucket_level_public_access_block", + "s3_account_level_public_access_blocks" + ], + "Attributes": [ + { + "Section": "2.1. Simple Storage Service (S3)", + "Profile": "Level 1", + "AssessmentStatus": "Automated", + "Description": "Amazon S3 provides `Block public access (bucket settings)` and `Block public access (account settings)` to help you manage public access to Amazon S3 resources. By default, S3 buckets and objects are created with public access disabled. However, an IAM principal with sufficient S3 permissions can enable public access at the bucket and/or object level. While enabled, `Block public access (bucket settings)` prevents an individual bucket, and its contained objects, from becoming publicly accessible. Similarly, `Block public access (account settings)` prevents all buckets, and contained objects, from becoming publicly accessible across the entire account.", + "RationaleStatement": "Amazon S3 `Block public access (bucket settings)` prevents the accidental or malicious public exposure of data contained within the respective bucket(s). Amazon S3 `Block public access (account settings)` prevents the accidental or malicious public exposure of data contained within all buckets of the respective AWS account. Whether blocking public access to all or some buckets is an organizational decision that should be based on data sensitivity, least privilege, and use case.", + "ImpactStatement": "When you apply Block Public Access settings to an account, the settings apply to all AWS Regions globally. The settings might not take effect in all Regions immediately or simultaneously, but they eventually propagate to all Regions.", + "RemediationProcedure": "**If utilizing Block Public Access (bucket settings)** **From Console:** 1. Login to AWS Management Console and open the Amazon S3 console using https://console.aws.amazon.com/s3/ 2. Select the Check box next to the Bucket. 3. Click on 'Edit public access settings'. 4. Click 'Block all public access' 5. Repeat for all the buckets in your AWS account that contain sensitive data. **From Command Line:** 1. List all of the S3 Buckets ``` aws s3 ls ``` 2. Set the Block Public Access to true on that bucket ``` aws s3api put-public-access-block --bucket --public-access-block-configuration \"BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true\" ``` **If utilizing Block Public Access (account settings)** **From Console:** If the output reads `true` for the separate configuration settings then it is set on the account. 1. Login to AWS Management Console and open the Amazon S3 console using https://console.aws.amazon.com/s3/ 2. Choose `Block Public Access (account settings)` 3. Choose `Edit` to change the block public access settings for all the buckets in your AWS account 4. Choose the settings you want to change, and then choose `Save`. For details about each setting, pause on the `i` icons. 5. When you're asked for confirmation, enter `confirm`. Then Click `Confirm` to save your changes. **From Command Line:** To set Block Public access settings for this account, run the following command: ``` aws s3control put-public-access-block --public-access-block-configuration BlockPublicAcls=true, IgnorePublicAcls=true, BlockPublicPolicy=true, RestrictPublicBuckets=true --account-id ```", + "AuditProcedure": "**If utilizing Block Public Access (bucket settings)** **From Console:** 1. Login to AWS Management Console and open the Amazon S3 console using https://console.aws.amazon.com/s3/ 2. Select the Check box next to the Bucket. 3. Click on 'Edit public access settings'. 4. Ensure that block public access settings are set appropriately for this bucket 5. Repeat for all the buckets in your AWS account. **From Command Line:** 1. List all of the S3 Buckets ``` aws s3 ls ``` 2. Find the public access setting on that bucket ``` aws s3api get-public-access-block --bucket ``` Output if Block Public access is enabled: ``` { \"PublicAccessBlockConfiguration\": { \"BlockPublicAcls\": true, \"IgnorePublicAcls\": true, \"BlockPublicPolicy\": true, \"RestrictPublicBuckets\": true } } ``` If the output reads `false` for the separate configuration settings then proceed to the remediation. **If utilizing Block Public Access (account settings)** **From Console:** 1. Login to AWS Management Console and open the Amazon S3 console using https://console.aws.amazon.com/s3/ 2. Choose `Block public access (account settings)` 3. Ensure that block public access settings are set appropriately for your AWS account. **From Command Line:** To check Public access settings for this account status, run the following command, `aws s3control get-public-access-block --account-id --region ` Output if Block Public access is enabled: ``` { \"PublicAccessBlockConfiguration\": { \"IgnorePublicAcls\": true, \"BlockPublicPolicy\": true, \"BlockPublicAcls\": true, \"RestrictPublicBuckets\": true } } ``` If the output reads `false` for the separate configuration settings then proceed to the remediation.", + "AdditionalInformation": "", + "References": "https://docs.aws.amazon.com/AmazonS3/latest/user-guide/block-public-access-account.html" + } + ] + }, + { + "Id": "2.2.1", + "Description": "Ensure EBS Volume Encryption is Enabled in all Regions", + "Checks": [ + "ec2_ebs_volume_encryption" + ], + "Attributes": [ + { + "Section": "2.2. Elastic Compute Cloud (EC2)", + "Profile": "Level 1", + "AssessmentStatus": "Automated", + "Description": "Elastic Compute Cloud (EC2) supports encryption at rest when using the Elastic Block Store (EBS) service. While disabled by default, forcing encryption at EBS volume creation is supported.", + "RationaleStatement": "Encrypting data at rest reduces the likelihood that it is unintentionally exposed and can nullify the impact of disclosure if the encryption remains unbroken.", + "ImpactStatement": "Losing access or removing the KMS key in use by the EBS volumes will result in no longer being able to access the volumes.", + "RemediationProcedure": "**From Console:** 1. Login to AWS Management Console and open the Amazon EC2 console using https://console.aws.amazon.com/ec2/ 2. Under `Account attributes`, click `EBS encryption`. 3. Click `Manage`. 4. Click the `Enable` checkbox. 5. Click `Update EBS encryption` 6. Repeat for every region requiring the change. **Note:** EBS volume encryption is configured per region. **From Command Line:** 1. Run ``` aws --region ec2 enable-ebs-encryption-by-default ``` 2. Verify that `\"EbsEncryptionByDefault\": true` is displayed. 3. Repeat every region requiring the change. **Note:** EBS volume encryption is configured per region.", + "AuditProcedure": "**From Console:** 1. Login to AWS Management Console and open the Amazon EC2 console using https://console.aws.amazon.com/ec2/ 2. Under `Account attributes`, click `EBS encryption`. 3. Verify `Always encrypt new EBS volumes` displays `Enabled`. 4. Review every region in-use. **Note:** EBS volume encryption is configured per region. **From Command Line:** 1. Run ``` aws --region ec2 get-ebs-encryption-by-default ``` 2. Verify that `\"EbsEncryptionByDefault\": true` is displayed. 3. Review every region in-use. **Note:** EBS volume encryption is configured per region.", + "AdditionalInformation": "Default EBS volume encryption only applies to newly created EBS volumes. Existing EBS volumes are **not** converted automatically.", + "References": "https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html:https://aws.amazon.com/blogs/aws/new-opt-in-to-default-encryption-for-new-ebs-volumes/" + } + ] + }, + { + "Id": "2.3.1", + "Description": "Ensure that encryption is enabled for RDS Instances", + "Checks": [ + "rds_instance_storage_encrypted" + ], + "Attributes": [ + { + "Section": "2.3. Relational Database Service (RDS)", + "Profile": "Level 1", + "AssessmentStatus": "Automated", + "Description": "Amazon RDS encrypted DB instances use the industry standard AES-256 encryption algorithm to encrypt your data on the server that hosts your Amazon RDS DB instances. After your data is encrypted, Amazon RDS handles authentication of access and decryption of your data transparently with a minimal impact on performance.", + "RationaleStatement": "Databases are likely to hold sensitive and critical data, it is highly recommended to implement encryption in order to protect your data from unauthorized access or disclosure. With RDS encryption enabled, the data stored on the instance's underlying storage, the automated backups, read replicas, and snapshots, are all encrypted.", + "ImpactStatement": "", + "RemediationProcedure": "**From Console:** 1. Login to the AWS Management Console and open the RDS dashboard at https://console.aws.amazon.com/rds/. 2. In the left navigation panel, click on `Databases` 3. Select the Database instance that needs to be encrypted. 4. Click on `Actions` button placed at the top right and select `Take Snapshot`. 5. On the Take Snapshot page, enter a database name of which you want to take a snapshot in the `Snapshot Name` field and click on `Take Snapshot`. 6. Select the newly created snapshot and click on the `Action` button placed at the top right and select `Copy snapshot` from the Action menu. 7. On the Make Copy of DB Snapshot page, perform the following: - In the New DB Snapshot Identifier field, Enter a name for the `new snapshot`. - Check `Copy Tags`, New snapshot must have the same tags as the source snapshot. - Select `Yes` from the `Enable Encryption` dropdown list to enable encryption, You can choose to use the AWS default encryption key or custom key from Master Key dropdown list. 8. Click `Copy Snapshot` to create an encrypted copy of the selected instance snapshot. 9. Select the new Snapshot Encrypted Copy and click on the `Action` button placed at the top right and select `Restore Snapshot` button from the Action menu, This will restore the encrypted snapshot to a new database instance. 10. On the Restore DB Instance page, enter a unique name for the new database instance in the DB Instance Identifier field. 11. Review the instance configuration details and click `Restore DB Instance`. 12. As the new instance provisioning process is completed can update application configuration to refer to the endpoint of the new Encrypted database instance Once the database endpoint is changed at the application level, can remove the unencrypted instance. **From Command Line:** 1. Run `describe-db-instances` command to list all RDS database names available in the selected AWS region, The command output should return the database instance identifier. ``` aws rds describe-db-instances --region --query 'DBInstances[*].DBInstanceIdentifier' ``` 2. Run `create-db-snapshot` command to create a snapshot for the selected database instance, The command output will return the `new snapshot` with name DB Snapshot Name. ``` aws rds create-db-snapshot --region --db-snapshot-identifier --db-instance-identifier ``` 3. Now run `list-aliases` command to list the KMS keys aliases available in a specified region, The command output should return each `key alias currently available`. For our RDS encryption activation process, locate the ID of the AWS default KMS key. ``` aws kms list-aliases --region ``` 4. Run `copy-db-snapshot` command using the default KMS key ID for RDS instances returned earlier to create an encrypted copy of the database instance snapshot, The command output will return the `encrypted instance snapshot configuration`. ``` aws rds copy-db-snapshot --region --source-db-snapshot-identifier --target-db-snapshot-identifier --copy-tags --kms-key-id ``` 5. Run `restore-db-instance-from-db-snapshot` command to restore the encrypted snapshot created at the previous step to a new database instance, If successful, the command output should return the new encrypted database instance configuration. ``` aws rds restore-db-instance-from-db-snapshot --region --db-instance-identifier --db-snapshot-identifier ``` 6. Run `describe-db-instances` command to list all RDS database names, available in the selected AWS region, Output will return database instance identifier name Select encrypted database name that we just created DB-Name-Encrypted. ``` aws rds describe-db-instances --region --query 'DBInstances[*].DBInstanceIdentifier' ``` 7. Run again `describe-db-instances` command using the RDS instance identifier returned earlier, to determine if the selected database instance is encrypted, The command output should return the encryption status `True`. ``` aws rds describe-db-instances --region --db-instance-identifier --query 'DBInstances[*].StorageEncrypted' ```", + "AuditProcedure": "**From Console:** 1. Login to the AWS Management Console and open the RDS dashboard at https://console.aws.amazon.com/rds/ 2. In the navigation pane, under RDS dashboard, click `Databases`. 3. Select the RDS Instance that you want to examine 4. Click `Instance Name` to see details, then click on `Configuration` tab. 5. Under Configuration Details section, In Storage pane search for the `Encryption Enabled` Status. 6. If the current status is set to `Disabled`, Encryption is not enabled for the selected RDS Instance database instance. 7. Repeat steps 3 to 7 to verify encryption status of other RDS Instance in same region. 8. Change region from the top of the navigation bar and repeat audit for other regions. **From Command Line:** 1. Run `describe-db-instances` command to list all RDS Instance database names, available in the selected AWS region, Output will return each Instance database identifier-name. ``` aws rds describe-db-instances --region --query 'DBInstances[*].DBInstanceIdentifier' ``` 2. Run again `describe-db-instances` command using the RDS Instance identifier returned earlier, to determine if the selected database instance is encrypted, The command output should return the encryption status `True` Or `False`. ``` aws rds describe-db-instances --region --db-instance-identifier --query 'DBInstances[*].StorageEncrypted' ``` 3. If the StorageEncrypted parameter value is `False`, Encryption is not enabled for the selected RDS database instance. 4. Repeat steps 1 to 3 for auditing each RDS Instance and change Region to verify for other regions", + "AdditionalInformation": "", + "References": "https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.Encryption.html:https://aws.amazon.com/blogs/database/selecting-the-right-encryption-options-for-amazon-rds-and-amazon-aurora-database-engines/#:~:text=With%20RDS%2Dencrypted%20resources%2C%20data,transparent%20to%20your%20database%20engine.:https://aws.amazon.com/rds/features/security/" + } + ] + }, + { + "Id": "2.3.2", + "Description": "Ensure Auto Minor Version Upgrade feature is Enabled for RDS Instances", + "Checks": [ + "rds_instance_minor_version_upgrade_enabled" + ], + "Attributes": [ + { + "Section": "2.3. Relational Database Service (RDS)", + "Profile": "Level 1", + "AssessmentStatus": "Automated", + "Description": "Ensure that RDS database instances have the Auto Minor Version Upgrade flag enabled in order to receive automatically minor engine upgrades during the specified maintenance window. So, RDS instances can get the new features, bug fixes, and security patches for their database engines.", + "RationaleStatement": "AWS RDS will occasionally deprecate minor engine versions and provide new ones for an upgrade. When the last version number within the release is replaced, the version changed is considered minor. With Auto Minor Version Upgrade feature enabled, the version upgrades will occur automatically during the specified maintenance window so your RDS instances can get the new features, bug fixes, and security patches for their database engines.", + "ImpactStatement": "", + "RemediationProcedure": "**From Console:** 1. Log in to the AWS management console and navigate to the RDS dashboard at https://console.aws.amazon.com/rds/. 2. In the left navigation panel, click on `Databases`. 3. Select the RDS instance that wants to update. 4. Click on the `Modify` button placed on the top right side. 5. On the `Modify DB Instance: ` page, In the `Maintenance` section, select `Auto minor version upgrade` click on the `Yes` radio button. 6. At the bottom of the page click on `Continue`, check to Apply Immediately to apply the changes immediately, or select `Apply during the next scheduled maintenance window` to avoid any downtime. 7. Review the changes and click on `Modify DB Instance`. The instance status should change from available to modifying and back to available. Once the feature is enabled, the `Auto Minor Version Upgrade` status should change to `Yes`. **From Command Line:** 1. Run `describe-db-instances` command to list all RDS database instance names, available in the selected AWS region: ``` aws rds describe-db-instances --region --query 'DBInstances[*].DBInstanceIdentifier' ``` 2. The command output should return each database instance identifier. 3. Run the `modify-db-instance` command to modify the selected RDS instance configuration this command will apply the changes immediately, Remove `--apply-immediately` to apply changes during the next scheduled maintenance window and avoid any downtime: ``` aws rds modify-db-instance --region --db-instance-identifier --auto-minor-version-upgrade --apply-immediately ``` 4. The command output should reveal the new configuration metadata for the RDS instance and check `AutoMinorVersionUpgrade` parameter value. 5. Run `describe-db-instances` command to check if the Auto Minor Version Upgrade feature has been successfully enable: ``` aws rds describe-db-instances --region --db-instance-identifier --query 'DBInstances[*].AutoMinorVersionUpgrade' ``` 6. The command output should return the feature current status set to `true`, the feature is `enabled` and the minor engine upgrades will be applied to the selected RDS instance.", + "AuditProcedure": "**From Console:** 1. Log in to the AWS management console and navigate to the RDS dashboard at https://console.aws.amazon.com/rds/. 2. In the left navigation panel, click on `Databases`. 3. Select the RDS instance that wants to examine. 4. Click on the `Maintenance and backups` panel. 5. Under the `Maintenance` section, search for the Auto Minor Version Upgrade status. - If the current status is set to `Disabled`, means the feature is not set and the minor engine upgrades released will not be applied to the selected RDS instance **From Command Line:** 1. Run `describe-db-instances` command to list all RDS database names, available in the selected AWS region: ``` aws rds describe-db-instances --region --query 'DBInstances[*].DBInstanceIdentifier' ``` 2. The command output should return each database instance identifier. 3. Run again `describe-db-instances` command using the RDS instance identifier returned earlier to determine the Auto Minor Version Upgrade status for the selected instance: ``` aws rds describe-db-instances --region --db-instance-identifier --query 'DBInstances[*].AutoMinorVersionUpgrade' ``` 4. The command output should return the feature current status. If the current status is set to `true`, the feature is enabled and the minor engine upgrades will be applied to the selected RDS instance.", + "AdditionalInformation": "", + "References": "https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_RDS_Managing.html:https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Upgrading.html:https://aws.amazon.com/rds/faqs/" + } + ] + }, + { + "Id": "2.3.3", + "Description": "Ensure that public access is not given to RDS Instance", + "Checks": [ + "rds_instance_no_public_access" + ], + "Attributes": [ + { + "Section": "2.3. Relational Database Service (RDS)", + "Profile": "Level 1", + "AssessmentStatus": "Automated", + "Description": "Ensure and verify that RDS database instances provisioned in your AWS account do restrict unauthorized access in order to minimize security risks. To restrict access to anypublicly accessible RDS database instance, you must disable the database PubliclyAccessible flag and update the VPC security group associated with the instance", + "RationaleStatement": "Ensure that no public-facing RDS database instances are provisioned in your AWS account and restrict unauthorized access in order to minimize security risks. When the RDS instance allows unrestricted access (0.0.0.0/0), everyone and everything on the Internet can establish a connection to your database and this can increase the opportunity for malicious activities such as brute force attacks, PostgreSQL injections, or DoS/DDoS attacks.", + "ImpactStatement": "", + "RemediationProcedure": "From Console: 1. Log in to the AWS management console and navigate to the RDS dashboard at https://console.aws.amazon.com/rds/. 2. Under the navigation panel, On RDS Dashboard, click Databases. 3. Select the RDS instance that you want to update. 4. Click Modify from the dashboard top menu. 5. On the Modify DB Instance panel, under the Connectivity section, click on Additional connectivity configuration and update the value for Publicly Accessible to Not publicly accessible to restrict public access. Follow the below steps to update subnet configurations: • Select the Connectivity and security tab, and click on the VPC attribute value inside the Networking section. • Select the Details tab from the VPC dashboard bottom panel and click on Route table configuration attribute value. • On the Route table details page, select the Routes tab from the dashboard bottom panel and click on Edit routes. • On the Edit routes page, update the Destination of Target which is set to igw- xxxxx and click on Save routes. 6. On the Modify DB Instance panel Click on Continue and In the Scheduling of modifications section, perform one of the following actions based on your requirements: • Select Apply during the next scheduled maintenance window to apply the changes automatically during the next scheduled maintenance window. • Select Apply immediately to apply the changes right away. With this option, any pending modifications will be asynchronously applied as soon as possible, regardless of the maintenance window setting for this RDS database instance. Note that any changes available in the pending modifications queue are also applied. If any of the pending modifications require downtime, choosing this option can cause unexpected downtime for the application. 7. Repeat steps 3 to 6 for each RDS instance available in the current region. 8. Change the AWS region from the navigation bar to repeat the process for other regions. From Command Line: 1. Run describe-db-instances command to list all RDS database names identifiers, available in the selected AWS region: aws rds describe-db-instances --region --query 'DBInstances[*].DBInstanceIdentifier' 2. The command output should return each database instance identifier. 3. Run modify-db-instance command to modify the selected RDS instance configuration. Then use the following command to disable the Publicly Accessible flag for the selected RDS instances. This command use the apply- immediately flag. If you want to avoid any downtime --no-apply-immediately flag can be used: aws rds modify-db-instance --region --db-instance-identifier --no-publicly-accessible --apply-immediately 4. The command output should reveal the PubliclyAccessible configuration under pending values and should get applied at the specified time. 5. Updating the Internet Gateway Destination via AWS CLI is not currently supported To update information about Internet Gateway use the AWS Console Procedure. 6. Repeat steps 1 to 5 for each RDS instance provisioned in the current region. 7. Change the AWS region by using the --region filter to repeat the process for other regions.", + "AuditProcedure": "From Console: 1. Log in to the AWS management console and navigate to the RDS dashboard at https://console.aws.amazon.com/rds/. 2. Under the navigation panel, On RDS Dashboard, click Databases. 3. Select the RDS instance that you want to examine. 4. Click Instance Name from the dashboard, Under `Connectivity and Security. 5. On the Security, check if the Publicly Accessible flag status is set to Yes, follow the below-mentioned steps to check database subnet access. • In the networking section, click the subnet link available under Subnets • The link will redirect you to the VPC Subnets page. • Select the subnet listed on the page and click the Route Table tab from the dashboard bottom panel. If the route table contains any entries with the destination CIDR block set to 0.0.0.0/0 and with an Internet Gateway attached. • The selected RDS database instance was provisioned inside a public subnet, therefore is not running within a logically isolated environment and can be accessible from the Internet. 6. Repeat steps no. 4 and 5 to determine the type (public or private) and subnet for other RDS database instances provisioned in the current region. 7. Change the AWS region from the navigation bar and repeat the audit process for other regions. From Command Line: 1. Run describe-db-instances command to list all RDS database names, available in the selected AWS region: aws rds describe-db-instances --region --query 'DBInstances[*].DBInstanceIdentifier' 2. The command output should return each database instance identifier. 3. Run again describe-db-instances command using the PubliclyAccessible parameter as query filter to reveal the database instance Publicly Accessible flag status: aws rds describe-db-instances --region --db-instance-identifier --query 'DBInstances[*].PubliclyAccessible' 4. Check for the Publicly Accessible parameter status, If the Publicly Accessible flag is set to Yes. Then selected RDS database instance is publicly accessible and insecure, follow the below-mentioned steps to check database subnet access 5. Run again describe-db-instances command using the RDS database instance identifier that you want to check and appropriate filtering to describe the VPC subnet(s) associated with the selected instance: aws rds describe-db-instances --region --db-instance-identifier --query 'DBInstances[*].DBSubnetGroup.Subnets[]' • The command output should list the subnets available in the selected database subnet group. 6. Run describe-route-tables command using the ID of the subnet returned at the previous step to describe the routes of the VPC route table associated with the selected subnet: aws ec2 describe-route-tables --region --filters 'Name=association.subnet-id,Values=' --query 'RouteTables[*].Routes[]' • If the command returns the route table associated with database instance subnet ID. Check the GatewayId and DestinationCidrBlock attributes values returned in the output. If the route table contains any entries with the GatewayId value set to igw-xxxxxxxx and the DestinationCidrBlock value set to 0.0.0.0/0, the selected RDS database instance was provisioned inside a public subnet. • Or • If the command returns empty results, the route table is implicitly associated with subnet, therefore the audit process continues with the next step 7. Run again describe-db-instances command using the RDS database instance identifier that you want to check and appropriate filtering to describe the VPC ID associated with the selected instance: aws rds describe-db-instances --region --db-instance-identifier --query 'DBInstances[*].DBSubnetGroup.VpcId' • The command output should show the VPC ID in the selected database subnet group 8. Now run describe-route-tables command using the ID of the VPC returned at the previous step to describe the routes of the VPC main route table implicitly associated with the selected subnet: aws ec2 describe-route-tables --region --filters 'Name=vpc- id,Values=' 'Name=association.main,Values=true' --query 'RouteTables[*].Routes[]' • The command output returns the VPC main route table implicitly associated with database instance subnet ID. Check the GatewayId and DestinationCidrBlock attributes values returned in the output. If the route table contains any entries with the GatewayId value set to igw-xxxxxxxx and the DestinationCidrBlock value set to 0.0.0.0/0, the selected RDS database instance was provisioned inside a public subnet, therefore is not running within a logically isolated environment and does not adhere to AWS security best practices.", + "AdditionalInformation": "", + "References": "1. https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.html:https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Scenario2.html:https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html:https://aws.amazon.com/rds/faqs/" + } + ] + }, + { + "Id": "2.4.1", + "Description": "Ensure that encryption is enabled for EFS file systems", + "Checks": [ + "efs_encryption_at_rest_enabled" + ], + "Attributes": [ + { + "Section": "2.4 Relational Database Service (RDS)", + "Profile": "Level 1", + "AssessmentStatus": "Automated", + "Description": "EFS data should be encrypted at rest using AWS KMS (Key Management Service).", + "RationaleStatement": "Data should be encrypted at rest to reduce the risk of a data breach via direct access to the storage device.", + "ImpactStatement": "", + "RemediationProcedure": "**It is important to note that EFS file system data at rest encryption must be turned on when creating the file system.** If an EFS file system has been created without data at rest encryption enabled then you must create another EFS file system with the correct configuration and transfer the data. **Steps to create an EFS file system with data encrypted at rest:** **From Console:** 1. Login to the AWS Management Console and Navigate to `Elastic File System (EFS)` dashboard. 2. Select `File Systems` from the left navigation panel. 3. Click `Create File System` button from the dashboard top menu to start the file system setup process. 4. On the `Configure file system access` configuration page, perform the following actions. - Choose the right VPC from the VPC dropdown list. - Within Create mount targets section, select the checkboxes for all of the Availability Zones (AZs) within the selected VPC. These will be your mount targets. - Click `Next step` to continue. 5. Perform the following on the `Configure optional settings` page. - Create `tags` to describe your new file system. - Choose `performance mode` based on your requirements. - Check `Enable encryption` checkbox and choose `aws/elasticfilesystem` from Select KMS master key dropdown list to enable encryption for the new file system using the default master key provided and managed by AWS KMS. - Click `Next step` to continue. 6. Review the file system configuration details on the `review and create` page and then click `Create File System` to create your new AWS EFS file system. 7. Copy the data from the old unencrypted EFS file system onto the newly create encrypted file system. 8. Remove the unencrypted file system as soon as your data migration to the newly create encrypted file system is completed. 9. Change the AWS region from the navigation bar and repeat the entire process for other aws regions. **From CLI:** 1. Run describe-file-systems command to describe the configuration information available for the selected (unencrypted) file system (see Audit section to identify the right resource): ``` aws efs describe-file-systems --region --file-system-id ``` 2. The command output should return the requested configuration information. 3. To provision a new AWS EFS file system, you need to generate a universally unique identifier (UUID) in order to create the token required by the create-file-system command. To create the required token, you can use a randomly generated UUID from \"https://www.uuidgenerator.net\". 4. Run create-file-system command using the unique token created at the previous step. ``` aws efs create-file-system --region --creation-token --performance-mode generalPurpose --encrypted ``` 5. The command output should return the new file system configuration metadata. 6. Run create-mount-target command using the newly created EFS file system ID returned at the previous step as identifier and the ID of the Availability Zone (AZ) that will represent the mount target: ``` aws efs create-mount-target --region --file-system-id --subnet-id ``` 7. The command output should return the new mount target metadata. 8. Now you can mount your file system from an EC2 instance. 9. Copy the data from the old unencrypted EFS file system onto the newly create encrypted file system. 10. Remove the unencrypted file system as soon as your data migration to the newly create encrypted file system is completed. ``` aws efs delete-file-system --region --file-system-id ``` 11. Change the AWS region by updating the --region and repeat the entire process for other aws regions.", + "AuditProcedure": "**From Console:** 1. Login to the AWS Management Console and Navigate to `Elastic File System (EFS) dashboard. 2. Select `File Systems` from the left navigation panel. 3. Each item on the list has a visible Encrypted field that displays data at rest encryption status. 4. Validate that this field reads `Encrypted` for all EFS file systems in all AWS regions. **From CLI:** 1. Run describe-file-systems command using custom query filters to list the identifiers of all AWS EFS file systems currently available within the selected region: ``` aws efs describe-file-systems --region --output table --query 'FileSystems[*].FileSystemId' ``` 2. The command output should return a table with the requested file system IDs. 3. Run describe-file-systems command using the ID of the file system that you want to examine as identifier and the necessary query filters: ``` aws efs describe-file-systems --region --file-system-id --query 'FileSystems[*].Encrypted' ``` 4. The command output should return the file system encryption status true or false. If the returned value is `false`, the selected AWS EFS file system is not encrypted and if the returned value is `true`, the selected AWS EFS file system is encrypted.", + "AdditionalInformation": "", + "References": "https://docs.aws.amazon.com/efs/latest/ug/encryption-at-rest.html:https://awscli.amazonaws.com/v2/documentation/api/latest/reference/efs/index.html#efs" + } + ] + }, + { + "Id": "3.1", + "Description": "Ensure CloudTrail is enabled in all regions", + "Checks": [ + "cloudtrail_multi_region_enabled" + ], + "Attributes": [ + { + "Section": "3. Logging", + "Profile": "Level 1", + "AssessmentStatus": "Automated", + "Description": "AWS CloudTrail is a web service that records AWS API calls for your account and delivers log files to you. The recorded information includes the identity of the API caller, the time of the API call, the source IP address of the API caller, the request parameters, and the response elements returned by the AWS service. CloudTrail provides a history of AWS API calls for an account, including API calls made via the Management Console, SDKs, command line tools, and higher-level AWS services (such as CloudFormation).", + "RationaleStatement": "The AWS API call history produced by CloudTrail enables security analysis, resource change tracking, and compliance auditing. Additionally, - ensuring that a multi-regions trail exists will ensure that unexpected activity occurring in otherwise unused regions is detected - ensuring that a multi-regions trail exists will ensure that `Global Service Logging` is enabled for a trail by default to capture recording of events generated on AWS global services - for a multi-regions trail, ensuring that management events configured for all type of Read/Writes ensures recording of management operations that are performed on all resources in an AWS account", + "ImpactStatement": "S3 lifecycle features can be used to manage the accumulation and management of logs over time. See the following AWS resource for more information on these features: 1. https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html", + "RemediationProcedure": "Perform the following to enable global (Multi-region) CloudTrail logging: **From Console:** 1. Sign in to the AWS Management Console and open the IAM console at [https://console.aws.amazon.com/cloudtrail](https://console.aws.amazon.com/cloudtrail) 2. Click on _Trails_ on the left navigation pane 3. Click `Get Started Now` , if presented - Click `Add new trail` - Enter a trail name in the `Trail name` box - Set the `Apply trail to all regions` option to `Yes` - Specify an S3 bucket name in the `S3 bucket` box - Click `Create` 4. If 1 or more trails already exist, select the target trail to enable for global logging 5. Click the edit icon (pencil) next to `Apply trail to all regions` , Click `Yes` and Click `Save`. 6. Click the edit icon (pencil) next to `Management Events` click `All` for setting `Read/Write Events` and Click `Save`. **From Command Line:** ``` aws cloudtrail create-trail --name --bucket-name --is-multi-region-trail aws cloudtrail update-trail --name --is-multi-region-trail ``` Note: Creating CloudTrail via CLI without providing any overriding options configures `Management Events` to set `All` type of `Read/Writes` by default.", + "AuditProcedure": "Perform the following to determine if CloudTrail is enabled for all regions: **From Console:** 1. Sign in to the AWS Management Console and open the CloudTrail console at [https://console.aws.amazon.com/cloudtrail](https://console.aws.amazon.com/cloudtrail) 2. Click on `Trails` on the left navigation pane - You will be presented with a list of trails across all regions 3. Ensure at least one Trail has `All` specified in the `Region` column 4. Click on a trail via the link in the _Name_ column 5. Ensure `Logging` is set to `ON` 6. Ensure `Apply trail to all regions` is set to `Yes` 7. In section `Management Events` ensure `Read/Write Events` set to `ALL` **From Command Line:** ``` aws cloudtrail describe-trails ``` Ensure `IsMultiRegionTrail` is set to `true` ``` aws cloudtrail get-trail-status --name ``` Ensure `IsLogging` is set to `true` ``` aws cloudtrail get-event-selectors --trail-name ``` Ensure there is at least one Event Selector for a Trail with `IncludeManagementEvents` set to `true` and `ReadWriteType` set to `All`", + "AdditionalInformation": "", + "References": "https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-concepts.html#cloudtrail-concepts-management-events:https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-management-and-data-events-with-cloudtrail.html?icmpid=docs_cloudtrail_console#logging-management-events:https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-supported-services.html#cloud-trail-supported-services-data-events" + } + ] + }, + { + "Id": "3.8", + "Description": "Ensure that Object-level logging for write events is enabled for S3 bucket", + "Checks": [ + "cloudtrail_s3_dataevents_write_enabled" + ], + "Attributes": [ + { + "Section": "3. Logging", + "Profile": "Level 2", + "AssessmentStatus": "Automated", + "Description": "S3 object-level API operations such as GetObject, DeleteObject, and PutObject are called data events. By default, CloudTrail trails don't log data events and so it is recommended to enable Object-level logging for S3 buckets.", + "RationaleStatement": "Enabling object-level logging will help you meet data compliance requirements within your organization, perform comprehensive security analysis, monitor specific patterns of user behavior in your AWS account or take immediate actions on any object-level API activity within your S3 Buckets using Amazon CloudWatch Events.", + "ImpactStatement": "", + "RemediationProcedure": "**From Console:** 1. Login to the AWS Management Console and navigate to S3 dashboard at https://console.aws.amazon.com/s3/ 2. In the left navigation panel, click buckets and then click on the S3 Bucket Name that you want to examine. 3. Click Properties tab to see in detail bucket configuration. 4. In the AWS Cloud Trail data events' section select the CloudTrail name for the recording activity. You can choose an existing Cloudtrail or create a new one by slicking the Configure in Cloudtrailbutton or navigating to the Cloudtrail console linkhttps://console.aws.amazon.com/cloudtrail/` 5. Once the Cloudtrail is selected, Select the data Data Events check box. 6. Select S3 from the `Data event type drop down. 7. Select Log all events from the Log selector template drop down. 8. Repeat steps 2 to 5 to enable object-level logging of write events for other S3 buckets.", + "AuditProcedure": "**From Console:** 1. Login to the AWS Management Console and navigate to CloudTrail dashboard at https://console.aws.amazon.com/cloudtrail/ 2. In the left panel, click Trails and then click on the CloudTrail Name that you want to examine. 3. Review General details 4. Confirm that Multi-region trail is set to Yes 5. Scroll down to Data events 6. Confirm that it reads: Data Events:S3 Log selector template Log all events If 'basic events selectors' is being used it should read: Data events: S3 Bucket Name: All current and future S3 buckets Write: Enabled 7. Repeat steps 2 to 6 to verify that Multi-region trail and Data events logging of S3 buckets in CloudTrail. If the CloudTrails do not have multi-region and data events configured for S3 refer to the remediation below..", + "AdditionalInformation": "", + "References": "https://docs.aws.amazon.com/AmazonS3/latest/user-guide/enable-cloudtrail-events.html" + } + ] + }, + { + "Id": "3.9", + "Description": "Ensure that Object-level logging for read events is enabled for S3 bucket", + "Checks": [ + "cloudtrail_s3_dataevents_read_enabled" + ], + "Attributes": [ + { + "Section": "3. Logging", + "Profile": "Level 2", + "AssessmentStatus": "Automated", + "Description": "S3 object-level API operations such as GetObject, DeleteObject, and PutObject are called data events. By default, CloudTrail trails don't log data events and so it is recommended to enable Object-level logging for S3 buckets.", + "RationaleStatement": "Enabling object-level logging will help you meet data compliance requirements within your organization, perform comprehensive security analysis, monitor specific patterns of user behavior in your AWS account or take immediate actions on any object-level API activity using Amazon CloudWatch Events.", + "ImpactStatement": "", + "RemediationProcedure": "**From Console:** 1. Login to the AWS Management Console and navigate to S3 dashboard at `https://console.aws.amazon.com/s3/` 2. In the left navigation panel, click `buckets` and then click on the S3 Bucket Name that you want to examine. 3. Click `Properties` tab to see in detail bucket configuration. 4. Click on the `Object-level` logging setting, enter the CloudTrail name for the recording activity. You can choose an existing Cloudtrail or create a new one by navigating to the Cloudtrail console link `https://console.aws.amazon.com/cloudtrail/` 5. Once the Cloudtrail is selected, check the Read event checkbox, so that `object-level` logging for `Read` events is enabled. 6. Repeat steps 2 to 5 to enable `object-level` logging of read events for other S3 buckets. **From Command Line:** 1. To enable `object-level` data events logging for S3 buckets within your AWS account, run `put-event-selectors` command using the name of the trail that you want to reconfigure as identifier: ``` aws cloudtrail put-event-selectors --region --trail-name --event-selectors '[{ \"ReadWriteType\": \"ReadOnly\", \"IncludeManagementEvents\":true, \"DataResources\": [{ \"Type\": \"AWS::S3::Object\", \"Values\": [\"arn:aws:s3:::/\"] }] }]' ``` 2. The command output will be `object-level` event trail configuration. 3. If you want to enable it for all buckets at ones then change Values parameter to `[\"arn:aws:s3\"]` in command given above. 4. Repeat step 1 for each s3 bucket to update `object-level` logging of read events. 5. Change the AWS region by updating the `--region` command parameter and perform the process for other regions.", + "AuditProcedure": "**From Console:** 1. Login to the AWS Management Console and navigate to S3 dashboard at `https://console.aws.amazon.com/s3/` 2. In the left navigation panel, click `buckets` and then click on the S3 Bucket Name that you want to examine. 3. Click `Properties` tab to see in detail bucket configuration. 4. If the current status for `Object-level` logging is set to `Disabled`, then object-level logging of read events for the selected s3 bucket is not set. 5. If the current status for `Object-level` logging is set to `Enabled`, but the Read event check-box is unchecked, then object-level logging of read events for the selected s3 bucket is not set. 6. Repeat steps 2 to 5 to verify `object-level` logging for `read` events of your other S3 buckets. **From Command Line:** 1. Run `describe-trails` command to list the names of all Amazon CloudTrail trails currently available in the selected AWS region: ``` aws cloudtrail describe-trails --region --output table --query trailList[*].Name ``` 2. The command output will be table of the requested trail names. 3. Run `get-event-selectors` command using the name of the trail returned at the previous step and custom query filters to determine if Data events logging feature is enabled within the selected CloudTrail trail configuration for s3 bucket resources: ``` aws cloudtrail get-event-selectors --region --trail-name --query EventSelectors[*].DataResources[] ``` 4. The command output should be an array that contains the configuration of the AWS resource(S3 bucket) defined for the Data events selector. 5. If the `get-event-selectors` command returns an empty array, the Data events are not included into the selected AWS Cloudtrail trail logging configuration, therefore the S3 object-level API operations performed within your AWS account are not recorded. 6. Repeat steps 1 to 5 for auditing each s3 bucket to identify other trails that are missing the capability to log Data events. 7. Change the AWS region by updating the `--region` command parameter and perform the audit process for other regions.", + "AdditionalInformation": "", + "References": "https://docs.aws.amazon.com/AmazonS3/latest/user-guide/enable-cloudtrail-events.html" + } + ] + }, + { + "Id": "3.2", + "Description": "Ensure CloudTrail log file validation is enabled", + "Checks": [ + "cloudtrail_log_file_validation_enabled" + ], + "Attributes": [ + { + "Section": "3. Logging", + "Profile": "Level 2", + "AssessmentStatus": "Automated", + "Description": "CloudTrail log file validation creates a digitally signed digest file containing a hash of each log that CloudTrail writes to S3. These digest files can be used to determine whether a log file was changed, deleted, or unchanged after CloudTrail delivered the log. It is recommended that file validation be enabled on all CloudTrails.", + "RationaleStatement": "Enabling log file validation will provide additional integrity checking of CloudTrail logs.", + "ImpactStatement": "", + "RemediationProcedure": "Perform the following to enable log file validation on a given trail: **From Console:** 1. Sign in to the AWS Management Console and open the IAM console at [https://console.aws.amazon.com/cloudtrail](https://console.aws.amazon.com/cloudtrail) 2. Click on `Trails` on the left navigation pane 3. Click on target trail 4. Within the `General details` section click `edit` 5. Under the `Advanced settings` section 6. Check the enable box under `Log file validation` 7. Click `Save changes` **From Command Line:** ``` aws cloudtrail update-trail --name --enable-log-file-validation ``` Note that periodic validation of logs using these digests can be performed by running the following command: ``` aws cloudtrail validate-logs --trail-arn --start-time --end-time ```", + "AuditProcedure": "Perform the following on each trail to determine if log file validation is enabled: **From Console:** 1. Sign in to the AWS Management Console and open the IAM console at [https://console.aws.amazon.com/cloudtrail](https://console.aws.amazon.com/cloudtrail) 2. Click on `Trails` on the left navigation pane 3. For Every Trail: - Click on a trail via the link in the _Name_ column - Under the `General details` section, ensure `Log file validation` is set to `Enabled` **From Command Line:** ``` aws cloudtrail describe-trails ``` Ensure `LogFileValidationEnabled` is set to `true` for each trail", + "AdditionalInformation": "", + "References": "https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-log-file-validation-enabling.html" + } + ] + }, + { + "Id": "3.3", + "Description": "Ensure AWS Config is enabled in all regions", + "Checks": [ + "config_recorder_all_regions_enabled" + ], + "Attributes": [ + { + "Section": "3. Logging", + "Profile": "Level 2", + "AssessmentStatus": "Automated", + "Description": "AWS Config is a web service that performs configuration management of supported AWS resources within your account and delivers log files to you. The recorded information includes the configuration item (AWS resource), relationships between configuration items (AWS resources), any configuration changes between resources. It is recommended AWS Config be enabled in all regions.", + "RationaleStatement": "The AWS configuration item history captured by AWS Config enables security analysis, resource change tracking, and compliance auditing.", + "ImpactStatement": "It is recommended AWS Config be enabled in all regions.", + "RemediationProcedure": "To implement AWS Config configuration: **From Console:** 1. Select the region you want to focus on in the top right of the console 2. Click `Services` 3. Click `Config` 4. Define which resources you want to record in the selected region 5. Choose to include global resources (IAM resources) 6. Specify an S3 bucket in the same account or in another managed AWS account 7. Create an SNS Topic from the same AWS account or another managed AWS account **From Command Line:** 1. Ensure there is an appropriate S3 bucket, SNS topic, and IAM role per the [AWS Config Service prerequisites](http://docs.aws.amazon.com/config/latest/developerguide/gs-cli-prereq.html). 2. Run this command to set up the configuration recorder ``` aws configservice subscribe --s3-bucket my-config-bucket --sns-topic arn:aws:sns:us-east-1:012345678912:my-config-notice --iam-role arn:aws:iam::012345678912:role/myConfigRole ``` 3. Run this command to start the configuration recorder: ``` start-configuration-recorder --configuration-recorder-name ```", + "AuditProcedure": "Process to evaluate AWS Config configuration per region **From Console:** 1. Sign in to the AWS Management Console and open the AWS Config console at [https://console.aws.amazon.com/config/](https://console.aws.amazon.com/config/). 2. On the top right of the console select target Region. 3. If presented with Setup AWS Config - follow remediation procedure: 4. On the Resource inventory page, Click on edit (the gear icon). The Set Up AWS Config page appears. 5. Ensure 1 or both check-boxes under \"All Resources\" is checked. - Include global resources related to IAM resources - which needs to be enabled in 1 region only 6. Ensure the correct S3 bucket has been defined. 7. Ensure the correct SNS topic has been defined. 8. Repeat steps 2 to 7 for each region. **From Command Line:** 1. Run this command to show all AWS Config recorders and their properties: ``` aws configservice describe-configuration-recorders ``` 2. Evaluate the output to ensure that there's at least one recorder for which `recordingGroup` object includes `\"allSupported\": true` AND `\"includeGlobalResourceTypes\": true` Note: There is one more parameter \"ResourceTypes\" in recordingGroup object. We don't need to check the same as whenever we set \"allSupported\": true, AWS enforces resource types to be empty (\"ResourceTypes\":[]) Sample Output: ``` { \"ConfigurationRecorders\": [ { \"recordingGroup\": { \"allSupported\": true, \"resourceTypes\": [], \"includeGlobalResourceTypes\": true }, \"roleARN\": \"arn:aws:iam:::role/service-role/\", \"name\": \"default\" } ] } ``` 3. Run this command to show the status for all AWS Config recorders: ``` aws configservice describe-configuration-recorder-status ``` 4. In the output, find recorders with `name` key matching the recorders that met criteria in step 2. Ensure that at least one of them includes `\"recording\": true` and `\"lastStatus\": \"SUCCESS\"`", + "AdditionalInformation": "", + "References": "https://docs.aws.amazon.com/cli/latest/reference/configservice/describe-configuration-recorder-status.html" + } + ] + }, + { + "Id": "3.4", + "Description": "Ensure S3 bucket access logging is enabled on the CloudTrail S3 bucket", + "Checks": [ + "cloudtrail_logs_s3_bucket_access_logging_enabled" + ], + "Attributes": [ + { + "Section": "3. Logging", + "Profile": "Level 1", + "AssessmentStatus": "Automated", + "Description": "S3 Bucket Access Logging generates a log that contains access records for each request made to your S3 bucket. An access log record contains details about the request, such as the request type, the resources specified in the request worked, and the time and date the request was processed. It is recommended that bucket access logging be enabled on the CloudTrail S3 bucket.", + "RationaleStatement": "By enabling S3 bucket logging on target S3 buckets, it is possible to capture all events which may affect objects within any target buckets. Configuring logs to be placed in a separate bucket allows access to log information which can be useful in security and incident response workflows.", + "ImpactStatement": "", + "RemediationProcedure": "Perform the following to enable S3 bucket logging: **From Console:** 1. Sign in to the AWS Management Console and open the S3 console at [https://console.aws.amazon.com/s3](https://console.aws.amazon.com/s3). 2. Under `All Buckets` click on the target S3 bucket 3. Click on `Properties` in the top right of the console 4. Under `Bucket:` click on `Logging` 5. Configure bucket logging - Click on the `Enabled` checkbox - Select Target Bucket from list - Enter a Target Prefix 6. Click `Save`. **From Command Line:** 1. Get the name of the S3 bucket that CloudTrail is logging to: ``` aws cloudtrail describe-trails --region --query trailList[*].S3BucketName ``` 2. Copy and add target bucket name at ``, Prefix for logfile at `` and optionally add an email address in the following template and save it as ``: ``` { \"LoggingEnabled\": { \"TargetBucket\": \"\", \"TargetPrefix\": \"\", \"TargetGrants\": [ { \"Grantee\": { \"Type\": \"AmazonCustomerByEmail\", \"EmailAddress\": \"\" }, \"Permission\": \"FULL_CONTROL\" } ] } } ``` 3. Run the `put-bucket-logging` command with bucket name and `` as input, for more information refer at [put-bucket-logging](https://docs.aws.amazon.com/cli/latest/reference/s3api/put-bucket-logging.html): ``` aws s3api put-bucket-logging --bucket --bucket-logging-status file:// ```", + "AuditProcedure": "Perform the following ensure the CloudTrail S3 bucket has access logging is enabled: **From Console:** 1. Go to the Amazon CloudTrail console at [https://console.aws.amazon.com/cloudtrail/home](https://console.aws.amazon.com/cloudtrail/home) 2. In the API activity history pane on the left, click Trails 3. In the Trails pane, note the bucket names in the S3 bucket column 4. Sign in to the AWS Management Console and open the S3 console at [https://console.aws.amazon.com/s3](https://console.aws.amazon.com/s3). 5. Under `All Buckets` click on a target S3 bucket 6. Click on `Properties` in the top right of the console 7. Under `Bucket:` _ `` _ click on `Logging` 8. Ensure `Enabled` is checked. **From Command Line:** 1. Get the name of the S3 bucket that CloudTrail is logging to: ``` aws cloudtrail describe-trails --query 'trailList[*].S3BucketName' ``` 2. Ensure Bucket Logging is enabled: ``` aws s3api get-bucket-logging --bucket ``` Ensure command does not returns empty output. Sample Output for a bucket with logging enabled: ``` { \"LoggingEnabled\": { \"TargetPrefix\": \"\", \"TargetBucket\": \"\" } } ```", + "AdditionalInformation": "", + "References": "https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerLogs.html" + } + ] + }, + { + "Id": "3.5", + "Description": "Ensure CloudTrail logs are encrypted at rest using KMS CMKs", + "Checks": [ + "cloudtrail_kms_encryption_enabled" + ], + "Attributes": [ + { + "Section": "3. Logging", + "Profile": "Level 2", + "AssessmentStatus": "Automated", + "Description": "AWS CloudTrail is a web service that records AWS API calls for an account and makes those logs available to users and resources in accordance with IAM policies. AWS Key Management Service (KMS) is a managed service that helps create and control the encryption keys used to encrypt account data, and uses Hardware Security Modules (HSMs) to protect the security of encryption keys. CloudTrail logs can be configured to leverage server side encryption (SSE) and KMS customer created master keys (CMK) to further protect CloudTrail logs. It is recommended that CloudTrail be configured to use SSE-KMS.", + "RationaleStatement": "Configuring CloudTrail to use SSE-KMS provides additional confidentiality controls on log data as a given user must have S3 read permission on the corresponding log bucket and must be granted decrypt permission by the CMK policy.", + "ImpactStatement": "Customer created keys incur an additional cost. See https://aws.amazon.com/kms/pricing/ for more information.", + "RemediationProcedure": "Perform the following to configure CloudTrail to use SSE-KMS: **From Console:** 1. Sign in to the AWS Management Console and open the CloudTrail console at [https://console.aws.amazon.com/cloudtrail](https://console.aws.amazon.com/cloudtrail) 2. In the left navigation pane, choose `Trails` . 3. Click on a Trail 4. Under the `S3` section click on the edit button (pencil icon) 5. Click `Advanced` 6. Select an existing CMK from the `KMS key Id` drop-down menu - Note: Ensure the CMK is located in the same region as the S3 bucket - Note: You will need to apply a KMS Key policy on the selected CMK in order for CloudTrail as a service to encrypt and decrypt log files using the CMK provided. Steps are provided [here](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/create-kms-key-policy-for-cloudtrail.html) for editing the selected CMK Key policy 7. Click `Save` 8. You will see a notification message stating that you need to have decrypt permissions on the specified KMS key to decrypt log files. 9. Click `Yes` **From Command Line:** ``` aws cloudtrail update-trail --name --kms-id aws kms put-key-policy --key-id --policy ```", + "AuditProcedure": "Perform the following to determine if CloudTrail is configured to use SSE-KMS: **From Console:** 1. Sign in to the AWS Management Console and open the CloudTrail console at [https://console.aws.amazon.com/cloudtrail](https://console.aws.amazon.com/cloudtrail) 2. In the left navigation pane, choose `Trails` . 3. Select a Trail 4. Under the `S3` section, ensure `Encrypt log files` is set to `Yes` and a KMS key ID is specified in the `KSM Key Id` field. **From Command Line:** 1. Run the following command: ``` aws cloudtrail describe-trails ``` 2. For each trail listed, SSE-KMS is enabled if the trail has a `KmsKeyId` property defined.", + "AdditionalInformation": "3 statements which need to be added to the CMK policy: 1\\. Enable Cloudtrail to describe CMK properties ```
{  \"Sid\": \"Allow CloudTrail access\",  \"Effect\": \"Allow\",  \"Principal\": {  \"Service\": \"cloudtrail.amazonaws.com\"  },  \"Action\": \"kms:DescribeKey\",  \"Resource\": \"*\" } ``` 2\\. Granting encrypt permissions ``` 
{  \"Sid\": \"Allow CloudTrail to encrypt logs\",  \"Effect\": \"Allow\",  \"Principal\": {  \"Service\": \"cloudtrail.amazonaws.com\"  },  \"Action\": \"kms:GenerateDataKey*\",  \"Resource\": \"*\",  \"Condition\": {  \"StringLike\": {  \"kms:EncryptionContext:aws:cloudtrail:arn\": [  \"arn:aws:cloudtrail:*:aws-account-id:trail/*\"  ]  }  } } ``` 3\\. Granting decrypt permissions ``` 
{  \"Sid\": \"Enable CloudTrail log decrypt permissions\",  \"Effect\": \"Allow\",  \"Principal\": {  \"AWS\": \"arn:aws:iam::aws-account-id:user/username\"  },  \"Action\": \"kms:Decrypt\",  \"Resource\": \"*\",  \"Condition\": {  \"Null\": {  \"kms:EncryptionContext:aws:cloudtrail:arn\": \"false\"  }  } } ```",
+          "References": "https://docs.aws.amazon.com/awscloudtrail/latest/userguide/encrypting-cloudtrail-log-files-with-aws-kms.html:https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html"
+        }
+      ]
+    },
+    {
+      "Id": "3.6",
+      "Description": "Ensure rotation for customer created symmetric CMKs is enabled",
+      "Checks": [
+        "kms_cmk_rotation_enabled"
+      ],
+      "Attributes": [
+        {
+          "Section": "3. Logging",
+          "Profile": "Level 2",
+          "AssessmentStatus": "Automated",
+          "Description": "AWS Key Management Service (KMS) allows customers to rotate the backing key which is key material stored within the KMS which is tied to the key ID of the Customer Created customer master key (CMK). It is the backing key that is used to perform cryptographic operations such as encryption and decryption. Automated key rotation currently retains all prior backing keys so that decryption of encrypted data can take place transparently. It is recommended that CMK key rotation be enabled for symmetric keys. Key rotation can not be enabled for any asymmetric CMK.",
+          "RationaleStatement": "Rotating encryption keys helps reduce the potential impact of a compromised key as data encrypted with a new key cannot be accessed with a previous key that may have been exposed. Keys should be rotated every year, or upon event that would result in the compromise of that key.",
+          "ImpactStatement": "Creation, management, and storage of CMKs may require additional time from and administrator.",
+          "RemediationProcedure": "**From Console:**  1. Sign in to the AWS Management Console and open the KMS console at: https://console.aws.amazon.com/kms. 2. In the left navigation pane, click Customer-managed keys. 3. Select a key where Key spec = SYMMETRIC_DEFAULT that does not have automatic rotation enabled. 4. Select the Key rotation tab. 5. Check the Automatically rotate this KMS key every year checkbox. 6. Click Save. 7. Repeat steps 3–6 for all customer-managed CMKs that do not have automatic rotation enabled.",
+          "AuditProcedure": "**From Console:**  1. Sign in to the AWS Management Console and open the KMS console at: https://console.aws.amazon.com/kms. 2. In the left navigation pane, click Customer-managed keys. 3. Select a customer managed CMK where Key spec = SYMMETRIC_DEFAULT. 4. Select the Key rotation tab. 5. Ensure the Automatically rotate this KMS key every year checkbox is checked. 6. Repeat steps 3–5 for all customer-managed CMKs where 'Key spec = SYMMETRIC_DEFAULT'.",
+          "AdditionalInformation": "",
+          "References": "https://aws.amazon.com/kms/pricing/:https://csrc.nist.gov/publications/detail/sp/800-57-part-1/rev-5/final"
+        }
+      ]
+    },
+    {
+      "Id": "3.7",
+      "Description": "Ensure VPC flow logging is enabled in all VPCs",
+      "Checks": [
+        "vpc_flow_logs_enabled"
+      ],
+      "Attributes": [
+        {
+          "Section": "3. Logging",
+          "Profile": "Level 2",
+          "AssessmentStatus": "Automated",
+          "Description": "VPC Flow Logs is a feature that enables you to capture information about the IP traffic going to and from network interfaces in your VPC. After you've created a flow log, you can view and retrieve its data in Amazon CloudWatch Logs. It is recommended that VPC Flow Logs be enabled for packet \"Rejects\" for VPCs.",
+          "RationaleStatement": "VPC Flow Logs provide visibility into network traffic that traverses the VPC and can be used to detect anomalous traffic or insight during security workflows.",
+          "ImpactStatement": "By default, CloudWatch Logs will store Logs indefinitely unless a specific retention period is defined for the log group. When choosing the number of days to retain, keep in mind the average days it takes an organization to realize they have been breached is 210 days (at the time of this writing). Since additional time is required to research a breach, a minimum 365 day retention policy allows time for detection and research. You may also wish to archive the logs to a cheaper storage service rather than simply deleting them. See the following AWS resource to manage CloudWatch Logs retention periods:  1. https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/SettingLogRetention.html",
+          "RemediationProcedure": "Perform the following to determine if VPC Flow logs is enabled:  **From Console:**  1. Sign into the management console 2. Select `Services` then `VPC`  3. In the left navigation pane, select `Your VPCs`  4. Select a VPC 5. In the right pane, select the `Flow Logs` tab. 6. If no Flow Log exists, click `Create Flow Log`  7. For Filter, select `Reject` 8. Enter in a `Role` and `Destination Log Group`  9. Click `Create Log Flow`  10. Click on `CloudWatch Logs Group`   **Note:** Setting the filter to \"Reject\" will dramatically reduce the logging data accumulation for this recommendation and provide sufficient information for the purposes of breach detection, research and remediation. However, during periods of least privilege security group engineering, setting this the filter to \"All\" can be very helpful in discovering existing traffic flows required for proper operation of an already running environment.  **From Command Line:**  1. Create a policy document and name it as `role_policy_document.json` and paste the following content: ``` {  \"Version\": \"2012-10-17\",  \"Statement\": [  {  \"Sid\": \"test\",  \"Effect\": \"Allow\",  \"Principal\": {  \"Service\": \"ec2.amazonaws.com\"  },  \"Action\": \"sts:AssumeRole\"  }  ] } ``` 2. Create another policy document and name it as `iam_policy.json` and paste the following content: ``` {  \"Version\": \"2012-10-17\",  \"Statement\": [  {  \"Effect\": \"Allow\",  \"Action\":[  \"logs:CreateLogGroup\",  \"logs:CreateLogStream\",  \"logs:DescribeLogGroups\",  \"logs:DescribeLogStreams\",  \"logs:PutLogEvents\",  \"logs:GetLogEvents\",  \"logs:FilterLogEvents\"  ],  \"Resource\": \"*\"  }  ] } ``` 3. Run the below command to create an IAM role: ``` aws iam create-role --role-name  --assume-role-policy-document file://role_policy_document.json  ``` 4. Run the below command to create an IAM policy: ``` aws iam create-policy --policy-name  --policy-document file://iam-policy.json ``` 5. Run `attach-group-policy` command using the IAM policy ARN returned at the previous step to attach the policy to the IAM role (if the command succeeds, no output is returned): ``` aws iam attach-group-policy --policy-arn arn:aws:iam:::policy/ --group-name  ``` 6. Run `describe-vpcs` to get the VpcId available in the selected region: ``` aws ec2 describe-vpcs --region  ``` 7. The command output should return the VPC Id available in the selected region. 8. Run `create-flow-logs` to create a flow log for the vpc: ``` aws ec2 create-flow-logs --resource-type VPC --resource-ids  --traffic-type REJECT --log-group-name  --deliver-logs-permission-arn  ``` 9. Repeat step 8 for other vpcs available in the selected region. 10. Change the region by updating --region and repeat remediation procedure for other vpcs.",
+          "AuditProcedure": "Perform the following to determine if VPC Flow logs are enabled:  **From Console:**  1. Sign into the management console 2. Select `Services` then `VPC`  3. In the left navigation pane, select `Your VPCs`  4. Select a VPC 5. In the right pane, select the `Flow Logs` tab. 6. Ensure a Log Flow exists that has `Active` in the `Status` column.  **From Command Line:**  1. Run `describe-vpcs` command (OSX/Linux/UNIX) to list the VPC networks available in the current AWS region: ``` aws ec2 describe-vpcs --region  --query Vpcs[].VpcId ``` 2. The command output returns the `VpcId` available in the selected region. 3. Run `describe-flow-logs` command (OSX/Linux/UNIX) using the VPC ID to determine if the selected virtual network has the Flow Logs feature enabled: ``` aws ec2 describe-flow-logs --filter \"Name=resource-id,Values=\" ``` 4. If there are no Flow Logs created for the selected VPC, the command output will return an `empty list []`. 5. Repeat step 3 for other VPCs available in the same region. 6. Change the region by updating `--region` and repeat steps 1 - 5 for all the VPCs.",
+          "AdditionalInformation": "",
+          "References": "https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/flow-logs.html"
+        }
+      ]
+    },
+    {
+      "Id": "4.1",
+      "Description": "Ensure a log metric filter and alarm exist for unauthorized API calls",
+      "Checks": [
+        "cloudwatch_log_metric_filter_unauthorized_api_calls"
+      ],
+      "Attributes": [
+        {
+          "Section": "4. Monitoring",
+          "Profile": "Level 1",
+          "AssessmentStatus": "Automated",
+          "Description": "Real-time monitoring of API calls can be achieved by directing CloudTrail Logs to CloudWatch Logs and establishing corresponding metric filters and alarms. It is recommended that a metric filter and alarm be established for unauthorized API calls.",
+          "RationaleStatement": "Monitoring unauthorized API calls will help reveal application errors and may reduce time to detect malicious activity.",
+          "ImpactStatement": "This alert may be triggered by normal read-only console activities that attempt to opportunistically gather optional information, but gracefully fail if they don't have permissions.  If an excessive number of alerts are being generated then an organization may wish to consider adding read access to the limited IAM user permissions simply to quiet the alerts.  In some cases doing this may allow the users to actually view some areas of the system - any additional access given should be reviewed for alignment with the original limited IAM user intent.",
+          "RemediationProcedure": "Perform the following to setup the metric filter, alarm, SNS topic, and subscription:  1. Create a metric filter based on filter pattern provided which checks for unauthorized API calls and the `` taken from audit step 1. ``` aws logs put-metric-filter --log-group-name \"cloudtrail_log_group_name\" --filter-name \"\" --metric-transformations metricName=unauthorized_api_calls_metric,metricNamespace=CISBenchmark,metricValue=1 --filter-pattern \"{ ($.errorCode = \"*UnauthorizedOperation\") || ($.errorCode = \"AccessDenied*\") || ($.sourceIPAddress!=\"delivery.logs.amazonaws.com\") || ($.eventName!=\"HeadBucket\") }\" ```  **Note**: You can choose your own metricName and metricNamespace strings. Using the same metricNamespace for all Foundations Benchmark metrics will group them together.  2. Create an SNS topic that the alarm will notify ``` aws sns create-topic --name  ``` **Note**: you can execute this command once and then re-use the same topic for all monitoring alarms. **Note**: Capture the TopicArn displayed when creating the SNS Topic in Step 2.  3. Create an SNS subscription to the topic created in step 2 ``` aws sns subscribe --topic-arn  --protocol  --notification-endpoint  ```  **Note**: you can execute this command once and then re-use the SNS subscription for all monitoring alarms.  4. Create an alarm that is associated with the CloudWatch Logs Metric Filter created in step 1 and an SNS topic created in step 2 ``` aws cloudwatch put-metric-alarm --alarm-name \"unauthorized_api_calls_alarm\" --metric-name \"unauthorized_api_calls_metric\" --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --namespace \"CISBenchmark\" --alarm-actions  ```",
+          "AuditProcedure": "Perform the following to ensure that there is at least one active multi-region CloudTrail with prescribed metric filters and alarms configured:  1. Identify the log group name configured for use with active multi-region CloudTrail:  - List all CloudTrails: `aws cloudtrail describe-trails`  - Identify Multi region Cloudtrails: `Trails with \"IsMultiRegionTrail\" set to true`  - From value associated with \"Name\":` note ``  - From value associated with \"CloudWatchLogsLogGroupArn\" note   Example: for CloudWatchLogsLogGroupArn that looks like arn:aws:logs:::log-group:NewGroup:*,  would be NewGroup  - Ensure Identified Multi region CloudTrail is active  `aws cloudtrail get-trail-status --name `  ensure `IsLogging` is set to `TRUE`  - Ensure identified Multi-region Cloudtrail captures all Management Events  `aws cloudtrail get-event-selectors --trail-name <\"Name\" as shown in describe-trails>`  Ensure there is at least one Event Selector for a Trail with `IncludeManagementEvents` set to `true` and `ReadWriteType` set to `All`  2. Get a list of all associated metric filters for this `` that you captured in step 1:  ``` aws logs describe-metric-filters --log-group-name \"\" ```  3. Ensure the output from the above command contains the following:  ``` \"filterPattern\": \"{ ($.errorCode = *UnauthorizedOperation) || ($.errorCode = AccessDenied*) || ($.sourceIPAddress!=delivery.logs.amazonaws.com) || ($.eventName!=HeadBucket) }\", ```  4. Note the \"filterName\" `` value associated with the `filterPattern` found in step 3.  5. Get a list of CloudWatch alarms and filter on the `` captured in step 4.  ``` aws cloudwatch describe-alarms --query \"MetricAlarms[?MetricName == `unauthorized_api_calls_metric`]\" ```  6. Note the `AlarmActions` value - this will provide the SNS topic ARN value.  7. Ensure there is at least one active subscriber to the SNS topic  ``` aws sns list-subscriptions-by-topic --topic-arn   ``` at least one subscription should have \"SubscriptionArn\" with valid aws ARN.  ``` Example of valid \"SubscriptionArn\": \"arn:aws:sns::::\" ```",
+          "AdditionalInformation": "Configuring log metric filter and alarm on Multi-region (global) CloudTrail - ensures that activities from all regions (used as well as unused) are monitored - ensures that activities on all supported global services are monitored - ensures that all management events across all regions are monitored",
+          "References": "https://aws.amazon.com/sns/:https://docs.aws.amazon.com/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html:https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudwatch-alarms-for-cloudtrail.html:https://docs.aws.amazon.com/sns/latest/dg/SubscribeTopic.html"
+        }
+      ]
+    },
+    {
+      "Id": "4.10",
+      "Description": "Ensure a log metric filter and alarm exist for security group changes",
+      "Checks": [
+        "cloudwatch_log_metric_filter_security_group_changes"
+      ],
+      "Attributes": [
+        {
+          "Section": "4. Monitoring",
+          "Profile": "Level 2",
+          "AssessmentStatus": "Automated",
+          "Description": "Real-time monitoring of API calls can be achieved by directing CloudTrail Logs to CloudWatch Logs and establishing corresponding metric filters and alarms. Security Groups are a stateful packet filter that controls ingress and egress traffic within a VPC. It is recommended that a metric filter and alarm be established for detecting changes to Security Groups.",
+          "RationaleStatement": "Monitoring changes to security group will help ensure that resources and services are not unintentionally exposed.",
+          "ImpactStatement": "",
+          "RemediationProcedure": "Perform the following to setup the metric filter, alarm, SNS topic, and subscription:  1. Create a metric filter based on filter pattern provided which checks for security groups changes and the `` taken from audit step 1. ``` aws logs put-metric-filter --log-group-name \"\" --filter-name \"\" --metric-transformations metricName= \"\" ,metricNamespace=\"CISBenchmark\",metricValue=1 --filter-pattern \"{ ($.eventName = AuthorizeSecurityGroupIngress) || ($.eventName = AuthorizeSecurityGroupEgress) || ($.eventName = RevokeSecurityGroupIngress) || ($.eventName = RevokeSecurityGroupEgress) || ($.eventName = CreateSecurityGroup) || ($.eventName = DeleteSecurityGroup) }\" ```  **Note**: You can choose your own metricName and metricNamespace strings. Using the same metricNamespace for all Foundations Benchmark metrics will group them together.  2. Create an SNS topic that the alarm will notify ``` aws sns create-topic --name \"\" ```  **Note**: you can execute this command once and then re-use the same topic for all monitoring alarms.  3. Create an SNS subscription to the topic created in step 2 ``` aws sns subscribe --topic-arn \"\" --protocol  --notification-endpoint \"\" ```  **Note**: you can execute this command once and then re-use the SNS subscription for all monitoring alarms.  4. Create an alarm that is associated with the CloudWatch Logs Metric Filter created in step 1 and an SNS topic created in step 2 ``` aws cloudwatch put-metric-alarm --alarm-name \"\" --metric-name \"\" --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --namespace \"CISBenchmark\" --alarm-actions \"\" ```",
+          "AuditProcedure": "Perform the following to ensure that there is at least one active multi-region CloudTrail with prescribed metric filters and alarms configured:  1. Identify the log group name configured for use with active multi-region CloudTrail:  - List all CloudTrails: `aws cloudtrail describe-trails`  - Identify Multi region Cloudtrails: `Trails with \"IsMultiRegionTrail\" set to true`  - From value associated with CloudWatchLogsLogGroupArn note ``  Example: for CloudWatchLogsLogGroupArn that looks like `arn:aws:logs:::log-group:NewGroup:*`, `` would be `NewGroup`  - Ensure Identified Multi region CloudTrail is active  `aws cloudtrail get-trail-status --name `  ensure `IsLogging` is set to `TRUE`  - Ensure identified Multi-region Cloudtrail captures all Management Events  `aws cloudtrail get-event-selectors --trail-name `  Ensure there is at least one Event Selector for a Trail with `IncludeManagementEvents` set to `true` and `ReadWriteType` set to `All`  2. Get a list of all associated metric filters for this ``: ``` aws logs describe-metric-filters --log-group-name \"\" ``` 3. Ensure the output from the above command contains the following: ``` \"filterPattern\": \"{ ($.eventName = AuthorizeSecurityGroupIngress) || ($.eventName = AuthorizeSecurityGroupEgress) || ($.eventName = RevokeSecurityGroupIngress) || ($.eventName = RevokeSecurityGroupEgress) || ($.eventName = CreateSecurityGroup) || ($.eventName = DeleteSecurityGroup) }\" ``` 4. Note the `` value associated with the `filterPattern` found in step 3.  5. Get a list of CloudWatch alarms and filter on the `` captured in step 4. ``` aws cloudwatch describe-alarms --query \"MetricAlarms[?MetricName== '']\" ``` 6. Note the `AlarmActions` value - this will provide the SNS topic ARN value.  7. Ensure there is at least one active subscriber to the SNS topic ``` aws sns list-subscriptions-by-topic --topic-arn   ``` at least one subscription should have \"SubscriptionArn\" with valid aws ARN. ``` Example of valid \"SubscriptionArn\": \"arn:aws:sns::::\" ```",
+          "AdditionalInformation": "Configuring log metric filter and alarm on Multi-region (global) CloudTrail - ensures that activities from all regions (used as well as unused) are monitored - ensures that activities on all supported global services are monitored - ensures that all management events across all regions are monitored",
+          "References": "https://docs.aws.amazon.com/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html:https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudwatch-alarms-for-cloudtrail.html:https://docs.aws.amazon.com/sns/latest/dg/SubscribeTopic.html"
+        }
+      ]
+    },
+    {
+      "Id": "4.11",
+      "Description": "Ensure a log metric filter and alarm exist for changes to Network Access Control Lists (NACL)",
+      "Checks": [
+        "cloudwatch_changes_to_network_acls_alarm_configured"
+      ],
+      "Attributes": [
+        {
+          "Section": "4. Monitoring",
+          "Profile": "Level 2",
+          "AssessmentStatus": "Automated",
+          "Description": "Real-time monitoring of API calls can be achieved by directing CloudTrail Logs to CloudWatch Logs and establishing corresponding metric filters and alarms. NACLs are used as a stateless packet filter to control ingress and egress traffic for subnets within a VPC. It is recommended that a metric filter and alarm be established for changes made to NACLs.",
+          "RationaleStatement": "Monitoring changes to NACLs will help ensure that AWS resources and services are not unintentionally exposed.",
+          "ImpactStatement": "",
+          "RemediationProcedure": "Perform the following to setup the metric filter, alarm, SNS topic, and subscription:  1. Create a metric filter based on filter pattern provided which checks for NACL changes and the `` taken from audit step 1. ``` aws logs put-metric-filter --log-group-name  --filter-name `` --metric-transformations metricName= `` ,metricNamespace='CISBenchmark',metricValue=1 --filter-pattern '{ ($.eventName = CreateNetworkAcl) || ($.eventName = CreateNetworkAclEntry) || ($.eventName = DeleteNetworkAcl) || ($.eventName = DeleteNetworkAclEntry) || ($.eventName = ReplaceNetworkAclEntry) || ($.eventName = ReplaceNetworkAclAssociation) }' ```  **Note**: You can choose your own metricName and metricNamespace strings. Using the same metricNamespace for all Foundations Benchmark metrics will group them together.  2. Create an SNS topic that the alarm will notify ``` aws sns create-topic --name  ```  **Note**: you can execute this command once and then re-use the same topic for all monitoring alarms.  3. Create an SNS subscription to the topic created in step 2 ``` aws sns subscribe --topic-arn  --protocol  --notification-endpoint  ```  **Note**: you can execute this command once and then re-use the SNS subscription for all monitoring alarms.  4. Create an alarm that is associated with the CloudWatch Logs Metric Filter created in step 1 and an SNS topic created in step 2 ``` aws cloudwatch put-metric-alarm --alarm-name `` --metric-name `` --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --namespace 'CISBenchmark' --alarm-actions  ```",
+          "AuditProcedure": "Perform the following to ensure that there is at least one active multi-region CloudTrail with prescribed metric filters and alarms configured:  1. Identify the log group name configured for use with active multi-region CloudTrail:  - List all CloudTrails: `aws cloudtrail describe-trails`  - Identify Multi region Cloudtrails: `Trails with \"IsMultiRegionTrail\" set to true`  - From value associated with CloudWatchLogsLogGroupArn note ``  Example: for CloudWatchLogsLogGroupArn that looks like `arn:aws:logs:::log-group:NewGroup:*`, `` would be `NewGroup`  - Ensure Identified Multi region CloudTrail is active  `aws cloudtrail get-trail-status --name `  ensure `IsLogging` is set to `TRUE`  - Ensure identified Multi-region Cloudtrail captures all Management Events  `aws cloudtrail get-event-selectors --trail-name `  Ensure there is at least one Event Selector for a Trail with `IncludeManagementEvents` set to `true` and `ReadWriteType` set to `All`  2. Get a list of all associated metric filters for this ``: ``` aws logs describe-metric-filters --log-group-name \"\" ``` 3. Ensure the output from the above command contains the following: ``` \"filterPattern\": \"{ ($.eventName = CreateNetworkAcl) || ($.eventName = CreateNetworkAclEntry) || ($.eventName = DeleteNetworkAcl) || ($.eventName = DeleteNetworkAclEntry) || ($.eventName = ReplaceNetworkAclEntry) || ($.eventName = ReplaceNetworkAclAssociation) }\" ``` 4. Note the `` value associated with the `filterPattern` found in step 3.  5. Get a list of CloudWatch alarms and filter on the `` captured in step 4. ``` aws cloudwatch describe-alarms --query 'MetricAlarms[?MetricName== ``]' ``` 6. Note the `AlarmActions` value - this will provide the SNS topic ARN value.  7. Ensure there is at least one active subscriber to the SNS topic ``` aws sns list-subscriptions-by-topic --topic-arn   ``` at least one subscription should have \"SubscriptionArn\" with valid aws ARN. ``` Example of valid \"SubscriptionArn\": \"arn:aws:sns::::\" ```",
+          "AdditionalInformation": "Configuring log metric filter and alarm on Multi-region (global) CloudTrail - ensures that activities from all regions (used as well as unused) are monitored - ensures that activities on all supported global services are monitored - ensures that all management events across all regions are monitored",
+          "References": "https://docs.aws.amazon.com/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html:https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudwatch-alarms-for-cloudtrail.html:https://docs.aws.amazon.com/sns/latest/dg/SubscribeTopic.html"
+        }
+      ]
+    },
+    {
+      "Id": "4.12",
+      "Description": "Ensure a log metric filter and alarm exist for changes to network gateways",
+      "Checks": [
+        "cloudwatch_changes_to_network_gateways_alarm_configured"
+      ],
+      "Attributes": [
+        {
+          "Section": "4. Monitoring",
+          "Profile": "Level 1",
+          "AssessmentStatus": "Automated",
+          "Description": "Real-time monitoring of API calls can be achieved by directing CloudTrail Logs to CloudWatch Logs and establishing corresponding metric filters and alarms. Network gateways are required to send/receive traffic to a destination outside of a VPC. It is recommended that a metric filter and alarm be established for changes to network gateways.",
+          "RationaleStatement": "Monitoring changes to network gateways will help ensure that all ingress/egress traffic traverses the VPC border via a controlled path.",
+          "ImpactStatement": "",
+          "RemediationProcedure": "Perform the following to setup the metric filter, alarm, SNS topic, and subscription:  1. Create a metric filter based on filter pattern provided which checks for network gateways changes and the `` taken from audit step 1. ``` aws logs put-metric-filter --log-group-name  --filter-name `` --metric-transformations metricName= `` ,metricNamespace='CISBenchmark',metricValue=1 --filter-pattern '{ ($.eventName = CreateCustomerGateway) || ($.eventName = DeleteCustomerGateway) || ($.eventName = AttachInternetGateway) || ($.eventName = CreateInternetGateway) || ($.eventName = DeleteInternetGateway) || ($.eventName = DetachInternetGateway) }' ```  **Note**: You can choose your own metricName and metricNamespace strings. Using the same metricNamespace for all Foundations Benchmark metrics will group them together.  2. Create an SNS topic that the alarm will notify ``` aws sns create-topic --name  ```  **Note**: you can execute this command once and then re-use the same topic for all monitoring alarms.  3. Create an SNS subscription to the topic created in step 2 ``` aws sns subscribe --topic-arn  --protocol  --notification-endpoint  ```  **Note**: you can execute this command once and then re-use the SNS subscription for all monitoring alarms.  4. Create an alarm that is associated with the CloudWatch Logs Metric Filter created in step 1 and an SNS topic created in step 2 ``` aws cloudwatch put-metric-alarm --alarm-name `` --metric-name `` --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --namespace 'CISBenchmark' --alarm-actions  ```",
+          "AuditProcedure": "Perform the following to ensure that there is at least one active multi-region CloudTrail with prescribed metric filters and alarms configured:  1. Identify the log group name configured for use with active multi-region CloudTrail:  - List all CloudTrails: `aws cloudtrail describe-trails`  - Identify Multi region Cloudtrails: `Trails with \"IsMultiRegionTrail\" set to true`  - From value associated with CloudWatchLogsLogGroupArn note ``  Example: for CloudWatchLogsLogGroupArn that looks like `arn:aws:logs:::log-group:NewGroup:*`, `` would be `NewGroup`  - Ensure Identified Multi region CloudTrail is active  `aws cloudtrail get-trail-status --name `  ensure `IsLogging` is set to `TRUE`  - Ensure identified Multi-region Cloudtrail captures all Management Events  `aws cloudtrail get-event-selectors --trail-name `  Ensure there is at least one Event Selector for a Trail with `IncludeManagementEvents` set to `true` and `ReadWriteType` set to `All`  2. Get a list of all associated metric filters for this ``: ``` aws logs describe-metric-filters --log-group-name \"\" ``` 3. Ensure the output from the above command contains the following: ``` \"filterPattern\": \"{ ($.eventName = CreateCustomerGateway) || ($.eventName = DeleteCustomerGateway) || ($.eventName = AttachInternetGateway) || ($.eventName = CreateInternetGateway) || ($.eventName = DeleteInternetGateway) || ($.eventName = DetachInternetGateway) }\" ``` 4. Note the `` value associated with the `filterPattern` found in step 3.  5. Get a list of CloudWatch alarms and filter on the `` captured in step 4. ``` aws cloudwatch describe-alarms --query 'MetricAlarms[?MetricName== ``]' ``` 6. Note the `AlarmActions` value - this will provide the SNS topic ARN value.  7. Ensure there is at least one active subscriber to the SNS topic ``` aws sns list-subscriptions-by-topic --topic-arn   ``` at least one subscription should have \"SubscriptionArn\" with valid aws ARN. ``` Example of valid \"SubscriptionArn\": \"arn:aws:sns::::\" ```",
+          "AdditionalInformation": "Configuring log metric filter and alarm on Multi-region (global) CloudTrail - ensures that activities from all regions (used as well as unused) are monitored - ensures that activities on all supported global services are monitored - ensures that all management events across all regions are monitored",
+          "References": "https://docs.aws.amazon.com/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html:https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudwatch-alarms-for-cloudtrail.html:https://docs.aws.amazon.com/sns/latest/dg/SubscribeTopic.html"
+        }
+      ]
+    },
+    {
+      "Id": "4.13",
+      "Description": "Ensure route table changes are monitored",
+      "Checks": [
+        "cloudwatch_changes_to_network_route_tables_alarm_configured"
+      ],
+      "Attributes": [
+        {
+          "Section": "4. Monitoring",
+          "Profile": "Level 1",
+          "AssessmentStatus": "Automated",
+          "Description": "Real-time monitoring of API calls can be achieved by directing CloudTrail Logs to CloudWatch Logs and establishing corresponding metric filters and alarms. Routing tables are used to route network traffic between subnets and to network gateways. It is recommended that a metric filter and alarm be established for changes to route tables.",
+          "RationaleStatement": "CloudWatch is an AWS native service that allows you to observe and monitor resources and applications. CloudTrail Logs can also be sent to an external Security informationand event management (SIEM) environment for monitoring and alerting.Monitoring changes to route tables will help ensure that all VPC traffic flows through anexpected path and prevent any accidental or intentional modifications that may lead touncontrolled network traffic. An alarm should be triggered every time an AWS API call isperformed to create, replace, delete, or disassociate a Route Table.",
+          "ImpactStatement": "",
+          "RemediationProcedure": "If you are using CloudTrails and CloudWatch, perform the following to setup the metric filter, alarm, SNS topic, and subscription: 1. Create a metric filter based on filter pattern provided which checks for route table changes and the  taken from audit step 1. aws logs put-metric-filter --log-group-name  -- filter-name `` --metric-transformations metricName= `` ,metricNamespace='CISBenchmark',metricValue=1 --filter-pattern '{ ($.eventName = CreateRoute) || ($.eventName = CreateRouteTable) || ($.eventName = ReplaceRoute) || ($.eventName = ReplaceRouteTableAssociation) || ($.eventName = DeleteRouteTable) || ($.eventName = DeleteRoute) || ($.eventName = DisassociateRouteTable) }' Note: You can choose your own metricName and metricNamespace strings. Using the same metricNamespace for all Foundations Benchmark metrics will group them together. 2. Create an SNS topic that the alarm will notify aws sns create-topic --name  Note: you can execute this command once and then re-use the same topic for all monitoring alarms. 3. Create an SNS subscription to the topic created in step 2 aws sns subscribe --topic-arn  --protocol  - -notification-endpoint  Note: you can execute this command once and then re-use the SNS subscription for all monitoring alarms. 4. Create an alarm that is associated with the CloudWatch Logs Metric Filter created in step 1 and an SNS topic created in step 2 aws cloudwatch put-metric-alarm --alarm-name `` --metric-name `` --statistic Sum --period 300 - -threshold 1 --comparison-operator GreaterThanOrEqualToThreshold -- evaluation-periods 1 --namespace 'CISBenchmark' --alarm-actions ",
+          "AuditProcedure": "If you are using CloudTrails and CloudWatch , perform the following to ensure that there is at least one active multi-region CloudTrail with prescribed metric filters and alarmsconfigured:1. Identify the log group name configured for use with active multi-region CloudTrail:• List all CloudTrails: aws cloudtrail describe-trails• Identify Multi region Cloudtrails: Trails with 'IsMultiRegionTrail' set totrue• From value associated with CloudWatchLogsLogGroupArn noteExample: for CloudWatchLogsLogGroupArn that looks likearn:aws:logs:::log-group:NewGroup:*, would be NewGroup• Ensure Identified Multi region CloudTrail is activeaws cloudtrail get-trail-status --name ensure IsLogging is set to TRUE• Ensure identified Multi-region Cloudtrail captures all Management Eventsaws cloudtrail get-event-selectors --trail-name Ensure there is at least one Event Selector for a Trail with IncludeManagementEvents setto true and ReadWriteType set to All2. Get a list of all associated metric filters for this :aws logs describe-metric-filters --log-group-name''3. Ensure the output from the above command contains the following:'filterPattern': '{($.eventSource = ec2.amazonaws.com) && ($.eventName =CreateRoute) || ($.eventName = CreateRouteTable) || ($.eventName =ReplaceRoute) || ($.eventName = ReplaceRouteTableAssociation) || ($.eventName= DeleteRouteTable) || ($.eventName = DeleteRoute) || ($.eventName =DisassociateRouteTable) }'4. Note the  value associated with thefilterPattern found in step 3.5. Get a list of CloudWatch alarms and filter on the captured in step 4.aws cloudwatch describe-alarms --query 'MetricAlarms[?MetricName==``]'6. Note the AlarmActions value - this will provide the SNS topic ARN value.7. Ensure there is at least one active subscriber to the SNS topicaws sns list-subscriptions-by-topic --topic-arn at least one subscription should have 'SubscriptionArn' with valid aws ARN.Example of valid 'SubscriptionArn':'arn:aws:sns::::'",
+          "AdditionalInformation": "Configuring log metric filter and alarm on Multi-region (global) CloudTrail - ensures that activities from all regions (used as well as unused) are monitored - ensures that activities on all supported global services are monitored - ensures that all management events across all regions are monitored",
+          "References": "https://docs.aws.amazon.com/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html:https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudwatch-alarms-for-cloudtrail.html:https://docs.aws.amazon.com/sns/latest/dg/SubscribeTopic.html"
+        }
+      ]
+    },
+    {
+      "Id": "4.14",
+      "Description": "Ensure a log metric filter and alarm exist for VPC changes",
+      "Checks": [
+        "cloudwatch_changes_to_vpcs_alarm_configured"
+      ],
+      "Attributes": [
+        {
+          "Section": "4. Monitoring",
+          "Profile": "Level 1",
+          "AssessmentStatus": "Automated",
+          "Description": "Real-time monitoring of API calls can be achieved by directing CloudTrail Logs to CloudWatch Logs and establishing corresponding metric filters and alarms. It is possible to have more than 1 VPC within an account, in addition it is also possible to create a peer connection between 2 VPCs enabling network traffic to route between VPCs. It is recommended that a metric filter and alarm be established for changes made to VPCs.",
+          "RationaleStatement": "Monitoring changes to VPC will help ensure VPC traffic flow is not getting impacted.",
+          "ImpactStatement": "",
+          "RemediationProcedure": "Perform the following to setup the metric filter, alarm, SNS topic, and subscription:  1. Create a metric filter based on filter pattern provided which checks for VPC changes and the `` taken from audit step 1. ``` aws logs put-metric-filter --log-group-name  --filter-name `` --metric-transformations metricName= `` ,metricNamespace='CISBenchmark',metricValue=1 --filter-pattern '{ ($.eventName = CreateVpc) || ($.eventName = DeleteVpc) || ($.eventName = ModifyVpcAttribute) || ($.eventName = AcceptVpcPeeringConnection) || ($.eventName = CreateVpcPeeringConnection) || ($.eventName = DeleteVpcPeeringConnection) || ($.eventName = RejectVpcPeeringConnection) || ($.eventName = AttachClassicLinkVpc) || ($.eventName = DetachClassicLinkVpc) || ($.eventName = DisableVpcClassicLink) || ($.eventName = EnableVpcClassicLink) }' ```  **Note**: You can choose your own metricName and metricNamespace strings. Using the same metricNamespace for all Foundations Benchmark metrics will group them together.  2. Create an SNS topic that the alarm will notify ``` aws sns create-topic --name  ```  **Note**: you can execute this command once and then re-use the same topic for all monitoring alarms.  3. Create an SNS subscription to the topic created in step 2 ``` aws sns subscribe --topic-arn  --protocol  --notification-endpoint  ```  **Note**: you can execute this command once and then re-use the SNS subscription for all monitoring alarms.  4. Create an alarm that is associated with the CloudWatch Logs Metric Filter created in step 1 and an SNS topic created in step 2 ``` aws cloudwatch put-metric-alarm --alarm-name `` --metric-name `` --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --namespace 'CISBenchmark' --alarm-actions  ```",
+          "AuditProcedure": "Perform the following to ensure that there is at least one active multi-region CloudTrail with prescribed metric filters and alarms configured:  1. Identify the log group name configured for use with active multi-region CloudTrail:  - List all CloudTrails: `aws cloudtrail describe-trails`  - Identify Multi region Cloudtrails: `Trails with \"IsMultiRegionTrail\" set to true`  - From value associated with CloudWatchLogsLogGroupArn note ``  Example: for CloudWatchLogsLogGroupArn that looks like `arn:aws:logs:::log-group:NewGroup:*`, `` would be `NewGroup`  - Ensure Identified Multi region CloudTrail is active  `aws cloudtrail get-trail-status --name `  ensure `IsLogging` is set to `TRUE`  - Ensure identified Multi-region Cloudtrail captures all Management Events  `aws cloudtrail get-event-selectors --trail-name `  Ensure there is at least one Event Selector for a Trail with `IncludeManagementEvents` set to `true` and `ReadWriteType` set to `All`  2. Get a list of all associated metric filters for this ``:  ``` aws logs describe-metric-filters --log-group-name \"\" ```  3. Ensure the output from the above command contains the following:  ``` \"filterPattern\": \"{ ($.eventName = CreateVpc) || ($.eventName = DeleteVpc) || ($.eventName = ModifyVpcAttribute) || ($.eventName = AcceptVpcPeeringConnection) || ($.eventName = CreateVpcPeeringConnection) || ($.eventName = DeleteVpcPeeringConnection) || ($.eventName = RejectVpcPeeringConnection) || ($.eventName = AttachClassicLinkVpc) || ($.eventName = DetachClassicLinkVpc) || ($.eventName = DisableVpcClassicLink) || ($.eventName = EnableVpcClassicLink) }\" ```  4. Note the `` value associated with the `filterPattern` found in step 3.  5. Get a list of CloudWatch alarms and filter on the `` captured in step 4.  ``` aws cloudwatch describe-alarms --query 'MetricAlarms[?MetricName== ``]' ```  6. Note the `AlarmActions` value - this will provide the SNS topic ARN value.  7. Ensure there is at least one active subscriber to the SNS topic  ``` aws sns list-subscriptions-by-topic --topic-arn   ``` at least one subscription should have \"SubscriptionArn\" with valid aws ARN.  ``` Example of valid \"SubscriptionArn\": \"arn:aws:sns::::\" ```",
+          "AdditionalInformation": "Configuring log metric filter and alarm on Multi-region (global) CloudTrail - ensures that activities from all regions (used as well as unused) are monitored - ensures that activities on all supported global services are monitored - ensures that all management events across all regions are monitored",
+          "References": "https://docs.aws.amazon.com/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html:https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudwatch-alarms-for-cloudtrail.html:https://docs.aws.amazon.com/sns/latest/dg/SubscribeTopic.html"
+        }
+      ]
+    },
+    {
+      "Id": "4.15",
+      "Description": "Ensure a log metric filter and alarm exists for AWS Organizations changes",
+      "Checks": [
+        "cloudwatch_log_metric_filter_aws_organizations_changes"
+      ],
+      "Attributes": [
+        {
+          "Section": "4. Monitoring",
+          "Profile": "Level 1",
+          "AssessmentStatus": "Automated",
+          "Description": "Real-time monitoring of API calls can be achieved by directing CloudTrail Logs to CloudWatch Logs and establishing corresponding metric filters and alarms. It is recommended that a metric filter and alarm be established for AWS Organizations changes made in the master AWS Account.",
+          "RationaleStatement": "Monitoring AWS Organizations changes can help you prevent any unwanted, accidental or intentional modifications that may lead to unauthorized access or other security breaches. This monitoring technique helps you to ensure that any unexpected changes performed within your AWS Organizations can be investigated and any unwanted changes can be rolled back.",
+          "ImpactStatement": "",
+          "RemediationProcedure": "Perform the following to setup the metric filter, alarm, SNS topic, and subscription:  1. Create a metric filter based on filter pattern provided which checks for AWS Organizations changes and the `` taken from audit step 1: ``` aws logs put-metric-filter --log-group-name  --filter-name `` --metric-transformations metricName= `` ,metricNamespace='CISBenchmark',metricValue=1 --filter-pattern '{ ($.eventSource = organizations.amazonaws.com) && (($.eventName = \"AcceptHandshake\") || ($.eventName = \"AttachPolicy\") || ($.eventName = \"CreateAccount\") || ($.eventName = \"CreateOrganizationalUnit\") || ($.eventName = \"CreatePolicy\") || ($.eventName = \"DeclineHandshake\") || ($.eventName = \"DeleteOrganization\") || ($.eventName = \"DeleteOrganizationalUnit\") || ($.eventName = \"DeletePolicy\") || ($.eventName = \"DetachPolicy\") || ($.eventName = \"DisablePolicyType\") || ($.eventName = \"EnablePolicyType\") || ($.eventName = \"InviteAccountToOrganization\") || ($.eventName = \"LeaveOrganization\") || ($.eventName = \"MoveAccount\") || ($.eventName = \"RemoveAccountFromOrganization\") || ($.eventName = \"UpdatePolicy\") || ($.eventName = \"UpdateOrganizationalUnit\")) }' ``` **Note:** You can choose your own metricName and metricNamespace strings. Using the same metricNamespace for all Foundations Benchmark metrics will group them together.  2. Create an SNS topic that the alarm will notify: ``` aws sns create-topic --name  ``` **Note:** you can execute this command once and then re-use the same topic for all monitoring alarms.  3. Create an SNS subscription to the topic created in step 2: ``` aws sns subscribe --topic-arn  --protocol  --notification-endpoint  ``` **Note:** you can execute this command once and then re-use the SNS subscription for all monitoring alarms.  4. Create an alarm that is associated with the CloudWatch Logs Metric Filter created in step 1 and an SNS topic created in step 2: ``` aws cloudwatch put-metric-alarm --alarm-name `` --metric-name `` --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --namespace 'CISBenchmark' --alarm-actions  ```",
+          "AuditProcedure": "1. Perform the following to ensure that there is at least one active multi-region CloudTrail with prescribed metric filters and alarms configured: - Identify the log group name configured for use with active multi-region CloudTrail: - List all CloudTrails:  ``` aws cloudtrail describe-trails ``` - Identify Multi region Cloudtrails, Trails with `\"IsMultiRegionTrail\"` set to true - From value associated with CloudWatchLogsLogGroupArn note   **Example:** for CloudWatchLogsLogGroupArn that looks like arn:aws:logs:::log-group:NewGroup:*,  would be NewGroup  - Ensure Identified Multi region CloudTrail is active: ``` aws cloudtrail get-trail-status --name  ``` Ensure `IsLogging` is set to `TRUE`  - Ensure identified Multi-region Cloudtrail captures all Management Events: ``` aws cloudtrail get-event-selectors --trail-name  ``` - Ensure there is at least one Event Selector for a Trail with `IncludeManagementEvents` set to true and `ReadWriteType` set to `All`.  2. Get a list of all associated metric filters for this : ``` aws logs describe-metric-filters --log-group-name \"\" ``` 3. Ensure the output from the above command contains the following: ``` \"filterPattern\": \"{ ($.eventSource = organizations.amazonaws.com) && (($.eventName = \"AcceptHandshake\") || ($.eventName = \"AttachPolicy\") || ($.eventName = \"CreateAccount\") || ($.eventName = \"CreateOrganizationalUnit\") || ($.eventName = \"CreatePolicy\") || ($.eventName = \"DeclineHandshake\") || ($.eventName = \"DeleteOrganization\") || ($.eventName = \"DeleteOrganizationalUnit\") || ($.eventName = \"DeletePolicy\") || ($.eventName = \"DetachPolicy\") || ($.eventName = \"DisablePolicyType\") || ($.eventName = \"EnablePolicyType\") || ($.eventName = \"InviteAccountToOrganization\") || ($.eventName = \"LeaveOrganization\") || ($.eventName = \"MoveAccount\") || ($.eventName = \"RemoveAccountFromOrganization\") || ($.eventName = \"UpdatePolicy\") || ($.eventName = \"UpdateOrganizationalUnit\")) }\" ``` 4. Note the `` value associated with the filterPattern found in step 3.  5. Get a list of CloudWatch alarms and filter on the `` captured in step 4: ``` aws cloudwatch describe-alarms --query 'MetricAlarms[?MetricName== ``]' ``` 6. Note the AlarmActions value - this will provide the SNS topic ARN value.  7. Ensure there is at least one active subscriber to the SNS topic: ``` aws sns list-subscriptions-by-topic --topic-arn   ``` at least one subscription should have \"SubscriptionArn\" with valid aws ARN. Example of valid \"SubscriptionArn\":  ``` \"arn:aws:sns::::\" ```",
+          "AdditionalInformation": "",
+          "References": "https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudwatch-alarms-for-cloudtrail.html:https://docs.aws.amazon.com/organizations/latest/userguide/orgs_security_incident-response.html"
+        }
+      ]
+    },
+    {
+      "Id": "4.16",
+      "Description": "Ensure AWS Security Hub is enabled",
+      "Checks": [
+        "securityhub_enabled"
+      ],
+      "Attributes": [
+        {
+          "Section": "4. Monitoring",
+          "Profile": "Level 2",
+          "AssessmentStatus": "Automated",
+          "Description": "Security Hub collects security data from across AWS accounts, services, and supported third-party partner products and helps you analyze your security trends and identify the highest priority security issues. When you enable Security Hub, it begins to consume, aggregate, organize, and prioritize findings from AWS services that you have enabled, such as Amazon GuardDuty, Amazon Inspector, and Amazon Macie. You can also enable integrations with AWS partner security products.",
+          "RationaleStatement": "AWS Security Hub provides you with a comprehensive view of your security state in AWS and helps you check your environment against security industry standards and best practices - enabling you to quickly assess the security posture across your AWS accounts.",
+          "ImpactStatement": "It is recommended AWS Security Hub be enabled in all regions. AWS Security Hub requires AWS Config to be enabled.",
+          "RemediationProcedure": "To grant the permissions required to enable Security Hub, attach the Security Hub managed policy AWSSecurityHubFullAccess to an IAM user, group, or role.  Enabling Security Hub  **From Console:**  1. Use the credentials of the IAM identity to sign in to the Security Hub console. 2. When you open the Security Hub console for the first time, choose Enable AWS Security Hub. 3. On the welcome page, Security standards list the security standards that Security Hub supports. 4. Choose Enable Security Hub.  **From Command Line:**  1. Run the enable-security-hub command. To enable the default standards, include `--enable-default-standards`. ``` aws securityhub enable-security-hub --enable-default-standards ```  2. To enable the security hub without the default standards, include `--no-enable-default-standards`. ``` aws securityhub enable-security-hub --no-enable-default-standards ```",
+          "AuditProcedure": "The process to evaluate AWS Security Hub configuration per region   **From Console:**  1. Sign in to the AWS Management Console and open the AWS Security Hub console at https://console.aws.amazon.com/securityhub/. 2. On the top right of the console, select the target Region. 3. If presented with the Security Hub > Summary page then Security Hub is set-up for the selected region. 4. If presented with Setup Security Hub or Get Started With Security Hub - follow the online instructions. 5. Repeat steps 2 to 4 for each region.",
+          "AdditionalInformation": "",
+          "References": "https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-get-started.html:https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-enable.html#securityhub-enable-api:https://awscli.amazonaws.com/v2/documentation/api/latest/reference/securityhub/enable-security-hub.html"
+        }
+      ]
+    },
+    {
+      "Id": "4.2",
+      "Description": "Ensure a log metric filter and alarm exist for Management Console sign-in without MFA",
+      "Checks": [
+        "cloudwatch_log_metric_filter_sign_in_without_mfa"
+      ],
+      "Attributes": [
+        {
+          "Section": "4. Monitoring",
+          "Profile": "Level 1",
+          "AssessmentStatus": "Automated",
+          "Description": "Real-time monitoring of API calls can be achieved by directing CloudTrail Logs to CloudWatch Logs and establishing corresponding metric filters and alarms. It is recommended that a metric filter and alarm be established for console logins that are not protected by multi-factor authentication (MFA).",
+          "RationaleStatement": "Monitoring for single-factor console logins will increase visibility into accounts that are not protected by MFA.",
+          "ImpactStatement": "",
+          "RemediationProcedure": "Perform the following to setup the metric filter, alarm, SNS topic, and subscription:  1. Create a metric filter based on filter pattern provided which checks for AWS Management Console sign-in without MFA and the `` taken from audit step 1.  Use Command:   ``` aws logs put-metric-filter --log-group-name  --filter-name `` --metric-transformations metricName= `` ,metricNamespace='CISBenchmark',metricValue=1 --filter-pattern '{ ($.eventName = \"ConsoleLogin\") && ($.additionalEventData.MFAUsed != \"Yes\") }' ```  Or (To reduce false positives incase Single Sign-On (SSO) is used in organization):  ``` aws logs put-metric-filter --log-group-name  --filter-name `` --metric-transformations metricName= `` ,metricNamespace='CISBenchmark',metricValue=1 --filter-pattern '{ ($.eventName = \"ConsoleLogin\") && ($.additionalEventData.MFAUsed != \"Yes\") && ($.userIdentity.type = \"IAMUser\") && ($.responseElements.ConsoleLogin = \"Success\") }' ```  **Note**: You can choose your own metricName and metricNamespace strings. Using the same metricNamespace for all Foundations Benchmark metrics will group them together.  2. Create an SNS topic that the alarm will notify ``` aws sns create-topic --name  ```  **Note**: you can execute this command once and then re-use the same topic for all monitoring alarms.  3. Create an SNS subscription to the topic created in step 2 ``` aws sns subscribe --topic-arn  --protocol  --notification-endpoint  ```  **Note**: you can execute this command once and then re-use the SNS subscription for all monitoring alarms.  4. Create an alarm that is associated with the CloudWatch Logs Metric Filter created in step 1 and an SNS topic created in step 2 ``` aws cloudwatch put-metric-alarm --alarm-name `` --metric-name `` --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --namespace 'CISBenchmark' --alarm-actions  ```",
+          "AuditProcedure": "Perform the following to ensure that there is at least one active multi-region CloudTrail with prescribed metric filters and alarms configured:  1. Identify the log group name configured for use with active multi-region CloudTrail:  - List all `CloudTrails`:  ``` aws cloudtrail describe-trails ```  - Identify Multi region Cloudtrails: `Trails with \"IsMultiRegionTrail\" set to true`  - From value associated with CloudWatchLogsLogGroupArn note ``  Example: for CloudWatchLogsLogGroupArn that looks like `arn:aws:logs:::log-group:NewGroup:*`, `` would be `NewGroup`  - Ensure Identified Multi region `CloudTrail` is active  ``` aws cloudtrail get-trail-status --name  ```  Ensure in the output that `IsLogging` is set to `TRUE`  - Ensure identified Multi-region 'Cloudtrail' captures all Management Events  ``` aws cloudtrail get-event-selectors --trail-name  ```  Ensure in the output there is at least one Event Selector for a Trail with `IncludeManagementEvents` set to `true` and `ReadWriteType` set to `All`  2. Get a list of all associated metric filters for this ``: ``` aws logs describe-metric-filters --log-group-name \"\" ``` 3. Ensure the output from the above command contains the following: ``` \"filterPattern\": \"{ ($.eventName = \"ConsoleLogin\") && ($.additionalEventData.MFAUsed != \"Yes\") }\" ```  Or (To reduce false positives incase Single Sign-On (SSO) is used in organization):  ``` \"filterPattern\": \"{ ($.eventName = \"ConsoleLogin\") && ($.additionalEventData.MFAUsed != \"Yes\") && ($.userIdentity.type = \"IAMUser\") && ($.responseElements.ConsoleLogin = \"Success\") }\" ```  4. Note the `` value associated with the `filterPattern` found in step 3.  5. Get a list of CloudWatch alarms and filter on the `` captured in step 4.  ``` aws cloudwatch describe-alarms --query 'MetricAlarms[?MetricName== ``]' ``` 6. Note the `AlarmActions` value - this will provide the SNS topic ARN value.  7. Ensure there is at least one active subscriber to the SNS topic ``` aws sns list-subscriptions-by-topic --topic-arn   ``` at least one subscription should have \"SubscriptionArn\" with valid aws ARN. ``` Example of valid \"SubscriptionArn\": \"arn:aws:sns::::\" ```",
+          "AdditionalInformation": "Configuring log metric filter and alarm on Multi-region (global) CloudTrail - ensures that activities from all regions (used as well as unused) are monitored - ensures that activities on all supported global services are monitored - ensures that all management events across all regions are monitored -Filter pattern set to `{ ($.eventName = \"ConsoleLogin\") && ($.additionalEventData.MFAUsed != \"Yes\") && ($.userIdentity.type = \"IAMUser\") && ($.responseElements.ConsoleLogin = \"Success\"}` reduces false alarms raised when user logs in via SSO account.",
+          "References": "https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/viewing_metrics_with_cloudwatch.html:https://docs.aws.amazon.com/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html:https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudwatch-alarms-for-cloudtrail.html:https://docs.aws.amazon.com/sns/latest/dg/SubscribeTopic.html"
+        }
+      ]
+    },
+    {
+      "Id": "4.3",
+      "Description": "Ensure a log metric filter and alarm exist for usage of 'root' account",
+      "Checks": [
+        "cloudwatch_log_metric_filter_root_usage"
+      ],
+      "Attributes": [
+        {
+          "Section": "4. Monitoring",
+          "Profile": "Level 1",
+          "AssessmentStatus": "Automated",
+          "Description": "Real-time monitoring of API calls can be achieved by directing CloudTrail Logs to CloudWatch Logs and establishing corresponding metric filters and alarms. It is recommended that a metric filter and alarm be established for 'root' login attempts.",
+          "RationaleStatement": "Monitoring for 'root' account logins will provide visibility into the use of a fully privileged account and an opportunity to reduce the use of it.",
+          "ImpactStatement": "",
+          "RemediationProcedure": "Perform the following to setup the metric filter, alarm, SNS topic, and subscription:  1. Create a metric filter based on filter pattern provided which checks for 'Root' account usage and the `` taken from audit step 1. ``` aws logs put-metric-filter --log-group-name `` --filter-name `` --metric-transformations metricName= `` ,metricNamespace='CISBenchmark',metricValue=1 --filter-pattern '{ $.userIdentity.type = \"Root\" && $.userIdentity.invokedBy NOT EXISTS && $.eventType != \"AwsServiceEvent\" }' ```  **Note**: You can choose your own metricName and metricNamespace strings. Using the same metricNamespace for all Foundations Benchmark metrics will group them together.  2. Create an SNS topic that the alarm will notify ``` aws sns create-topic --name  ```  **Note**: you can execute this command once and then re-use the same topic for all monitoring alarms.  3. Create an SNS subscription to the topic created in step 2 ``` aws sns subscribe --topic-arn  --protocol  --notification-endpoint  ```  **Note**: you can execute this command once and then re-use the SNS subscription for all monitoring alarms.  4. Create an alarm that is associated with the CloudWatch Logs Metric Filter created in step 1 and an SNS topic created in step 2 ``` aws cloudwatch put-metric-alarm --alarm-name `` --metric-name `` --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --namespace 'CISBenchmark' --alarm-actions  ```",
+          "AuditProcedure": "Perform the following to ensure that there is at least one active multi-region CloudTrail with prescribed metric filters and alarms configured:  1. Identify the log group name configured for use with active multi-region CloudTrail:  - List all CloudTrails:  `aws cloudtrail describe-trails`  - Identify Multi region Cloudtrails: `Trails with \"IsMultiRegionTrail\" set to true`  - From value associated with CloudWatchLogsLogGroupArn note ``  Example: for CloudWatchLogsLogGroupArn that looks like `arn:aws:logs:::log-group:NewGroup:*`, `` would be `NewGroup`  - Ensure Identified Multi region CloudTrail is active  `aws cloudtrail get-trail-status --name `  ensure `IsLogging` is set to `TRUE`  - Ensure identified Multi-region Cloudtrail captures all Management Events  `aws cloudtrail get-event-selectors --trail-name `  Ensure there is at least one Event Selector for a Trail with `IncludeManagementEvents` set to `true` and `ReadWriteType` set to `All`  2. Get a list of all associated metric filters for this ``:  ``` aws logs describe-metric-filters --log-group-name \"\" ```  3. Ensure the output from the above command contains the following:  ``` \"filterPattern\": \"{ $.userIdentity.type = \"Root\" && $.userIdentity.invokedBy NOT EXISTS && $.eventType != \"AwsServiceEvent\" }\" ```  4. Note the `` value associated with the `filterPattern` found in step 3.  5. Get a list of CloudWatch alarms and filter on the `` captured in step 4.  ``` aws cloudwatch describe-alarms --query 'MetricAlarms[?MetricName== ``]' ```  6. Note the `AlarmActions` value - this will provide the SNS topic ARN value.  7. Ensure there is at least one active subscriber to the SNS topic  ``` aws sns list-subscriptions-by-topic --topic-arn   ``` at least one subscription should have \"SubscriptionArn\" with valid aws ARN.  ``` Example of valid \"SubscriptionArn\": \"arn:aws:sns::::\" ```",
+          "AdditionalInformation": "**Configuring log metric filter and alarm on Multi-region (global) CloudTrail**  - ensures that activities from all regions (used as well as unused) are monitored  - ensures that activities on all supported global services are monitored  - ensures that all management events across all regions are monitored",
+          "References": "https://docs.aws.amazon.com/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html:https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudwatch-alarms-for-cloudtrail.html:https://docs.aws.amazon.com/sns/latest/dg/SubscribeTopic.html"
+        }
+      ]
+    },
+    {
+      "Id": "4.4",
+      "Description": "Ensure a log metric filter and alarm exist for IAM policy changes",
+      "Checks": [
+        "cloudwatch_log_metric_filter_policy_changes"
+      ],
+      "Attributes": [
+        {
+          "Section": "4. Monitoring",
+          "Profile": "Level 1",
+          "AssessmentStatus": "Automated",
+          "Description": "Real-time monitoring of API calls can be achieved by directing CloudTrail Logs to CloudWatch Logs and establishing corresponding metric filters and alarms. It is recommended that a metric filter and alarm be established changes made to Identity and Access Management (IAM) policies.",
+          "RationaleStatement": "Monitoring changes to IAM policies will help ensure authentication and authorization controls remain intact.",
+          "ImpactStatement": "",
+          "RemediationProcedure": "Perform the following to setup the metric filter, alarm, SNS topic, and subscription:  1. Create a metric filter based on filter pattern provided which checks for IAM policy changes and the `` taken from audit step 1. ``` aws logs put-metric-filter --log-group-name `` --filter-name `` --metric-transformations metricName= `` ,metricNamespace='CISBenchmark',metricValue=1 --filter-pattern '{($.eventName=DeleteGroupPolicy)||($.eventName=DeleteRolePolicy)||($.eventName=DeleteUserPolicy)||($.eventName=PutGroupPolicy)||($.eventName=PutRolePolicy)||($.eventName=PutUserPolicy)||($.eventName=CreatePolicy)||($.eventName=DeletePolicy)||($.eventName=CreatePolicyVersion)||($.eventName=DeletePolicyVersion)||($.eventName=AttachRolePolicy)||($.eventName=DetachRolePolicy)||($.eventName=AttachUserPolicy)||($.eventName=DetachUserPolicy)||($.eventName=AttachGroupPolicy)||($.eventName=DetachGroupPolicy)}' ```  **Note**: You can choose your own metricName and metricNamespace strings. Using the same metricNamespace for all Foundations Benchmark metrics will group them together.  2. Create an SNS topic that the alarm will notify ``` aws sns create-topic --name  ```  **Note**: you can execute this command once and then re-use the same topic for all monitoring alarms.  3. Create an SNS subscription to the topic created in step 2 ``` aws sns subscribe --topic-arn  --protocol  --notification-endpoint  ```  **Note**: you can execute this command once and then re-use the SNS subscription for all monitoring alarms.  4. Create an alarm that is associated with the CloudWatch Logs Metric Filter created in step 1 and an SNS topic created in step 2 ``` aws cloudwatch put-metric-alarm --alarm-name `` --metric-name `` --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --namespace 'CISBenchmark' --alarm-actions  ```",
+          "AuditProcedure": "Perform the following to ensure that there is at least one active multi-region CloudTrail with prescribed metric filters and alarms configured:  1. Identify the log group name configured for use with active multi-region CloudTrail:  - List all CloudTrails:  `aws cloudtrail describe-trails`  - Identify Multi region Cloudtrails: `Trails with \"IsMultiRegionTrail\" set to true`  - From value associated with CloudWatchLogsLogGroupArn note ``  Example: for CloudWatchLogsLogGroupArn that looks like `arn:aws:logs:::log-group:NewGroup:*`, `` would be `NewGroup`  - Ensure Identified Multi region CloudTrail is active  `aws cloudtrail get-trail-status --name `  ensure `IsLogging` is set to `TRUE`  - Ensure identified Multi-region Cloudtrail captures all Management Events  `aws cloudtrail get-event-selectors --trail-name `  Ensure there is at least one Event Selector for a Trail with `IncludeManagementEvents` set to `true` and `ReadWriteType` set to `All`  2. Get a list of all associated metric filters for this ``:  ``` aws logs describe-metric-filters --log-group-name \"\" ```  3. Ensure the output from the above command contains the following:  ``` \"filterPattern\": \"{($.eventName=DeleteGroupPolicy)||($.eventName=DeleteRolePolicy)||($.eventName=DeleteUserPolicy)||($.eventName=PutGroupPolicy)||($.eventName=PutRolePolicy)||($.eventName=PutUserPolicy)||($.eventName=CreatePolicy)||($.eventName=DeletePolicy)||($.eventName=CreatePolicyVersion)||($.eventName=DeletePolicyVersion)||($.eventName=AttachRolePolicy)||($.eventName=DetachRolePolicy)||($.eventName=AttachUserPolicy)||($.eventName=DetachUserPolicy)||($.eventName=AttachGroupPolicy)||($.eventName=DetachGroupPolicy)}\" ```  4. Note the `` value associated with the `filterPattern` found in step 3.  5. Get a list of CloudWatch alarms and filter on the `` captured in step 4.  ``` aws cloudwatch describe-alarms --query 'MetricAlarms[?MetricName== ``]' ```  6. Note the `AlarmActions` value - this will provide the SNS topic ARN value.  7. Ensure there is at least one active subscriber to the SNS topic  ``` aws sns list-subscriptions-by-topic --topic-arn   ``` at least one subscription should have \"SubscriptionArn\" with valid aws ARN.  ``` Example of valid \"SubscriptionArn\": \"arn:aws:sns::::\" ```",
+          "AdditionalInformation": "Configuring log metric filter and alarm on Multi-region (global) CloudTrail - ensures that activities from all regions (used as well as unused) are monitored - ensures that activities on all supported global services are monitored - ensures that all management events across all regions are monitored",
+          "References": "https://docs.aws.amazon.com/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html:https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudwatch-alarms-for-cloudtrail.html:https://docs.aws.amazon.com/sns/latest/dg/SubscribeTopic.html"
+        }
+      ]
+    },
+    {
+      "Id": "4.5",
+      "Description": "Ensure a log metric filter and alarm exist for CloudTrail configuration changes",
+      "Checks": [
+        "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled"
+      ],
+      "Attributes": [
+        {
+          "Section": "4. Monitoring",
+          "Profile": "Level 1",
+          "AssessmentStatus": "Automated",
+          "Description": "Real-time monitoring of API calls can be achieved by directing CloudTrail Logs to CloudWatch Logs and establishing corresponding metric filters and alarms. It is recommended that a metric filter and alarm be established for detecting changes to CloudTrail's configurations.",
+          "RationaleStatement": "Monitoring changes to CloudTrail's configuration will help ensure sustained visibility to activities performed in the AWS account.",
+          "ImpactStatement": "",
+          "RemediationProcedure": "Perform the following to setup the metric filter, alarm, SNS topic, and subscription:  1. Create a metric filter based on filter pattern provided which checks for cloudtrail configuration changes and the `` taken from audit step 1. ``` aws logs put-metric-filter --log-group-name  --filter-name `` --metric-transformations metricName= `` ,metricNamespace='CISBenchmark',metricValue=1 --filter-pattern '{ ($.eventName = CreateTrail) || ($.eventName = UpdateTrail) || ($.eventName = DeleteTrail) || ($.eventName = StartLogging) || ($.eventName = StopLogging) }' ```  **Note**: You can choose your own metricName and metricNamespace strings. Using the same metricNamespace for all Foundations Benchmark metrics will group them together.  2. Create an SNS topic that the alarm will notify ``` aws sns create-topic --name  ```  **Note**: you can execute this command once and then re-use the same topic for all monitoring alarms.  3. Create an SNS subscription to the topic created in step 2 ``` aws sns subscribe --topic-arn  --protocol  --notification-endpoint  ```  **Note**: you can execute this command once and then re-use the SNS subscription for all monitoring alarms.  4. Create an alarm that is associated with the CloudWatch Logs Metric Filter created in step 1 and an SNS topic created in step 2 ``` aws cloudwatch put-metric-alarm --alarm-name `` --metric-name `` --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --namespace 'CISBenchmark' --alarm-actions  ```",
+          "AuditProcedure": "Perform the following to ensure that there is at least one active multi-region CloudTrail with prescribed metric filters and alarms configured:  1. Identify the log group name configured for use with active multi-region CloudTrail:  - List all CloudTrails: `aws cloudtrail describe-trails`  - Identify Multi region Cloudtrails: `Trails with \"IsMultiRegionTrail\" set to true`  - From value associated with CloudWatchLogsLogGroupArn note ``  Example: for CloudWatchLogsLogGroupArn that looks like `arn:aws:logs:::log-group:NewGroup:*`, `` would be `NewGroup`  - Ensure Identified Multi region CloudTrail is active  `aws cloudtrail get-trail-status --name `  ensure `IsLogging` is set to `TRUE`  - Ensure identified Multi-region Cloudtrail captures all Management Events  `aws cloudtrail get-event-selectors --trail-name `  Ensure there is at least one Event Selector for a Trail with `IncludeManagementEvents` set to `true` and `ReadWriteType` set to `All`  2. Get a list of all associated metric filters for this ``:  ``` aws logs describe-metric-filters --log-group-name \"\" ```  3. Ensure the output from the above command contains the following:  ``` \"filterPattern\": \"{ ($.eventName = CreateTrail) || ($.eventName = UpdateTrail) || ($.eventName = DeleteTrail) || ($.eventName = StartLogging) || ($.eventName = StopLogging) }\" ```  4. Note the `` value associated with the `filterPattern` found in step 3.  5. Get a list of CloudWatch alarms and filter on the `` captured in step 4.  ``` aws cloudwatch describe-alarms --query 'MetricAlarms[?MetricName== ``]' ```  6. Note the `AlarmActions` value - this will provide the SNS topic ARN value.  7. Ensure there is at least one active subscriber to the SNS topic  ``` aws sns list-subscriptions-by-topic --topic-arn   ``` at least one subscription should have \"SubscriptionArn\" with valid aws ARN.  ``` Example of valid \"SubscriptionArn\": \"arn:aws:sns::::\" ```",
+          "AdditionalInformation": "Configuring log metric filter and alarm on Multi-region (global) CloudTrail - ensures that activities from all regions (used as well as unused) are monitored - ensures that activities on all supported global services are monitored - ensures that all management events across all regions are monitored",
+          "References": "https://docs.aws.amazon.com/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html:https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudwatch-alarms-for-cloudtrail.html:https://docs.aws.amazon.com/sns/latest/dg/SubscribeTopic.html"
+        }
+      ]
+    },
+    {
+      "Id": "4.6",
+      "Description": "Ensure a log metric filter and alarm exist for AWS Management Console authentication failures",
+      "Checks": [
+        "cloudwatch_log_metric_filter_authentication_failures"
+      ],
+      "Attributes": [
+        {
+          "Section": "4. Monitoring",
+          "Profile": "Level 2",
+          "AssessmentStatus": "Automated",
+          "Description": "Real-time monitoring of API calls can be achieved by directing CloudTrail Logs to CloudWatch Logs and establishing corresponding metric filters and alarms. It is recommended that a metric filter and alarm be established for failed console authentication attempts.",
+          "RationaleStatement": "Monitoring failed console logins may decrease lead time to detect an attempt to brute force a credential, which may provide an indicator, such as source IP, that can be used in other event correlation.",
+          "ImpactStatement": "",
+          "RemediationProcedure": "Perform the following to setup the metric filter, alarm, SNS topic, and subscription:  1. Create a metric filter based on filter pattern provided which checks for AWS management Console Login Failures and the `` taken from audit step 1. ``` aws logs put-metric-filter --log-group-name  --filter-name `` --metric-transformations metricName= `` ,metricNamespace='CISBenchmark',metricValue=1 --filter-pattern '{ ($.eventName = ConsoleLogin) && ($.errorMessage = \"Failed authentication\") }' ``` **Note**: You can choose your own metricName and metricNamespace strings. Using the same metricNamespace for all Foundations Benchmark metrics will group them together.  2. Create an SNS topic that the alarm will notify ``` aws sns create-topic --name  ``` **Note**: you can execute this command once and then re-use the same topic for all monitoring alarms.  3. Create an SNS subscription to the topic created in step 2 ``` aws sns subscribe --topic-arn  --protocol  --notification-endpoint  ``` **Note**: you can execute this command once and then re-use the SNS subscription for all monitoring alarms.  4. Create an alarm that is associated with the CloudWatch Logs Metric Filter created in step 1 and an SNS topic created in step 2 ``` aws cloudwatch put-metric-alarm --alarm-name `` --metric-name `` --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --namespace 'CISBenchmark' --alarm-actions  ```",
+          "AuditProcedure": "Perform the following to ensure that there is at least one active multi-region CloudTrail with prescribed metric filters and alarms configured:  1. Identify the log group name configured for use with active multi-region CloudTrail:  - List all CloudTrails: `aws cloudtrail describe-trails`  - Identify Multi region Cloudtrails: `Trails with \"IsMultiRegionTrail\" set to true`  - From value associated with CloudWatchLogsLogGroupArn note ``  Example: for CloudWatchLogsLogGroupArn that looks like `arn:aws:logs:::log-group:NewGroup:*`, `` would be `NewGroup`  - Ensure Identified Multi region CloudTrail is active  `aws cloudtrail get-trail-status --name `  ensure `IsLogging` is set to `TRUE`  - Ensure identified Multi-region Cloudtrail captures all Management Events  `aws cloudtrail get-event-selectors --trail-name `  Ensure there is at least one Event Selector for a Trail with `IncludeManagementEvents` set to `true` and `ReadWriteType` set to `All`  2. Get a list of all associated metric filters for this ``: ``` aws logs describe-metric-filters --log-group-name \"\" ``` 3. Ensure the output from the above command contains the following: ``` \"filterPattern\": \"{ ($.eventName = ConsoleLogin) && ($.errorMessage = \"Failed authentication\") }\" ```  4. Note the `` value associated with the `filterPattern` found in step 3.  5. Get a list of CloudWatch alarms and filter on the `` captured in step 4. ``` aws cloudwatch describe-alarms --query 'MetricAlarms[?MetricName== ``]' ``` 6. Note the `AlarmActions` value - this will provide the SNS topic ARN value.  7. Ensure there is at least one active subscriber to the SNS topic ``` aws sns list-subscriptions-by-topic --topic-arn   ``` at least one subscription should have \"SubscriptionArn\" with valid aws ARN. ``` Example of valid \"SubscriptionArn\": \"arn:aws:sns::::\" ```",
+          "AdditionalInformation": "Configuring log metric filter and alarm on Multi-region (global) CloudTrail - ensures that activities from all regions (used as well as unused) are monitored - ensures that activities on all supported global services are monitored - ensures that all management events across all regions are monitored",
+          "References": "https://docs.aws.amazon.com/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html:https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudwatch-alarms-for-cloudtrail.html:https://docs.aws.amazon.com/sns/latest/dg/SubscribeTopic.html"
+        }
+      ]
+    },
+    {
+      "Id": "4.7",
+      "Description": "Ensure a log metric filter and alarm exist for disabling or scheduled deletion of customer created CMKs",
+      "Checks": [
+        "cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk"
+      ],
+      "Attributes": [
+        {
+          "Section": "4. Monitoring",
+          "Profile": "Level 2",
+          "AssessmentStatus": "Automated",
+          "Description": "Real-time monitoring of API calls can be achieved by directing CloudTrail Logs to CloudWatch Logs and establishing corresponding metric filters and alarms. It is recommended that a metric filter and alarm be established for customer created CMKs which have changed state to disabled or scheduled deletion.",
+          "RationaleStatement": "Data encrypted with disabled or deleted keys will no longer be accessible.",
+          "ImpactStatement": "",
+          "RemediationProcedure": "Perform the following to setup the metric filter, alarm, SNS topic, and subscription:  1. Create a metric filter based on filter pattern provided which checks for disabled or scheduled for deletion CMK's and the `` taken from audit step 1. ``` aws logs put-metric-filter --log-group-name  --filter-name `` --metric-transformations metricName= `` ,metricNamespace='CISBenchmark',metricValue=1 --filter-pattern '{($.eventSource = kms.amazonaws.com) && (($.eventName=DisableKey)||($.eventName=ScheduleKeyDeletion)) }' ``` **Note**: You can choose your own metricName and metricNamespace strings. Using the same metricNamespace for all Foundations Benchmark metrics will group them together.  2. Create an SNS topic that the alarm will notify ``` aws sns create-topic --name  ``` **Note**: you can execute this command once and then re-use the same topic for all monitoring alarms.  3. Create an SNS subscription to the topic created in step 2 ``` aws sns subscribe --topic-arn  --protocol  --notification-endpoint  ``` **Note**: you can execute this command once and then re-use the SNS subscription for all monitoring alarms.  4. Create an alarm that is associated with the CloudWatch Logs Metric Filter created in step 1 and an SNS topic created in step 2 ``` aws cloudwatch put-metric-alarm --alarm-name `` --metric-name `` --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --namespace 'CISBenchmark' --alarm-actions  ```",
+          "AuditProcedure": "Perform the following to ensure that there is at least one active multi-region CloudTrail with prescribed metric filters and alarms configured:  1. Identify the log group name configured for use with active multi-region CloudTrail:  - List all CloudTrails: `aws cloudtrail describe-trails`  - Identify Multi region Cloudtrails: `Trails with \"IsMultiRegionTrail\" set to true`  - From value associated with CloudWatchLogsLogGroupArn note ``  Example: for CloudWatchLogsLogGroupArn that looks like `arn:aws:logs:::log-group:NewGroup:*`, `` would be `NewGroup`  - Ensure Identified Multi region CloudTrail is active  `aws cloudtrail get-trail-status --name `  ensure `IsLogging` is set to `TRUE`  - Ensure identified Multi-region Cloudtrail captures all Management Events  `aws cloudtrail get-event-selectors --trail-name `  Ensure there is at least one Event Selector for a Trail with `IncludeManagementEvents` set to `true` and `ReadWriteType` set to `All`  2. Get a list of all associated metric filters for this ``: ``` aws logs describe-metric-filters --log-group-name \"\" ``` 3. Ensure the output from the above command contains the following: ``` \"filterPattern\": \"{($.eventSource = kms.amazonaws.com) && (($.eventName=DisableKey)||($.eventName=ScheduleKeyDeletion)) }\" ``` 4. Note the `` value associated with the `filterPattern` found in step 3.  5. Get a list of CloudWatch alarms and filter on the `` captured in step 4. ``` aws cloudwatch describe-alarms --query 'MetricAlarms[?MetricName== ``]' ``` 6. Note the `AlarmActions` value - this will provide the SNS topic ARN value.  7. Ensure there is at least one active subscriber to the SNS topic ``` aws sns list-subscriptions-by-topic --topic-arn   ``` at least one subscription should have \"SubscriptionArn\" with valid aws ARN. ``` Example of valid \"SubscriptionArn\": \"arn:aws:sns::::\" ```",
+          "AdditionalInformation": "Configuring log metric filter and alarm on Multi-region (global) CloudTrail - ensures that activities from all regions (used as well as unused) are monitored - ensures that activities on all supported global services are monitored - ensures that all management events across all regions are monitored",
+          "References": "https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudwatch-alarms-for-cloudtrail.html:https://docs.aws.amazon.com/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html:https://docs.aws.amazon.com/sns/latest/dg/SubscribeTopic.html"
+        }
+      ]
+    },
+    {
+      "Id": "4.8",
+      "Description": "Ensure a log metric filter and alarm exist for S3 bucket policy changes",
+      "Checks": [
+        "cloudwatch_log_metric_filter_for_s3_bucket_policy_changes"
+      ],
+      "Attributes": [
+        {
+          "Section": "4. Monitoring",
+          "Profile": "Level 1",
+          "AssessmentStatus": "Automated",
+          "Description": "Real-time monitoring of API calls can be achieved by directing CloudTrail Logs to CloudWatch Logs and establishing corresponding metric filters and alarms. It is recommended that a metric filter and alarm be established for changes to S3 bucket policies.",
+          "RationaleStatement": "Monitoring changes to S3 bucket policies may reduce time to detect and correct permissive policies on sensitive S3 buckets.",
+          "ImpactStatement": "",
+          "RemediationProcedure": "Perform the following to setup the metric filter, alarm, SNS topic, and subscription:  1. Create a metric filter based on filter pattern provided which checks for S3 bucket policy changes and the `` taken from audit step 1. ``` aws logs put-metric-filter --log-group-name  --filter-name `` --metric-transformations metricName= `` ,metricNamespace='CISBenchmark',metricValue=1 --filter-pattern '{ ($.eventSource = s3.amazonaws.com) && (($.eventName = PutBucketAcl) || ($.eventName = PutBucketPolicy) || ($.eventName = PutBucketCors) || ($.eventName = PutBucketLifecycle) || ($.eventName = PutBucketReplication) || ($.eventName = DeleteBucketPolicy) || ($.eventName = DeleteBucketCors) || ($.eventName = DeleteBucketLifecycle) || ($.eventName = DeleteBucketReplication)) }' ```  **Note**: You can choose your own metricName and metricNamespace strings. Using the same metricNamespace for all Foundations Benchmark metrics will group them together.  2. Create an SNS topic that the alarm will notify ``` aws sns create-topic --name  ```  **Note**: you can execute this command once and then re-use the same topic for all monitoring alarms.  3. Create an SNS subscription to the topic created in step 2 ``` aws sns subscribe --topic-arn  --protocol  --notification-endpoint  ```  **Note**: you can execute this command once and then re-use the SNS subscription for all monitoring alarms.  4. Create an alarm that is associated with the CloudWatch Logs Metric Filter created in step 1 and an SNS topic created in step 2 ``` aws cloudwatch put-metric-alarm --alarm-name `` --metric-name `` --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --namespace 'CISBenchmark' --alarm-actions  ```",
+          "AuditProcedure": "Perform the following to ensure that there is at least one active multi-region CloudTrail with prescribed metric filters and alarms configured:  1. Identify the log group name configured for use with active multi-region CloudTrail:  - List all CloudTrails: `aws cloudtrail describe-trails`  - Identify Multi region Cloudtrails: `Trails with \"IsMultiRegionTrail\" set to true`  - From value associated with CloudWatchLogsLogGroupArn note ``  Example: for CloudWatchLogsLogGroupArn that looks like `arn:aws:logs:::log-group:NewGroup:*`, `` would be `NewGroup`  - Ensure Identified Multi region CloudTrail is active  `aws cloudtrail get-trail-status --name `  ensure `IsLogging` is set to `TRUE`  - Ensure identified Multi-region Cloudtrail captures all Management Events  `aws cloudtrail get-event-selectors --trail-name `  Ensure there is at least one Event Selector for a Trail with `IncludeManagementEvents` set to `true` and `ReadWriteType` set to `All`  2. Get a list of all associated metric filters for this ``: ``` aws logs describe-metric-filters --log-group-name \"\" ``` 3. Ensure the output from the above command contains the following: ``` \"filterPattern\": \"{ ($.eventSource = s3.amazonaws.com) && (($.eventName = PutBucketAcl) || ($.eventName = PutBucketPolicy) || ($.eventName = PutBucketCors) || ($.eventName = PutBucketLifecycle) || ($.eventName = PutBucketReplication) || ($.eventName = DeleteBucketPolicy) || ($.eventName = DeleteBucketCors) || ($.eventName = DeleteBucketLifecycle) || ($.eventName = DeleteBucketReplication)) }\" ``` 4. Note the `` value associated with the `filterPattern` found in step 3.  5. Get a list of CloudWatch alarms and filter on the `` captured in step 4. ``` aws cloudwatch describe-alarms --query 'MetricAlarms[?MetricName== ``]' ``` 6. Note the `AlarmActions` value - this will provide the SNS topic ARN value.  7. Ensure there is at least one active subscriber to the SNS topic ``` aws sns list-subscriptions-by-topic --topic-arn   ``` at least one subscription should have \"SubscriptionArn\" with valid aws ARN. ``` Example of valid \"SubscriptionArn\": \"arn:aws:sns::::\" ```",
+          "AdditionalInformation": "Configuring log metric filter and alarm on Multi-region (global) CloudTrail - ensures that activities from all regions (used as well as unused) are monitored - ensures that activities on all supported global services are monitored - ensures that all management events across all regions are monitored",
+          "References": "https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudwatch-alarms-for-cloudtrail.html:https://docs.aws.amazon.com/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html:https://docs.aws.amazon.com/sns/latest/dg/SubscribeTopic.html"
+        }
+      ]
+    },
+    {
+      "Id": "4.9",
+      "Description": "Ensure a log metric filter and alarm exist for AWS Config configuration changes",
+      "Checks": [
+        "cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled"
+      ],
+      "Attributes": [
+        {
+          "Section": "4. Monitoring",
+          "Profile": "Level 2",
+          "AssessmentStatus": "Automated",
+          "Description": "Real-time monitoring of API calls can be achieved by directing CloudTrail Logs to CloudWatch Logs and establishing corresponding metric filters and alarms. It is recommended that a metric filter and alarm be established for detecting changes to CloudTrail's configurations.",
+          "RationaleStatement": "Monitoring changes to AWS Config configuration will help ensure sustained visibility of configuration items within the AWS account.",
+          "ImpactStatement": "",
+          "RemediationProcedure": "Perform the following to setup the metric filter, alarm, SNS topic, and subscription:  1. Create a metric filter based on filter pattern provided which checks for AWS Configuration changes and the `` taken from audit step 1. ``` aws logs put-metric-filter --log-group-name  --filter-name `` --metric-transformations metricName= `` ,metricNamespace='CISBenchmark',metricValue=1 --filter-pattern '{ ($.eventSource = config.amazonaws.com) && (($.eventName=StopConfigurationRecorder)||($.eventName=DeleteDeliveryChannel)||($.eventName=PutDeliveryChannel)||($.eventName=PutConfigurationRecorder)) }' ```  **Note**: You can choose your own metricName and metricNamespace strings. Using the same metricNamespace for all Foundations Benchmark metrics will group them together.  2. Create an SNS topic that the alarm will notify ``` aws sns create-topic --name  ```  **Note**: you can execute this command once and then re-use the same topic for all monitoring alarms.  3. Create an SNS subscription to topic created in step 2 ``` aws sns subscribe --topic-arn  --protocol  --notification-endpoint  ```  **Note**: you can execute this command once and then re-use the SNS subscription for all monitoring alarms.  4. Create an alarm that is associated with the CloudWatch Logs Metric Filter created in step 1 and an SNS topic created in step 2 ``` aws cloudwatch put-metric-alarm --alarm-name `` --metric-name `` --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --namespace 'CISBenchmark' --alarm-actions  ```",
+          "AuditProcedure": "Perform the following to ensure that there is at least one active multi-region CloudTrail with prescribed metric filters and alarms configured:  1. Identify the log group name configured for use with active multi-region CloudTrail:  - List all CloudTrails: `aws cloudtrail describe-trails`  - Identify Multi region Cloudtrails: `Trails with \"IsMultiRegionTrail\" set to true`  - From value associated with CloudWatchLogsLogGroupArn note ``  Example: for CloudWatchLogsLogGroupArn that looks like `arn:aws:logs:::log-group:NewGroup:*`, `` would be `NewGroup`  - Ensure Identified Multi region CloudTrail is active  `aws cloudtrail get-trail-status --name `  ensure `IsLogging` is set to `TRUE`  - Ensure identified Multi-region Cloudtrail captures all Management Events  `aws cloudtrail get-event-selectors --trail-name `  Ensure there is at least one Event Selector for a Trail with `IncludeManagementEvents` set to `true` and `ReadWriteType` set to `All`  2. Get a list of all associated metric filters for this ``: ``` aws logs describe-metric-filters --log-group-name \"\" ``` 3. Ensure the output from the above command contains the following: ``` \"filterPattern\": \"{ ($.eventSource = config.amazonaws.com) && (($.eventName=StopConfigurationRecorder)||($.eventName=DeleteDeliveryChannel)||($.eventName=PutDeliveryChannel)||($.eventName=PutConfigurationRecorder)) }\" ``` 4. Note the `` value associated with the `filterPattern` found in step 3.  5. Get a list of CloudWatch alarms and filter on the `` captured in step 4. ``` aws cloudwatch describe-alarms --query 'MetricAlarms[?MetricName== ``]' ``` 6. Note the `AlarmActions` value - this will provide the SNS topic ARN value.  7. Ensure there is at least one active subscriber to the SNS topic ``` aws sns list-subscriptions-by-topic --topic-arn   ``` at least one subscription should have \"SubscriptionArn\" with valid aws ARN. ``` Example of valid \"SubscriptionArn\": \"arn:aws:sns::::\" ```",
+          "AdditionalInformation": "Configuring log metric filter and alarm on Multi-region (global) CloudTrail - ensures that activities from all regions (used as well as unused) are monitored - ensures that activities on all supported global services are monitored - ensures that all management events across all regions are monitored",
+          "References": "https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudwatch-alarms-for-cloudtrail.html:https://docs.aws.amazon.com/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html:https://docs.aws.amazon.com/sns/latest/dg/SubscribeTopic.html"
+        }
+      ]
+    },
+    {
+      "Id": "5.1",
+      "Description": "Ensure no Network ACLs allow ingress from 0.0.0.0/0 to remote server administration ports",
+      "Checks": [
+        "ec2_networkacl_allow_ingress_any_port",
+        "ec2_networkacl_allow_ingress_tcp_port_22",
+        "ec2_networkacl_allow_ingress_tcp_port_3389"
+      ],
+      "Attributes": [
+        {
+          "Section": "5. Networking",
+          "Profile": "Level 1",
+          "AssessmentStatus": "Automated",
+          "Description": "The Network Access Control List (NACL) function provide stateless filtering of ingress and egress network traffic to AWS resources. It is recommended that no NACL allows unrestricted ingress access to remote server administration ports, such as SSH to port `22` and RDP to port `3389`.",
+          "RationaleStatement": "Public access to remote server administration ports, such as 22 and 3389, increases resource attack surface and unnecessarily raises the risk of resource compromise.",
+          "ImpactStatement": "",
+          "RemediationProcedure": "**From Console:**  Perform the following: 1. Login to the AWS Management Console at https://console.aws.amazon.com/vpc/home 2. In the left pane, click `Network ACLs` 3. For each network ACL to remediate, perform the following:  - Select the network ACL  - Click the `Inbound Rules` tab  - Click `Edit inbound rules`  - Either A) update the Source field to a range other than 0.0.0.0/0, or, B) Click `Delete` to remove the offending inbound rule  - Click `Save`",
+          "AuditProcedure": "**From Console:**  Perform the following to determine if the account is configured as prescribed: 1. Login to the AWS Management Console at https://console.aws.amazon.com/vpc/home 2. In the left pane, click `Network ACLs` 3. For each network ACL, perform the following:  - Select the network ACL  - Click the `Inbound Rules` tab  - Ensure no rule exists that has a port range that includes port `22`, `3389`, or other remote server administration ports for your environment and has a `Source` of `0.0.0.0/0` and shows `ALLOW`  **Note:** A Port value of `ALL` or a port range such as `0-1024` are inclusive of port `22`, `3389`, and other remote server administration ports",
+          "AdditionalInformation": "",
+          "References": "https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html:https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Security.html#VPC_Security_Comparison"
+        }
+      ]
+    },
+    {
+      "Id": "5.2",
+      "Description": "Ensure no security groups allow ingress from 0.0.0.0/0 to remote server administration ports",
+      "Checks": [
+        "ec2_securitygroup_allow_ingress_from_internet_to_any_port",
+        "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22",
+        "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_3389"
+      ],
+      "Attributes": [
+        {
+          "Section": "5. Networking",
+          "Profile": "Level 1",
+          "AssessmentStatus": "Automated",
+          "Description": "Security groups provide stateful filtering of ingress and egress network traffic to AWS resources. It is recommended that no security group allows unrestricted ingress access to remote server administration ports, such as SSH to port `22` and RDP to port `3389`.",
+          "RationaleStatement": "Public access to remote server administration ports, such as 22 and 3389, increases resource attack surface and unnecessarily raises the risk of resource compromise.",
+          "ImpactStatement": "When updating an existing environment, ensure that administrators have access to remote server administration ports through another mechanism before removing access by deleting the 0.0.0.0/0 inbound rule.",
+          "RemediationProcedure": "Perform the following to implement the prescribed state:  1. Login to the AWS Management Console at [https://console.aws.amazon.com/vpc/home](https://console.aws.amazon.com/vpc/home) 2. In the left pane, click `Security Groups`  3. For each security group, perform the following: 1. Select the security group 2. Click the `Inbound Rules` tab 3. Click the `Edit inbound rules` button 4. Identify the rules to be edited or removed 5. Either A) update the Source field to a range other than 0.0.0.0/0, or, B) Click `Delete` to remove the offending inbound rule 6. Click `Save rules`",
+          "AuditProcedure": "Perform the following to determine if the account is configured as prescribed:  1. Login to the AWS Management Console at [https://console.aws.amazon.com/vpc/home](https://console.aws.amazon.com/vpc/home) 2. In the left pane, click `Security Groups`  3. For each security group, perform the following: 1. Select the security group 2. Click the `Inbound Rules` tab 3. Ensure no rule exists that has a port range that includes port `22`, `3389`, or other remote server administration ports for your environment and has a `Source` of `0.0.0.0/0`   **Note:** A Port value of `ALL` or a port range such as `0-1024` are inclusive of port `22`, `3389`, and other remote server administration ports.",
+          "AdditionalInformation": "",
+          "References": "https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-security-groups.html#deleting-security-group-rule"
+        }
+      ]
+    },
+    {
+      "Id": "5.3",
+      "Description": "Ensure no security groups allow ingress from ::/0 to remote server administration ports",
+      "Checks": [
+        "ec2_securitygroup_allow_ingress_from_internet_to_any_port",
+        "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22",
+        "ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_3389"
+      ],
+      "Attributes": [
+        {
+          "Section": "5. Networking",
+          "Profile": "Level 1",
+          "AssessmentStatus": "Automated",
+          "Description": "Security groups provide stateful filtering of ingress and egress network traffic to AWS resources. It is recommended that no security group allows unrestricted ingress access to remote server administration ports, such as SSH to port `22` and RDP to port `3389`.",
+          "RationaleStatement": "Public access to remote server administration ports, such as 22 and 3389, increases resource attack surface and unnecessarily raises the risk of resource compromise.",
+          "ImpactStatement": "When updating an existing environment, ensure that administrators have access to remote server administration ports through another mechanism before removing access by deleting the ::/0 inbound rule.",
+          "RemediationProcedure": "Perform the following to implement the prescribed state:  1. Login to the AWS Management Console at [https://console.aws.amazon.com/vpc/home](https://console.aws.amazon.com/vpc/home) 2. In the left pane, click `Security Groups`  3. For each security group, perform the following: 1. Select the security group 2. Click the `Inbound Rules` tab 3. Click the `Edit inbound rules` button 4. Identify the rules to be edited or removed 5. Either A) update the Source field to a range other than ::/0, or, B) Click `Delete` to remove the offending inbound rule 6. Click `Save rules`",
+          "AuditProcedure": "Perform the following to determine if the account is configured as prescribed:  1. Login to the AWS Management Console at [https://console.aws.amazon.com/vpc/home](https://console.aws.amazon.com/vpc/home) 2. In the left pane, click `Security Groups`  3. For each security group, perform the following: 1. Select the security group 2. Click the `Inbound Rules` tab 3. Ensure no rule exists that has a port range that includes port `22`, `3389`, or other remote server administration ports for your environment and has a `Source` of `::/0`   **Note:** A Port value of `ALL` or a port range such as `0-1024` are inclusive of port `22`, `3389`, and other remote server administration ports.",
+          "AdditionalInformation": "",
+          "References": "https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-security-groups.html#deleting-security-group-rule"
+        }
+      ]
+    },
+    {
+      "Id": "5.4",
+      "Description": "Ensure the default security group of every VPC restricts all traffic",
+      "Checks": [
+        "ec2_securitygroup_default_restrict_traffic"
+      ],
+      "Attributes": [
+        {
+          "Section": "5. Networking",
+          "Profile": "Level 2",
+          "AssessmentStatus": "Automated",
+          "Description": "A VPC comes with a default security group whose initial settings deny all inbound traffic, allow all outbound traffic, and allow all traffic between instances assigned to the security group. If you don't specify a security group when you launch an instance, the instance is automatically assigned to this default security group. Security groups provide stateful filtering of ingress/egress network traffic to AWS resources. It is recommended that the default security group restrict all traffic.  The default VPC in every region should have its default security group updated to comply. Any newly created VPCs will automatically contain a default security group that will need remediation to comply with this recommendation.  **NOTE:** When implementing this recommendation, VPC flow logging is invaluable in determining the least privilege port access required by systems to work properly because it can log all packet acceptances and rejections occurring under the current security groups. This dramatically reduces the primary barrier to least privilege engineering - discovering the minimum ports required by systems in the environment. Even if the VPC flow logging recommendation in this benchmark is not adopted as a permanent security measure, it should be used during any period of discovery and engineering for least privileged security groups.",
+          "RationaleStatement": "Configuring all VPC default security groups to restrict all traffic will encourage least privilege security group development and mindful placement of AWS resources into security groups which will in-turn reduce the exposure of those resources.",
+          "ImpactStatement": "Implementing this recommendation in an existing VPC containing operating resources requires extremely careful migration planning as the default security groups are likely to be enabling many ports that are unknown. Enabling VPC flow logging (of accepts) in an existing environment that is known to be breach free will reveal the current pattern of ports being used for each instance to communicate successfully.",
+          "RemediationProcedure": "Security Group Members  Perform the following to implement the prescribed state:  1. Identify AWS resources that exist within the default security group 2. Create a set of least privilege security groups for those resources 3. Place the resources in those security groups 4. Remove the resources noted in #1 from the default security group  Security Group State  1. Login to the AWS Management Console at [https://console.aws.amazon.com/vpc/home](https://console.aws.amazon.com/vpc/home) 2. Repeat the next steps for all VPCs - including the default VPC in each AWS region: 3. In the left pane, click `Security Groups`  4. For each default security group, perform the following: 1. Select the `default` security group 2. Click the `Inbound Rules` tab 3. Remove any inbound rules 4. Click the `Outbound Rules` tab 5. Remove any Outbound rules  Recommended:  IAM groups allow you to edit the \"name\" field. After remediating default groups rules for all VPCs in all regions, edit this field to add text similar to \"DO NOT USE. DO NOT ADD RULES\"",
+          "AuditProcedure": "Perform the following to determine if the account is configured as prescribed:  Security Group State  1. Login to the AWS Management Console at [https://console.aws.amazon.com/vpc/home](https://console.aws.amazon.com/vpc/home) 2. Repeat the next steps for all VPCs - including the default VPC in each AWS region: 3. In the left pane, click `Security Groups`  4. For each default security group, perform the following: 1. Select the `default` security group 2. Click the `Inbound Rules` tab 3. Ensure no rule exist 4. Click the `Outbound Rules` tab 5. Ensure no rules exist  Security Group Members  1. Login to the AWS Management Console at [https://console.aws.amazon.com/vpc/home](https://console.aws.amazon.com/vpc/home) 2. Repeat the next steps for all default groups in all VPCs - including the default VPC in each AWS region: 3. In the left pane, click `Security Groups`  4. Copy the id of the default security group. 5. Change to the EC2 Management Console at https://console.aws.amazon.com/ec2/v2/home 6. In the filter column type 'Security Group ID : < security group id from #4 >'",
+          "AdditionalInformation": "",
+          "References": "https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-security-groups.html#default-security-group"
+        }
+      ]
+    },
+    {
+      "Id": "5.5",
+      "Description": "Ensure routing tables for VPC peering are \"least access\"",
+      "Checks": [
+        "vpc_peering_routing_tables_with_least_privilege"
+      ],
+      "Attributes": [
+        {
+          "Section": "5. Networking",
+          "Profile": "Level 2",
+          "AssessmentStatus": "Manual",
+          "Description": "Once a VPC peering connection is established, routing tables must be updated to establish any connections between the peered VPCs. These routes can be as specific as desired - even peering a VPC to only a single host on the other side of the connection.",
+          "RationaleStatement": "Being highly selective in peering routing tables is a very effective way of minimizing the impact of breach as resources outside of these routes are inaccessible to the peered VPC.",
+          "ImpactStatement": "",
+          "RemediationProcedure": "Remove and add route table entries to ensure that the least number of subnets or hosts as is required to accomplish the purpose for peering are routable.  **From Command Line:**  1. For each __ containing routes non compliant with your routing policy (which grants more than desired \"least access\"), delete the non compliant route: ``` aws ec2 delete-route --route-table-id  --destination-cidr-block  ```  2. Create a new compliant route: ``` aws ec2 create-route --route-table-id  --destination-cidr-block  --vpc-peering-connection-id  ```",
+          "AuditProcedure": "Review routing tables of peered VPCs for whether they route all subnets of each VPC and whether that is necessary to accomplish the intended purposes for peering the VPCs.  **From Command Line:**  1. List all the route tables from a VPC and check if \"GatewayId\" is pointing to a __ (e.g. pcx-1a2b3c4d) and if \"DestinationCidrBlock\" is as specific as desired. ``` aws ec2 describe-route-tables --filter \"Name=vpc-id,Values=\" --query \"RouteTables[*].{RouteTableId:RouteTableId, VpcId:VpcId, Routes:Routes, AssociatedSubnets:Associations[*].SubnetId}\" ```",
+          "AdditionalInformation": "If an organization has AWS transit gateway implemented in their VPC architecture they should look to apply the recommendation above for \"least access\" routing architecture at the AWS transit gateway level in combination with what must be implemented at the standard VPC route table. More specifically, to route traffic between two or more VPCs via a transit gateway VPCs must have an attachment to a transit gateway route table as well as a route, therefore to avoid routing traffic between VPCs an attachment to the transit gateway route table should only be added where there is an intention to route traffic between the VPCs. As transit gateways are able to host multiple route tables it is possible to group VPCs by attaching them to a common route table.",
+          "References": "https://docs.aws.amazon.com/AmazonVPC/latest/PeeringGuide/peering-configurations-partial-access.html:https://docs.aws.amazon.com/cli/latest/reference/ec2/create-vpc-peering-connection.html"
+        }
+      ]
+    },
+    {
+      "Id": "5.6",
+      "Description": "Ensure that EC2 Metadata Service only allows IMDSv2",
+      "Checks": [
+        "ec2_instance_imdsv2_enabled"
+      ],
+      "Attributes": [
+        {
+          "Section": "5. Networking",
+          "Profile": "Level 1",
+          "AssessmentStatus": "Automated",
+          "Description": "When enabling the Metadata Service on AWS EC2 instances, users have the option of using either Instance Metadata Service Version 1 (IMDSv1; a request/response method) or Instance Metadata Service Version 2 (IMDSv2; a session-oriented method).",
+          "RationaleStatement": "Instance metadata is data about your instance that you can use to configure or manage the running instance. Instance metadata is divided into categories, for example, host name, events, and security groups. When enabling the Metadata Service on AWS EC2 instances, users have the option of using either Instance Metadata Service Version 1 (IMDSv1; a request/response method) or Instance Metadata Service Version 2 (IMDSv2; a session-oriented method). With IMDSv2, every request is now protected by session authentication. A session begins and ends a series of requests that software running on an EC2 instance uses to access the locally-stored EC2 instance metadata and credentials. Allowing Version 1 of the service may open EC2 instances to Server-Side Request Forgery (SSRF) attacks, so Amazon recommends utilizing Version 2 for better instance security.",
+          "ImpactStatement": "",
+          "RemediationProcedure": "From Console: 1. Sign in to the AWS Management Console and navigate to the EC2 dashboard at https://console.aws.amazon.com/ec2/. 2. In the left navigation panel, under the INSTANCES section, choose Instances. 3. Select the EC2 instance that you want to examine. 4. Choose Actions > Instance Settings > Modify instance metadata options. 5. Ensure Instance metadata service is set to Enable and set IMDSv2 to Required. 6. Repeat steps no. 1 – 5 to perform the remediation process for other EC2 Instances in the all applicable AWS region(s). From Command Line: 1. Run the describe-instances command using appropriate filtering to list the IDs of all the existing EC2 instances currently available in the selected region: aws ec2 describe-instances --region  --output table -- query 'Reservations[*].Instances[*].InstanceId' 2. The command output should return a table with the requested instance IDs. 3. Now run the modify-instance-metadata-options command using an instance ID returned at the previous step to update the Instance Metadata Version: aws ec2 modify-instance-metadata-options --instance-id  --http-tokens required --region  4. Repeat steps no. 1 – 3 to perform the remediation process for other EC2 Instances in the same AWS region. 5. Change the region by updating --region and repeat the entire process for other regions.",
+          "AuditProcedure": "From Console: 1. Sign in to the AWS Management Console and navigate to the EC2 dashboard at https://console.aws.amazon.com/ec2/. 2. In the left navigation panel, under the INSTANCES section, choose Instances. 3. Select the EC2 instance that you want to examine. 4. Check for the IMDSv2 status, and ensure that it is set to Required. From Command Line: 1. Run the describe-instances command using appropriate filtering to list the IDs of all the existing EC2 instances currently available in the selected region: aws ec2 describe-instances --region  --output table --query 'Reservations[*].Instances[*].InstanceId' 2. The command output should return a table with the requested instance IDs. 3. Now run the describe-instances command using an instance ID returned at the previous step and custom filtering to determine whether the selected instance has IMDSv2: aws ec2 describe-instances --region  --instance-ids  --query 'Reservations[*].Instances[*].MetadataOptions' --output table 4. Ensure for all ec2 instances HttpTokens is set to required and State is set to applied. 5. Repeat steps no. 3 and 4 to verify other EC2 instances provisioned within the current region. 6. Repeat steps no. 1 – 5 to perform the audit process for other AWS regions.",
+          "AdditionalInformation": "",
+          "References": "https://aws.amazon.com/blogs/security/defense-in-depth-open-firewalls-reverse-proxies-ssrf-vulnerabilities-ec2-instance-metadata-service/:https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html"
+        }
+      ]
+    }
+  ]
+}
diff --git a/prowler/compliance/aws/ens_rd2022_aws.json b/prowler/compliance/aws/ens_rd2022_aws.json
index e850e92ca60..5d6a847cd7d 100644
--- a/prowler/compliance/aws/ens_rd2022_aws.json
+++ b/prowler/compliance/aws/ens_rd2022_aws.json
@@ -211,6 +211,31 @@
         "iam_avoid_root_usage"
       ]
     },
+    {
+      "Id": "op.acc.4.aws.iam.8",
+      "Description": "Proceso de gestión de derechos de acceso",
+      "Attributes": [
+        {
+          "IdGrupoControl": "op.acc.4",
+          "Marco": "operacional",
+          "Categoria": "control de acceso",
+          "DescripcionControl": "Se restringirá todo acceso a las acciones especificadas para el usuario root de una cuenta.",
+          "Nivel": "alto",
+          "Tipo": "requisito",
+          "Dimensiones": [
+            "confidencialidad",
+            "integridad",
+            "trazabilidad",
+            "autenticidad"
+          ],
+          "ModoEjecucion": "automático"
+        }
+      ],
+      "Checks": [
+        "organizations_account_part_of_organizations",
+        "organizations_scp_check_deny_regions"
+      ]
+    },
     {
       "Id": "op.acc.4.aws.iam.9",
       "Description": "Proceso de gestión de derechos de acceso",
@@ -789,7 +814,8 @@
         }
       ],
       "Checks": [
-        "inspector2_findings_exist"
+        "inspector2_is_enabled",
+        "inspector2_active_findings_exist"
       ]
     },
     {
@@ -1121,6 +1147,30 @@
         "cloudtrail_insights_exist"
       ]
     },
+    {
+      "Id": "op.exp.8.r1.aws.ct.3",
+      "Description": "Revisión de los registros",
+      "Attributes": [
+        {
+          "IdGrupoControl": "op.exp.8.r1",
+          "Marco": "operacional",
+          "Categoria": "explotación",
+          "DescripcionControl": "Registrar los eventos de lectura y escritura de datos.",
+          "Nivel": "alto",
+          "Tipo": "refuerzo",
+          "Dimensiones": [
+            "trazabilidad"
+          ],
+          "ModoEjecucion": "automático"
+        }
+      ],
+      "Checks": [
+        "cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled",
+        "cloudtrail_s3_dataevents_write_enabled",
+        "cloudtrail_s3_dataevents_read_enabled",
+        "cloudtrail_insights_exist"
+      ]
+    },
     {
       "Id": "op.exp.8.r1.aws.ct.4",
       "Description": "Revisión de los registros",
@@ -1233,6 +1283,33 @@
         "iam_role_cross_service_confused_deputy_prevention"
       ]
     },
+    {
+      "Id": "op.exp.8.r4.aws.ct.1",
+      "Description": "Control de acceso",
+      "Attributes": [
+        {
+          "IdGrupoControl": "op.exp.8.r4",
+          "Marco": "operacional",
+          "Categoria": "explotación",
+          "DescripcionControl": "Asignar correctamente las políticas AWS IAM para el acceso y borrado de los registros y sus copias de seguridad haciendo uso del principio de mínimo privilegio.",
+          "Nivel": "alto",
+          "Tipo": "refuerzo",
+          "Dimensiones": [
+            "trazabilidad"
+          ],
+          "ModoEjecucion": "automático"
+        }
+      ],
+      "Checks": [
+        "iam_policy_allows_privilege_escalation",
+        "iam_customer_attached_policy_no_administrative_privileges",
+        "iam_customer_unattached_policy_no_administrative_privilege",
+        "iam_no_custom_policy_permissive_role_assumption",
+        "iam_policy_attached_only_to_group_or_roles",
+        "iam_role_cross_service_confused_deputy_prevention",
+        "iam_policy_no_full_access_to_cloudtrail"
+      ]
+    },
     {
       "Id": "op.exp.8.r4.aws.ct.2",
       "Description": "Control de acceso",
@@ -1859,7 +1936,8 @@
         }
       ],
       "Checks": [
-        "inspector2_findings_exist"
+        "inspector2_is_enabled",
+        "inspector2_active_findings_exist"
       ]
     },
     {
@@ -1934,7 +2012,8 @@
         }
       ],
       "Checks": [
-        "inspector2_findings_exist"
+        "inspector2_is_enabled",
+        "inspector2_active_findings_exist"
       ]
     },
     {
@@ -2110,7 +2189,7 @@
         }
       ],
       "Checks": [
-        "networkfirewall_in_all_vpc"
+        "fms_policy_compliant"
       ]
     },
     {
@@ -2251,6 +2330,31 @@
         "cloudfront_distributions_https_enabled"
       ]
     },
+    {
+      "Id": "mp.com.4.aws.ws.1",
+      "Description": "Separación de flujos de información en la red",
+      "Attributes": [
+        {
+          "IdGrupoControl": "mp.com.4",
+          "Marco": "medidas de protección",
+          "Categoria": "segregación de redes",
+          "DescripcionControl": "Se deberán abrir solo los puertos necesarios para el uso del servicio AWS WorkSpaces.",
+          "Nivel": "alto",
+          "Tipo": "requisito",
+          "Dimensiones": [
+            "confidencialidad",
+            "integridad",
+            "trazabilidad",
+            "autenticidad",
+            "disponibilidad"
+          ],
+          "ModoEjecucion": "automático"
+        }
+      ],
+      "Checks": [
+        "workspaces_vpc_2private_1public_subnets_nat"
+      ]
+    },
     {
       "Id": "mp.com.4.aws.vpc.1",
       "Description": "Separación de flujos de información en la red",
@@ -2323,7 +2427,8 @@
         }
       ],
       "Checks": [
-        "vpc_subnet_separate_private_public"
+        "vpc_subnet_separate_private_public",
+        "vpc_different_regions"
       ]
     },
     {
@@ -2370,7 +2475,8 @@
         }
       ],
       "Checks": [
-        "vpc_subnet_different_az"
+        "vpc_subnet_different_az",
+        "vpc_different_regions"
       ]
     },
     {
diff --git a/prowler/compliance/aws/mitre_attack_aws.json b/prowler/compliance/aws/mitre_attack_aws.json
index 06551f03f2c..d21edb96df4 100644
--- a/prowler/compliance/aws/mitre_attack_aws.json
+++ b/prowler/compliance/aws/mitre_attack_aws.json
@@ -29,7 +29,8 @@
         "securityhub_enabled",
         "elbv2_waf_acl_attached",
         "guardduty_is_enabled",
-        "inspector2_findings_exist",
+        "inspector2_is_enabled",
+        "inspector2_active_findings_exist",
         "awslambda_function_not_publicly_accessible",
         "ec2_instance_public_ip"
       ],
@@ -576,7 +577,8 @@
         "config_recorder_all_regions_enabled",
         "securityhub_enabled",
         "guardduty_is_enabled",
-        "inspector2_findings_exist"
+        "inspector2_is_enabled",
+        "inspector2_active_findings_exist"
       ],
       "Attributes": [
         {
@@ -737,7 +739,8 @@
         "iam_user_hardware_mfa_enabled",
         "iam_user_mfa_enabled_console_access",
         "securityhub_enabled",
-        "inspector2_findings_exist"
+        "inspector2_is_enabled",
+        "inspector2_active_findings_exist"
       ],
       "Attributes": [
         {
@@ -1892,7 +1895,8 @@
         "networkfirewall_in_all_vpc",
         "elbv2_waf_acl_attached",
         "guardduty_is_enabled",
-        "inspector2_findings_exist",
+        "inspector2_is_enabled",
+        "inspector2_active_findings_exist",
         "ec2_networkacl_allow_ingress_any_port",
         "ec2_networkacl_allow_ingress_tcp_port_22",
         "ec2_networkacl_allow_ingress_tcp_port_3389",
diff --git a/prowler/compliance/aws/soc2_aws.json b/prowler/compliance/aws/soc2_aws.json
index 35e3e61f3f4..860ede2a772 100644
--- a/prowler/compliance/aws/soc2_aws.json
+++ b/prowler/compliance/aws/soc2_aws.json
@@ -13,7 +13,7 @@
           "ItemId": "cc_1_1",
           "Section": "CC1.0 - Common Criteria Related to Control Environment",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -27,7 +27,7 @@
           "ItemId": "cc_1_2",
           "Section": "CC1.0 - Common Criteria Related to Control Environment",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -41,7 +41,7 @@
           "ItemId": "cc_1_3",
           "Section": "CC1.0 - Common Criteria Related to Control Environment",
           "Service": "aws",
-          "Soc_Type": "automated"
+          "Type": "automated"
         }
       ],
       "Checks": [
@@ -62,7 +62,7 @@
           "ItemId": "cc_1_4",
           "Section": "CC1.0 - Common Criteria Related to Control Environment",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -76,7 +76,7 @@
           "ItemId": "cc_1_5",
           "Section": "CC1.0 - Common Criteria Related to Control Environment",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -90,7 +90,7 @@
           "ItemId": "cc_2_1",
           "Section": "CC2.0 - Common Criteria Related to Communication and Information",
           "Service": "aws",
-          "Soc_Type": "automated"
+          "Type": "automated"
         }
       ],
       "Checks": [
@@ -109,7 +109,7 @@
           "ItemId": "cc_2_2",
           "Section": "CC2.0 - Common Criteria Related to Communication and Information",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -123,7 +123,7 @@
           "ItemId": "cc_2_3",
           "Section": "CC2.0 - Common Criteria Related to Communication and Information",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -137,7 +137,7 @@
           "ItemId": "cc_3_1",
           "Section": "CC3.0 - Common Criteria Related to Risk Assessment",
           "Service": "aws",
-          "Soc_Type": "automated"
+          "Type": "automated"
         }
       ],
       "Checks": [
@@ -155,7 +155,7 @@
           "ItemId": "cc_3_2",
           "Section": "CC3.0 - Common Criteria Related to Risk Assessment",
           "Service": "aws",
-          "Soc_Type": "automated"
+          "Type": "automated"
         }
       ],
       "Checks": [
@@ -175,7 +175,7 @@
           "ItemId": "cc_3_3",
           "Section": "CC3.0 - Common Criteria Related to Risk Assessment",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -189,7 +189,7 @@
           "ItemId": "cc_3_4",
           "Section": "CC3.0 - Common Criteria Related to Risk Assessment",
           "Service": "config",
-          "Soc_Type": "automated"
+          "Type": "automated"
         }
       ],
       "Checks": [
@@ -205,7 +205,7 @@
           "ItemId": "cc_4_1",
           "Section": "CC4.0 - Monitoring Activities",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -219,7 +219,7 @@
           "ItemId": "cc_4_2",
           "Section": "CC4.0 - Monitoring Activities",
           "Service": "guardduty",
-          "Soc_Type": "automated"
+          "Type": "automated"
         }
       ],
       "Checks": [
@@ -236,7 +236,7 @@
           "ItemId": "cc_5_1",
           "Section": "CC5.0 - Control Activities",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -250,7 +250,7 @@
           "ItemId": "cc_5_2",
           "Section": "CC5.0 - Control Activities",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -264,7 +264,7 @@
           "ItemId": "cc_5_3",
           "Section": "CC5.0 - Control Activities",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -278,7 +278,7 @@
           "ItemId": "cc_6_1",
           "Section": "CC6.0 - Logical and Physical Access",
           "Service": "s3",
-          "Soc_Type": "automated"
+          "Type": "automated"
         }
       ],
       "Checks": [
@@ -294,7 +294,7 @@
           "ItemId": "cc_6_2",
           "Section": "CC6.0 - Logical and Physical Access",
           "Service": "rds",
-          "Soc_Type": "automated"
+          "Type": "automated"
         }
       ],
       "Checks": [
@@ -310,7 +310,7 @@
           "ItemId": "cc_6_3",
           "Section": "CC6.0 - Logical and Physical Access",
           "Service": "iam",
-          "Soc_Type": "automated"
+          "Type": "automated"
         }
       ],
       "Checks": [
@@ -328,7 +328,7 @@
           "ItemId": "cc_6_4",
           "Section": "CC6.0 - Logical and Physical Access",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -342,7 +342,7 @@
           "ItemId": "cc_6_5",
           "Section": "CC6.0 - Logical and Physical Access",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -356,7 +356,7 @@
           "ItemId": "cc_6_6",
           "Section": "CC6.0 - Logical and Physical Access",
           "Service": "ec2",
-          "Soc_Type": "automated"
+          "Type": "automated"
         }
       ],
       "Checks": [
@@ -372,7 +372,7 @@
           "ItemId": "cc_6_7",
           "Section": "CC6.0 - Logical and Physical Access",
           "Service": "acm",
-          "Soc_Type": "automated"
+          "Type": "automated"
         }
       ],
       "Checks": [
@@ -388,7 +388,7 @@
           "ItemId": "cc_6_8",
           "Section": "CC6.0 - Logical and Physical Access",
           "Service": "aws",
-          "Soc_Type": "automated"
+          "Type": "automated"
         }
       ],
       "Checks": [
@@ -405,7 +405,7 @@
           "ItemId": "cc_7_1",
           "Section": "CC7.0 - System Operations",
           "Service": "aws",
-          "Soc_Type": "automated"
+          "Type": "automated"
         }
       ],
       "Checks": [
@@ -424,7 +424,7 @@
           "ItemId": "cc_7_2",
           "Section": "CC7.0 - System Operations",
           "Service": "aws",
-          "Soc_Type": "automated"
+          "Type": "automated"
         }
       ],
       "Checks": [
@@ -460,7 +460,7 @@
           "ItemId": "cc_7_3",
           "Section": "CC7.0 - System Operations",
           "Service": "aws",
-          "Soc_Type": "automated"
+          "Type": "automated"
         }
       ],
       "Checks": [
@@ -492,7 +492,7 @@
           "ItemId": "cc_7_4",
           "Section": "CC7.0 - System Operations",
           "Service": "aws",
-          "Soc_Type": "automated"
+          "Type": "automated"
         }
       ],
       "Checks": [
@@ -523,7 +523,7 @@
           "ItemId": "cc_7_5",
           "Section": "CC7.0 - System Operations",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -537,7 +537,7 @@
           "ItemId": "cc_8_1",
           "Section": "CC8.0 - Change Management",
           "Service": "aws",
-          "Soc_Type": "automated"
+          "Type": "automated"
         }
       ],
       "Checks": [
@@ -553,7 +553,7 @@
           "ItemId": "cc_9_1",
           "Section": "CC9.0 - Risk Mitigation",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -567,7 +567,7 @@
           "ItemId": "cc_9_2",
           "Section": "CC9.0 - Risk Mitigation",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -581,7 +581,7 @@
           "ItemId": "cc_a_1_1",
           "Section": "CCA1.0 - Additional Criterial for Availability",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -595,7 +595,7 @@
           "ItemId": "cc_a_1_2",
           "Section": "CCA1.0 - Additional Criterial for Availability",
           "Service": "aws",
-          "Soc_Type": "automated"
+          "Type": "automated"
         }
       ],
       "Checks": [
@@ -626,7 +626,7 @@
           "ItemId": "cc_a_1_3",
           "Section": "CCA1.0 - Additional Criterial for Availability",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -640,7 +640,7 @@
           "ItemId": "cc_c_1_1",
           "Section": "CCC1.0 - Additional Criterial for Confidentiality",
           "Service": "aws",
-          "Soc_Type": "automated"
+          "Type": "automated"
         }
       ],
       "Checks": [
@@ -656,7 +656,7 @@
           "ItemId": "cc_c_1_2",
           "Section": "CCC1.0 - Additional Criterial for Confidentiality",
           "Service": "s3",
-          "Soc_Type": "automated"
+          "Type": "automated"
         }
       ],
       "Checks": [
@@ -672,7 +672,7 @@
           "ItemId": "p_1_1",
           "Section": "P1.0 - Privacy Criteria Related to Notice and Communication of Objectives Related to Privacy",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -686,7 +686,7 @@
           "ItemId": "p_2_1",
           "Section": "P2.0 - Privacy Criteria Related to Choice and Consent",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -700,7 +700,7 @@
           "ItemId": "p_3_1",
           "Section": "P3.0 - Privacy Criteria Related to Collection",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -714,7 +714,7 @@
           "ItemId": "p_3_2",
           "Section": "P3.0 - Privacy Criteria Related to Collection",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -728,7 +728,7 @@
           "ItemId": "p_4_1",
           "Section": "P4.0 - Privacy Criteria Related to Use, Retention, and Disposal",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -742,7 +742,7 @@
           "ItemId": "p_4_2",
           "Section": "P4.0 - Privacy Criteria Related to Use, Retention, and Disposal",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -756,7 +756,7 @@
           "ItemId": "p_4_3",
           "Section": "P4.0 - Privacy Criteria Related to Use, Retention, and Disposal",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -770,7 +770,7 @@
           "ItemId": "p_5_1",
           "Section": "P5.0 - Privacy Criteria Related to Access",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -784,7 +784,7 @@
           "ItemId": "p_5_2",
           "Section": "P5.0 - Privacy Criteria Related to Access",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -798,7 +798,7 @@
           "ItemId": "p_6_1",
           "Section": "P6.0 - Privacy Criteria Related to Disclosure and Notification",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -812,7 +812,7 @@
           "ItemId": "p_6_2",
           "Section": "P6.0 - Privacy Criteria Related to Disclosure and Notification",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -826,7 +826,7 @@
           "ItemId": "p_6_3",
           "Section": "P6.0 - Privacy Criteria Related to Disclosure and Notification",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -840,7 +840,7 @@
           "ItemId": "p_6_4",
           "Section": "P6.0 - Privacy Criteria Related to Disclosure and Notification",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -854,7 +854,7 @@
           "ItemId": "p_6_5",
           "Section": "P6.0 - Privacy Criteria Related to Disclosure and Notification",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -868,7 +868,7 @@
           "ItemId": "p_6_6",
           "Section": "P6.0 - Privacy Criteria Related to Disclosure and Notification",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -882,7 +882,7 @@
           "ItemId": "p_6_7",
           "Section": "P6.0 - Privacy Criteria Related to Disclosure and Notification",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -896,7 +896,7 @@
           "ItemId": "p_7_1",
           "Section": "P7.0 - Privacy Criteria Related to Quality",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
@@ -910,7 +910,7 @@
           "ItemId": "p_8_1",
           "Section": "P8.0 - Privacy Criteria Related to Monitoring and Enforcement",
           "Service": "aws",
-          "Soc_Type": "manual"
+          "Type": "manual"
         }
       ],
       "Checks": []
diff --git a/prowler/config/aws_mutelist.yaml b/prowler/config/aws_mutelist.yaml
index cc42ec728e3..facda6b51d9 100644
--- a/prowler/config/aws_mutelist.yaml
+++ b/prowler/config/aws_mutelist.yaml
@@ -38,6 +38,9 @@ Mute List:
             - "aws-controltower-ReadOnlyExecutionRole"
             - "AWSControlTower_VPCFlowLogsRole"
             - "AWSControlTowerExecution"
+            - "AWSAFTAdmin"
+            - "AWSAFTExecution"
+            - "AWSAFTService"
         "iam_policy_*":
           Regions:
             - "*"
diff --git a/prowler/config/config.py b/prowler/config/config.py
index b7e66ecf949..3975d59dece 100644
--- a/prowler/config/config.py
+++ b/prowler/config/config.py
@@ -11,7 +11,7 @@
 
 timestamp = datetime.today()
 timestamp_utc = datetime.now(timezone.utc).replace(tzinfo=timezone.utc)
-prowler_version = "3.11.3"
+prowler_version = "3.14.0"
 html_logo_url = "https://github.com/prowler-cloud/prowler/"
 html_logo_img = "https://user-images.githubusercontent.com/3985464/113734260-7ba06900-96fb-11eb-82bc-d4f68a1e2710.png"
 square_logo_img = "https://user-images.githubusercontent.com/38561120/235905862-9ece5bd7-9aa3-4e48-807a-3a9035eb8bfb.png"
@@ -23,6 +23,7 @@
 banner_color = "\033[1;92m"
 
 finding_statuses = ["PASS", "FAIL", "MANUAL"]
+valid_severities = ["critical", "high", "medium", "low", "informational"]
 
 # Compliance
 actual_directory = pathlib.Path(os.path.dirname(os.path.realpath(__file__)))
diff --git a/prowler/config/config.yaml b/prowler/config/config.yaml
index 57f3c643f37..64518dbc855 100644
--- a/prowler/config/config.yaml
+++ b/prowler/config/config.yaml
@@ -1,11 +1,10 @@
 # AWS Configuration
 aws:
-
   # AWS Global Configuration
-  # aws.mute_non_default_regions --> Set to True to mute failed findings in non-default regions for GuardDuty, SecurityHub, DRS and Config
-  mute_non_default_regions: False
-  # If you want to mute failed findings only in specific regions, create a file with the following syntax and run it with `prowler aws -w mutelist.yaml`:
-  # Mute List:
+  # aws.allowlist_non_default_regions --> Set to True to allowlist failed findings in non-default regions for AccessAnalyzer, GuardDuty, SecurityHub, DRS and Config
+  allowlist_non_default_regions: False
+  # If you want to allowlist/mute failed findings only in specific regions, create a file with the following syntax and run it with `prowler aws -w allowlist.yaml`:
+  # Allowlist:
   #  Accounts:
   #   "*":
   #     Checks:
@@ -69,8 +68,8 @@ aws:
   # AWS Organizations
   # organizations_scp_check_deny_regions
   # organizations_enabled_regions: [
-  #   'eu-central-1',
-  #   'eu-west-1',
+  #   "eu-central-1",
+  #   "eu-west-1",
   #   "us-east-1"
   # ]
   organizations_enabled_regions: []
@@ -89,13 +88,23 @@ aws:
 
 # Azure Configuration
 azure:
+  # Azure Network Configuration
+  # azure.network_public_ip_shodan
+  shodan_api_key: null
+
+  # Azure App Service
+  # azure.app_ensure_php_version_is_latest
+  php_latest_version: "8.2"
+  # azure.app_ensure_python_version_is_latest
+  python_latest_version: "3.12"
+  # azure.app_ensure_java_version_is_latest
+  java_latest_version: "17"
 
 # GCP Configuration
 gcp:
 
 # Kubernetes Configuration
 kubernetes:
-
   # Kubernetes API Server
   # apiserver_audit_log_maxbackup_set
   audit_log_maxbackup: 10
diff --git a/prowler/lib/banner.py b/prowler/lib/banner.py
index a60edc98010..6a2f47a5d54 100644
--- a/prowler/lib/banner.py
+++ b/prowler/lib/banner.py
@@ -4,7 +4,7 @@
 
 
 def print_banner(args):
-    banner = f"""{banner_color}                         _
+    banner = rf"""{banner_color}                         _
  _ __  _ __ _____      _| | ___ _ __
 | '_ \| '__/ _ \ \ /\ / / |/ _ \ '__|
 | |_) | | | (_) \ V  V /| |  __/ |
diff --git a/prowler/lib/check/check.py b/prowler/lib/check/check.py
index 58911ba620e..80d983e58dc 100644
--- a/prowler/lib/check/check.py
+++ b/prowler/lib/check/check.py
@@ -68,9 +68,9 @@ def bulk_load_compliance_frameworks(provider: str) -> dict:
                         # cis_v1.4_aws.json --> cis_v1.4_aws
                         compliance_framework_name = filename.split(".json")[0]
                         # Store the compliance info
-                        bulk_compliance_frameworks[
-                            compliance_framework_name
-                        ] = load_compliance_framework(file_path)
+                        bulk_compliance_frameworks[compliance_framework_name] = (
+                            load_compliance_framework(file_path)
+                        )
     except Exception as e:
         logger.error(f"{e.__class__.__name__}[{e.__traceback__.tb_lineno}] -- {e}")
 
@@ -108,14 +108,20 @@ def exclude_services_to_run(
 
 # Load checks from checklist.json
 def parse_checks_from_file(input_file: str, provider: str) -> set:
-    checks_to_execute = set()
-    with open_file(input_file) as f:
-        json_file = parse_json_file(f)
+    """parse_checks_from_file returns a set of checks read from the given file"""
+    try:
+        checks_to_execute = set()
+        with open_file(input_file) as f:
+            json_file = parse_json_file(f)
 
-    for check_name in json_file[provider]:
-        checks_to_execute.add(check_name)
+        for check_name in json_file[provider]:
+            checks_to_execute.add(check_name)
 
-    return checks_to_execute
+        return checks_to_execute
+    except Exception as error:
+        logger.error(
+            f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}] -- {error}"
+        )
 
 
 # Load checks from custom folder
@@ -212,7 +218,7 @@ def print_categories(categories: set):
     singular_string = f"\nThere is {Fore.YELLOW}{categories_num}{Style.RESET_ALL} available category.\n"
 
     message = plural_string if categories_num > 1 else singular_string
-    for category in categories:
+    for category in sorted(categories):
         print(f"- {category}")
 
     print(message)
@@ -241,7 +247,7 @@ def print_compliance_frameworks(
     singular_string = f"\nThere is {Fore.YELLOW}{frameworks_num}{Style.RESET_ALL} available Compliance Framework.\n"
     message = plural_string if frameworks_num > 1 else singular_string
 
-    for framework in bulk_compliance_frameworks.keys():
+    for framework in sorted(bulk_compliance_frameworks.keys()):
         print(f"- {framework}")
 
     print(message)
@@ -311,7 +317,7 @@ def print_checks(
 def parse_checks_from_compliance_framework(
     compliance_frameworks: list, bulk_compliance_frameworks: dict
 ) -> list:
-    """Parse checks from compliance frameworks specification"""
+    """parse_checks_from_compliance_framework returns a set of checks from the given compliance_frameworks"""
     checks_to_execute = set()
     try:
         for framework in compliance_frameworks:
@@ -611,22 +617,32 @@ def update_audit_metadata(
         )
 
 
-def recover_checks_from_service(service_list: list, provider: str) -> list:
-    checks = set()
-    service_list = [
-        "awslambda" if service == "lambda" else service for service in service_list
-    ]
-    for service in service_list:
-        modules = recover_checks_from_provider(provider, service)
-        if not modules:
-            logger.error(f"Service '{service}' does not have checks.")
+def recover_checks_from_service(service_list: list, provider: str) -> set:
+    """
+    Recover all checks from the selected provider and service
 
-        else:
-            for check_module in modules:
-                # Recover check name and module name from import path
-                # Format: "providers.{provider}.services.{service}.{check_name}.{check_name}"
-                check_name = check_module[0].split(".")[-1]
-                # If the service is present in the group list passed as parameters
-                # if service_name in group_list: checks_from_arn.add(check_name)
-                checks.add(check_name)
-    return checks
+    Returns a set of checks from the given services
+    """
+    try:
+        checks = set()
+        service_list = [
+            "awslambda" if service == "lambda" else service for service in service_list
+        ]
+        for service in service_list:
+            service_checks = recover_checks_from_provider(provider, service)
+            if not service_checks:
+                logger.error(f"Service '{service}' does not have checks.")
+
+            else:
+                for check in service_checks:
+                    # Recover check name and module name from import path
+                    # Format: "providers.{provider}.services.{service}.{check_name}.{check_name}"
+                    check_name = check[0].split(".")[-1]
+                    # If the service is present in the group list passed as parameters
+                    # if service_name in group_list: checks_from_arn.add(check_name)
+                    checks.add(check_name)
+        return checks
+    except Exception as error:
+        logger.error(
+            f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+        )
diff --git a/prowler/lib/check/checks_loader.py b/prowler/lib/check/checks_loader.py
index c82a601e1f9..6936f8c1cd0 100644
--- a/prowler/lib/check/checks_loader.py
+++ b/prowler/lib/check/checks_loader.py
@@ -1,5 +1,6 @@
 from colorama import Fore, Style
 
+from prowler.config.config import valid_severities
 from prowler.lib.check.check import (
     parse_checks_from_compliance_framework,
     parse_checks_from_file,
@@ -10,7 +11,6 @@
 
 
 # Generate the list of checks to execute
-# PENDING Test for this function
 def load_checks_to_execute(
     bulk_checks_metadata: dict,
     bulk_compliance_frameworks: dict,
@@ -22,84 +22,110 @@ def load_checks_to_execute(
     categories: set,
     provider: str,
 ) -> set:
-    """Generate the list of checks to execute based on the cloud provider and input arguments specified"""
-    checks_to_execute = set()
-
-    # Handle if there are checks passed using -c/--checks
-    if check_list:
-        for check_name in check_list:
-            checks_to_execute.add(check_name)
-
-    # Handle if there are some severities passed using --severity
-    elif severities:
-        for check in bulk_checks_metadata:
-            # Check check's severity
-            if bulk_checks_metadata[check].Severity in severities:
-                checks_to_execute.add(check)
-        if service_list:
-            checks_to_execute = (
-                recover_checks_from_service(service_list, provider) & checks_to_execute
-            )
+    """Generate the list of checks to execute based on the cloud provider and the input arguments given"""
+    try:
+        # Local subsets
+        checks_to_execute = set()
+        check_aliases = {}
+        check_severities = {key: [] for key in valid_severities}
+        check_categories = {}
+
+        # First, loop over the bulk_checks_metadata to extract the needed subsets
+        for check, metadata in bulk_checks_metadata.items():
+            # Aliases
+            for alias in metadata.CheckAliases:
+                if alias not in check_aliases:
+                    check_aliases[alias] = []
+                check_aliases[alias].append(check)
+
+            # Severities
+            if metadata.Severity:
+                check_severities[metadata.Severity].append(check)
+
+            # Categories
+            for category in metadata.Categories:
+                if category not in check_categories:
+                    check_categories[category] = []
+                check_categories[category].append(check)
+
+        # Handle if there are checks passed using -c/--checks
+        if check_list:
+            for check_name in check_list:
+                checks_to_execute.add(check_name)
+
+        # Handle if there are some severities passed using --severity
+        elif severities:
+            for severity in severities:
+                checks_to_execute.update(check_severities[severity])
+
+            if service_list:
+                checks_to_execute = (
+                    recover_checks_from_service(service_list, provider)
+                    & checks_to_execute
+                )
 
-    # Handle if there are checks passed using -C/--checks-file
-    elif checks_file:
-        try:
+        # Handle if there are checks passed using -C/--checks-file
+        elif checks_file:
             checks_to_execute = parse_checks_from_file(checks_file, provider)
-        except Exception as e:
-            logger.error(f"{e.__class__.__name__}[{e.__traceback__.tb_lineno}] -- {e}")
 
-    # Handle if there are services passed using -s/--services
-    elif service_list:
-        checks_to_execute = recover_checks_from_service(service_list, provider)
+        # Handle if there are services passed using -s/--services
+        elif service_list:
+            checks_to_execute = recover_checks_from_service(service_list, provider)
 
-    # Handle if there are compliance frameworks passed using --compliance
-    elif compliance_frameworks:
-        try:
+        # Handle if there are compliance frameworks passed using --compliance
+        elif compliance_frameworks:
             checks_to_execute = parse_checks_from_compliance_framework(
                 compliance_frameworks, bulk_compliance_frameworks
             )
-        except Exception as e:
-            logger.error(f"{e.__class__.__name__}[{e.__traceback__.tb_lineno}] -- {e}")
-
-    # Handle if there are categories passed using --categories
-    elif categories:
-        for cat in categories:
-            for check in bulk_checks_metadata:
-                # Check check's categories
-                if cat in bulk_checks_metadata[check].Categories:
-                    checks_to_execute.add(check)
-
-    # If there are no checks passed as argument
-    else:
-        try:
+
+        # Handle if there are categories passed using --categories
+        elif categories:
+            for category in categories:
+                checks_to_execute.update(check_categories[category])
+
+        # If there are no checks passed as argument
+        else:
             # Get all check modules to run with the specific provider
             checks = recover_checks_from_provider(provider)
-        except Exception as e:
-            logger.error(f"{e.__class__.__name__}[{e.__traceback__.tb_lineno}] -- {e}")
-        else:
+
             for check_info in checks:
                 # Recover check name from import path (last part)
                 # Format: "providers.{provider}.services.{service}.{check_name}.{check_name}"
                 check_name = check_info[0]
                 checks_to_execute.add(check_name)
 
-    # Get Check Aliases mapping
-    check_aliases = {}
-    for check, metadata in bulk_checks_metadata.items():
-        for alias in metadata.CheckAliases:
-            check_aliases[alias] = check
+        # Check Aliases
+        checks_to_execute = update_checks_to_execute_with_aliases(
+            checks_to_execute, check_aliases
+        )
 
-    # Verify if any input check is an alias of another check
-    for input_check in checks_to_execute:
-        if (
-            input_check in check_aliases
-            and check_aliases[input_check] not in checks_to_execute
-        ):
-            # Remove input check name and add the real one
-            checks_to_execute.remove(input_check)
-            checks_to_execute.add(check_aliases[input_check])
-            print(
-                f"\nUsing alias {Fore.YELLOW}{input_check}{Style.RESET_ALL} for check {Fore.YELLOW}{check_aliases[input_check]}{Style.RESET_ALL}...\n"
-            )
+        return checks_to_execute
 
-    return checks_to_execute
+    except Exception as error:
+        logger.error(
+            f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}] -- {error}"
+        )
+
+
+def update_checks_to_execute_with_aliases(
+    checks_to_execute: set, check_aliases: dict
+) -> set:
+    """update_checks_to_execute_with_aliases returns the checks_to_execute updated using the check aliases."""
+    # Verify if any input check is an alias of another check
+    try:
+        new_checks_to_execute = checks_to_execute.copy()
+        for input_check in checks_to_execute:
+            if input_check in check_aliases:
+                # Remove input check name and add the real one
+                new_checks_to_execute.remove(input_check)
+                for alias in check_aliases[input_check]:
+                    if alias not in new_checks_to_execute:
+                        new_checks_to_execute.add(alias)
+                        print(
+                            f"\nUsing alias {Fore.YELLOW}{input_check}{Style.RESET_ALL} for check {Fore.YELLOW}{alias}{Style.RESET_ALL}..."
+                        )
+        return new_checks_to_execute
+    except Exception as error:
+        logger.error(
+            f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}] -- {error}"
+        )
diff --git a/prowler/lib/check/compliance_models.py b/prowler/lib/check/compliance_models.py
index 29c9e0ea5fd..607ef887213 100644
--- a/prowler/lib/check/compliance_models.py
+++ b/prowler/lib/check/compliance_models.py
@@ -52,12 +52,12 @@ class ENS_Requirement_Attribute(BaseModel):
 class Generic_Compliance_Requirement_Attribute(BaseModel):
     """Generic Compliance Requirement Attribute"""
 
-    ItemId: str
+    ItemId: Optional[str]
     Section: Optional[str]
     SubSection: Optional[str]
     SubGroup: Optional[str]
-    Service: str
-    Soc_Type: Optional[str]
+    Service: Optional[str]
+    Type: Optional[str]
 
 
 class CIS_Requirement_Attribute_Profile(str):
diff --git a/prowler/lib/check/custom_checks_metadata.py b/prowler/lib/check/custom_checks_metadata.py
index 87acb97ab58..f12ce0c26f5 100644
--- a/prowler/lib/check/custom_checks_metadata.py
+++ b/prowler/lib/check/custom_checks_metadata.py
@@ -3,9 +3,9 @@
 import yaml
 from jsonschema import validate
 
+from prowler.config.config import valid_severities
 from prowler.lib.logger import logger
 
-valid_severities = ["critical", "high", "medium", "low", "informational"]
 custom_checks_metadata_schema = {
     "type": "object",
     "properties": {
diff --git a/prowler/lib/cli/parser.py b/prowler/lib/cli/parser.py
index d13b63ed1ed..881c9395e0b 100644
--- a/prowler/lib/cli/parser.py
+++ b/prowler/lib/cli/parser.py
@@ -8,6 +8,7 @@
     default_config_file_path,
     default_output_directory,
     finding_statuses,
+    valid_severities,
 )
 from prowler.providers.common.arguments import (
     init_providers_parser,
@@ -225,8 +226,8 @@ def __init_checks_parser__(self):
         common_checks_parser.add_argument(
             "--severity",
             nargs="+",
-            help="List of severities to be executed [informational, low, medium, high, critical]",
-            choices=["informational", "low", "medium", "high", "critical"],
+            help=f"List of severities to be executed {valid_severities}",
+            choices=valid_severities,
         )
         group.add_argument(
             "--compliance",
diff --git a/prowler/lib/outputs/compliance/compliance.py b/prowler/lib/outputs/compliance/compliance.py
index 5c53eb2b284..0f8fe74ab6a 100644
--- a/prowler/lib/outputs/compliance/compliance.py
+++ b/prowler/lib/outputs/compliance/compliance.py
@@ -187,7 +187,8 @@ def display_compliance_table(
                                         "Bajo": 0,
                                     }
                                 if finding.status == "FAIL":
-                                    fail_count += 1
+                                    if attribute.Tipo != "recomendacion":
+                                        fail_count += 1
                                     marcos[marco_categoria][
                                         "Estado"
                                     ] = f"{Fore.RED}NO CUMPLE{Style.RESET_ALL}"
diff --git a/prowler/lib/outputs/compliance/generic.py b/prowler/lib/outputs/compliance/generic.py
index f71621aa824..abe250101e2 100644
--- a/prowler/lib/outputs/compliance/generic.py
+++ b/prowler/lib/outputs/compliance/generic.py
@@ -42,7 +42,7 @@ def write_compliance_row_generic(
                 Requirements_Attributes_SubSection=attribute.SubSection,
                 Requirements_Attributes_SubGroup=attribute.SubGroup,
                 Requirements_Attributes_Service=attribute.Service,
-                Requirements_Attributes_Soc_Type=attribute.Soc_Type,
+                Requirements_Attributes_Type=attribute.Type,
                 Status=finding.status,
                 StatusExtended=finding.status_extended,
                 ResourceId=finding.resource_id,
diff --git a/prowler/lib/outputs/html.py b/prowler/lib/outputs/html.py
index 104f0c12f84..bddf3779006 100644
--- a/prowler/lib/outputs/html.py
+++ b/prowler/lib/outputs/html.py
@@ -408,7 +408,7 @@ def get_azure_html_assessment_summary(audit_info):
         if isinstance(audit_info, Azure_Audit_Info):
             printed_subscriptions = []
             for key, value in audit_info.identity.subscriptions.items():
-                intermediate = key + " : " + value
+                intermediate = f"{key} : {value}"
                 printed_subscriptions.append(intermediate)
 
             # check if identity is str(coming from SP) or dict(coming from browser or)
diff --git a/prowler/lib/outputs/json.py b/prowler/lib/outputs/json.py
index 7a5ab71d496..ac822bb9048 100644
--- a/prowler/lib/outputs/json.py
+++ b/prowler/lib/outputs/json.py
@@ -51,9 +51,9 @@ def fill_json_asff(finding_output, audit_info, finding, output_options):
         finding_output.GeneratorId = "prowler-" + finding.check_metadata.CheckID
         finding_output.AwsAccountId = audit_info.audited_account
         finding_output.Types = finding.check_metadata.CheckType
-        finding_output.FirstObservedAt = (
-            finding_output.UpdatedAt
-        ) = finding_output.CreatedAt = timestamp_utc.strftime("%Y-%m-%dT%H:%M:%SZ")
+        finding_output.FirstObservedAt = finding_output.UpdatedAt = (
+            finding_output.CreatedAt
+        ) = timestamp_utc.strftime("%Y-%m-%dT%H:%M:%SZ")
         finding_output.Severity = Severity(
             Label=finding.check_metadata.Severity.upper()
         )
diff --git a/prowler/lib/outputs/models.py b/prowler/lib/outputs/models.py
index 94561830b06..9dd747dd78a 100644
--- a/prowler/lib/outputs/models.py
+++ b/prowler/lib/outputs/models.py
@@ -64,9 +64,9 @@ def generate_provider_output_csv(
             data["resource_name"] = finding.resource_name
             data["subscription"] = finding.subscription
             data["tenant_domain"] = audit_info.identity.domain
-            data[
-                "finding_unique_id"
-            ] = f"prowler-{provider}-{finding.check_metadata.CheckID}-{finding.subscription}-{finding.resource_id}"
+            data["finding_unique_id"] = (
+                f"prowler-{provider}-{finding.check_metadata.CheckID}-{finding.subscription}-{finding.resource_id}"
+            )
             data["compliance"] = unroll_dict(
                 get_check_compliance(finding, provider, output_options)
             )
@@ -77,9 +77,9 @@ def generate_provider_output_csv(
             data["resource_name"] = finding.resource_name
             data["project_id"] = finding.project_id
             data["location"] = finding.location.lower()
-            data[
-                "finding_unique_id"
-            ] = f"prowler-{provider}-{finding.check_metadata.CheckID}-{finding.project_id}-{finding.resource_id}"
+            data["finding_unique_id"] = (
+                f"prowler-{provider}-{finding.check_metadata.CheckID}-{finding.project_id}-{finding.resource_id}"
+            )
             data["compliance"] = unroll_dict(
                 get_check_compliance(finding, provider, output_options)
             )
@@ -89,9 +89,9 @@ def generate_provider_output_csv(
             data["resource_id"] = finding.resource_id
             data["resource_name"] = finding.resource_name
             data["namespace"] = finding.namespace
-            data[
-                "finding_unique_id"
-            ] = f"prowler-{provider}-{finding.check_metadata.CheckID}-{finding.namespace}-{finding.resource_id}"
+            data["finding_unique_id"] = (
+                f"prowler-{provider}-{finding.check_metadata.CheckID}-{finding.namespace}-{finding.resource_id}"
+            )
             data["compliance"] = unroll_dict(
                 get_check_compliance(finding, provider, output_options)
             )
@@ -103,9 +103,9 @@ def generate_provider_output_csv(
             data["region"] = finding.region
             data["resource_id"] = finding.resource_id
             data["resource_arn"] = finding.resource_arn
-            data[
-                "finding_unique_id"
-            ] = f"prowler-{provider}-{finding.check_metadata.CheckID}-{audit_info.audited_account}-{finding.region}-{finding.resource_id}"
+            data["finding_unique_id"] = (
+                f"prowler-{provider}-{finding.check_metadata.CheckID}-{audit_info.audited_account}-{finding.region}-{finding.resource_id}"
+            )
             data["compliance"] = unroll_dict(
                 get_check_compliance(finding, provider, output_options)
             )
@@ -658,8 +658,8 @@ class Check_Output_CSV_Generic_Compliance(BaseModel):
     Requirements_Attributes_Section: Optional[str]
     Requirements_Attributes_SubSection: Optional[str]
     Requirements_Attributes_SubGroup: Optional[str]
-    Requirements_Attributes_Service: str
-    Requirements_Attributes_Soc_Type: Optional[str]
+    Requirements_Attributes_Service: Optional[str]
+    Requirements_Attributes_Type: Optional[str]
     Status: str
     StatusExtended: str
     ResourceId: str
diff --git a/prowler/lib/outputs/slack.py b/prowler/lib/outputs/slack.py
index 1c8a8ad63d9..d972d372d14 100644
--- a/prowler/lib/outputs/slack.py
+++ b/prowler/lib/outputs/slack.py
@@ -13,7 +13,7 @@ def send_slack_message(token, channel, stats, provider, audit_info):
         response = client.chat_postMessage(
             username="Prowler",
             icon_url=square_logo_img,
-            channel="#" + channel,
+            channel=f"#{channel}",
             blocks=create_message_blocks(identity, logo, stats),
         )
         return response
@@ -35,7 +35,7 @@ def create_message_identity(provider, audit_info):
         elif provider == "azure":
             printed_subscriptions = []
             for key, value in audit_info.identity.subscriptions.items():
-                intermediate = "- *" + key + ": " + value + "*\n"
+                intermediate = f"- *{key}: {value}*\n"
                 printed_subscriptions.append(intermediate)
             identity = f"Azure Subscriptions:\n{''.join(printed_subscriptions)}"
             logo = azure_logo
@@ -66,14 +66,14 @@ def create_message_blocks(identity, logo, stats):
                 "type": "section",
                 "text": {
                     "type": "mrkdwn",
-                    "text": f"\n:white_check_mark: *{stats['total_pass']} Passed findings* ({round(stats['total_pass']/stats['findings_count']*100,2)}%)\n",
+                    "text": f"\n:white_check_mark: *{stats['total_pass']} Passed findings* ({round(stats['total_pass'] / stats['findings_count'] * 100 , 2)}%)\n",
                 },
             },
             {
                 "type": "section",
                 "text": {
                     "type": "mrkdwn",
-                    "text": f"\n:x: *{stats['total_fail']} Failed findings* ({round(stats['total_fail']/stats['findings_count']*100,2)}%)\n ",
+                    "text": f"\n:x: *{stats['total_fail']} Failed findings* ({round(stats['total_fail'] / stats['findings_count'] * 100 , 2)}%)\n ",
                 },
             },
             {
diff --git a/prowler/lib/outputs/summary_table.py b/prowler/lib/outputs/summary_table.py
index 6e121018ad4..51a12c85c63 100644
--- a/prowler/lib/outputs/summary_table.py
+++ b/prowler/lib/outputs/summary_table.py
@@ -99,8 +99,8 @@ def display_summary_table(
             print("\nOverview Results:")
             overview_table = [
                 [
-                    f"{Fore.RED}{round(fail_count/len(findings)*100, 2)}% ({fail_count}) Failed{Style.RESET_ALL}",
-                    f"{Fore.GREEN}{round(pass_count/len(findings)*100, 2)}% ({pass_count}) Passed{Style.RESET_ALL}",
+                    f"{Fore.RED}{round(fail_count / len(findings) * 100, 2)}% ({fail_count}) Failed{Style.RESET_ALL}",
+                    f"{Fore.GREEN}{round(pass_count / len(findings) * 100, 2)}% ({pass_count}) Passed{Style.RESET_ALL}",
                 ]
             ]
             print(tabulate(overview_table, tablefmt="rounded_grid"))
diff --git a/prowler/providers/aws/aws_provider.py b/prowler/providers/aws/aws_provider.py
index 85d21d1bfa9..94c2ff1645c 100644
--- a/prowler/providers/aws/aws_provider.py
+++ b/prowler/providers/aws/aws_provider.py
@@ -10,7 +10,10 @@
 from prowler.lib.check.check import list_modules, recover_checks_from_service
 from prowler.lib.logger import logger
 from prowler.lib.utils.utils import open_file, parse_json_file
-from prowler.providers.aws.config import AWS_STS_GLOBAL_ENDPOINT_REGION
+from prowler.providers.aws.config import (
+    AWS_STS_GLOBAL_ENDPOINT_REGION,
+    ROLE_SESSION_NAME,
+)
 from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info, AWSAssumeRole
 from prowler.providers.aws.lib.credentials.credentials import create_sts_session
 
@@ -113,9 +116,15 @@ def assume_role(
     sts_endpoint_region: str = None,
 ) -> dict:
     try:
+        role_session_name = (
+            assumed_role_info.role_session_name
+            if assumed_role_info.role_session_name
+            else ROLE_SESSION_NAME
+        )
+
         assume_role_arguments = {
             "RoleArn": assumed_role_info.role_arn,
-            "RoleSessionName": "ProwlerAsessmentSession",
+            "RoleSessionName": role_session_name,
             "DurationSeconds": assumed_role_info.session_duration,
         }
 
@@ -152,23 +161,31 @@ def input_role_mfa_token_and_code() -> tuple[str]:
 
 
 def generate_regional_clients(
-    service: str, audit_info: AWS_Audit_Info, global_service: bool = False
+    service: str,
+    audit_info: AWS_Audit_Info,
 ) -> dict:
+    """generate_regional_clients returns a dict with the following format for the given service:
+
+    Example:
+        {"eu-west-1": boto3_service_client}
+    """
     try:
         regional_clients = {}
         service_regions = get_available_aws_service_regions(service, audit_info)
-        # Check if it is global service to gather only one region
-        if global_service:
-            if service_regions:
-                if audit_info.profile_region in service_regions:
-                    service_regions = [audit_info.profile_region]
-                service_regions = service_regions[:1]
-        for region in service_regions:
+
+        # Get the regions enabled for the account and get the intersection with the service available regions
+        if audit_info.enabled_regions:
+            enabled_regions = service_regions.intersection(audit_info.enabled_regions)
+        else:
+            enabled_regions = service_regions
+
+        for region in enabled_regions:
             regional_client = audit_info.audit_session.client(
                 service, region_name=region, config=audit_info.session_config
             )
             regional_client.region = region
             regional_clients[region] = regional_client
+
         return regional_clients
     except Exception as error:
         logger.error(
@@ -176,6 +193,26 @@ def generate_regional_clients(
         )
 
 
+def get_aws_enabled_regions(audit_info: AWS_Audit_Info) -> set:
+    """get_aws_enabled_regions returns a set of enabled AWS regions"""
+
+    # EC2 Client to check enabled regions
+    service = "ec2"
+    default_region = get_default_region(service, audit_info)
+    ec2_client = audit_info.audit_session.client(service, region_name=default_region)
+
+    enabled_regions = set()
+    try:
+        # With AllRegions=False we only get the enabled regions for the account
+        for region in ec2_client.describe_regions(AllRegions=False).get("Regions", []):
+            enabled_regions.add(region.get("RegionName"))
+    except Exception as error:
+        logger.warning(
+            f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+        )
+    return enabled_regions
+
+
 def get_aws_available_regions():
     try:
         actual_directory = pathlib.Path(os.path.dirname(os.path.realpath(__file__)))
@@ -216,6 +253,8 @@ def get_checks_from_input_arn(audit_resources: list, provider: str) -> set:
                     service = "efs"
                 elif service == "logs":
                     service = "cloudwatch"
+                elif service == "cognito":
+                    service = "cognito-idp"
                 # Check if Prowler has checks in service
                 try:
                     list_modules(provider, service)
@@ -267,17 +306,18 @@ def get_regions_from_audit_resources(audit_resources: list) -> set:
     return audited_regions
 
 
-def get_available_aws_service_regions(service: str, audit_info: AWS_Audit_Info) -> list:
+def get_available_aws_service_regions(service: str, audit_info: AWS_Audit_Info) -> set:
     # Get json locally
     actual_directory = pathlib.Path(os.path.dirname(os.path.realpath(__file__)))
     with open_file(f"{actual_directory}/{aws_services_json_file}") as f:
         data = parse_json_file(f)
-    # Check if it is a subservice
-    json_regions = data["services"][service]["regions"][audit_info.audited_partition]
-    if audit_info.audited_regions:  # Check for input aws audit_info.audited_regions
-        regions = list(
-            set(json_regions).intersection(audit_info.audited_regions)
-        )  # Get common regions between input and json
+    json_regions = set(
+        data["services"][service]["regions"][audit_info.audited_partition]
+    )
+    # Check for input aws audit_info.audited_regions
+    if audit_info.audited_regions:
+        # Get common regions between input and json
+        regions = json_regions.intersection(audit_info.audited_regions)
     else:  # Get all regions from json of the service and partition
         regions = json_regions
     return regions
diff --git a/prowler/providers/aws/aws_provider_new.py b/prowler/providers/aws/aws_provider_new.py
index cbd4afb635b..8ff08acff84 100644
--- a/prowler/providers/aws/aws_provider_new.py
+++ b/prowler/providers/aws/aws_provider_new.py
@@ -360,7 +360,7 @@ def print_credentials(self):
 
 AWS-CLI Profile: {Fore.YELLOW}[{profile}]{Style.RESET_ALL} AWS Filter Region: {Fore.YELLOW}[{regions}]{Style.RESET_ALL}
 AWS Account: {Fore.YELLOW}[{self.identity.account}]{Style.RESET_ALL} UserId: {Fore.YELLOW}[{self.identity.user_id}]{Style.RESET_ALL}
-Caller Identity ARN: {Fore.YELLOW}[{ self.identity.identity_arn}]{Style.RESET_ALL}
+Caller Identity ARN: {Fore.YELLOW}[{self.identity.identity_arn}]{Style.RESET_ALL}
 """
         # If -A is set, print Assumed Role ARN
         if self.assumed_role.assumed_role_info.role_arn is not None:
@@ -596,9 +596,9 @@ def __assume_role__(
 
             # Set the info to assume the role from the partition, account and role name
             if self.assumed_role.assumed_role_info.external_id:
-                assume_role_arguments[
-                    "ExternalId"
-                ] = self.assumed_role.assumed_role_info.external_id
+                assume_role_arguments["ExternalId"] = (
+                    self.assumed_role.assumed_role_info.external_id
+                )
 
             if self.assumed_role.assumed_role_info.mfa_enabled:
                 mfa_ARN, mfa_TOTP = self.__input_role_mfa_token_and_code__()
diff --git a/prowler/providers/aws/aws_regions_by_service.json b/prowler/providers/aws/aws_regions_by_service.json
index 96b19504e2f..ac2fff7df70 100644
--- a/prowler/providers/aws/aws_regions_by_service.json
+++ b/prowler/providers/aws/aws_regions_by_service.json
@@ -15,6 +15,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -95,6 +96,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -137,6 +139,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -319,6 +322,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -397,6 +401,7 @@
           "eu-west-1",
           "eu-west-2",
           "eu-west-3",
+          "me-central-1",
           "me-south-1",
           "sa-east-1",
           "us-east-1",
@@ -429,6 +434,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -471,6 +477,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -715,6 +722,7 @@
           "ap-southeast-1",
           "ap-southeast-2",
           "ap-southeast-3",
+          "ap-southeast-4",
           "ca-central-1",
           "eu-central-1",
           "eu-central-2",
@@ -724,6 +732,7 @@
           "eu-west-1",
           "eu-west-2",
           "eu-west-3",
+          "il-central-1",
           "me-central-1",
           "me-south-1",
           "sa-east-1",
@@ -776,6 +785,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -818,6 +828,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -939,6 +950,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -981,6 +993,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -1034,6 +1047,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -1061,6 +1075,17 @@
         ]
       }
     },
+    "b2bi": {
+      "regions": {
+        "aws": [
+          "us-east-1",
+          "us-east-2",
+          "us-west-2"
+        ],
+        "aws-cn": [],
+        "aws-us-gov": []
+      }
+    },
     "backup": {
       "regions": {
         "aws": [
@@ -1191,6 +1216,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -1228,7 +1254,9 @@
           "us-west-2"
         ],
         "aws-cn": [],
-        "aws-us-gov": []
+        "aws-us-gov": [
+          "us-gov-west-1"
+        ]
       }
     },
     "billingconductor": {
@@ -1463,6 +1491,25 @@
         "aws-us-gov": []
       }
     },
+    "cleanroomsml": {
+      "regions": {
+        "aws": [
+          "ap-northeast-1",
+          "ap-northeast-2",
+          "ap-southeast-1",
+          "ap-southeast-2",
+          "eu-central-1",
+          "eu-north-1",
+          "eu-west-1",
+          "eu-west-2",
+          "us-east-1",
+          "us-east-2",
+          "us-west-2"
+        ],
+        "aws-cn": [],
+        "aws-us-gov": []
+      }
+    },
     "cloud9": {
       "regions": {
         "aws": [
@@ -1481,6 +1528,7 @@
           "eu-west-1",
           "eu-west-2",
           "eu-west-3",
+          "il-central-1",
           "me-south-1",
           "sa-east-1",
           "us-east-1",
@@ -1507,6 +1555,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -1632,6 +1681,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -1674,6 +1724,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -1707,6 +1758,7 @@
           "ap-northeast-2",
           "ap-northeast-3",
           "ap-south-1",
+          "ap-south-2",
           "ap-southeast-1",
           "ap-southeast-2",
           "ap-southeast-3",
@@ -1801,6 +1853,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -1830,7 +1883,9 @@
     },
     "cloudtrail-data": {
       "regions": {
-        "aws": [],
+        "aws": [
+          "me-central-1"
+        ],
         "aws-cn": [],
         "aws-us-gov": []
       }
@@ -1850,6 +1905,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -2004,6 +2060,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -2183,15 +2240,58 @@
         "aws-us-gov": []
       }
     },
+    "codewhisperer": {
+      "regions": {
+        "aws": [
+          "us-east-1"
+        ],
+        "aws-cn": [],
+        "aws-us-gov": []
+      }
+    },
+    "cognito": {
+      "regions": {
+        "aws": [
+          "af-south-1",
+          "ap-northeast-1",
+          "ap-northeast-2",
+          "ap-northeast-3",
+          "ap-south-1",
+          "ap-southeast-1",
+          "ap-southeast-2",
+          "ap-southeast-3",
+          "ca-central-1",
+          "eu-central-1",
+          "eu-north-1",
+          "eu-south-1",
+          "eu-west-1",
+          "eu-west-2",
+          "eu-west-3",
+          "il-central-1",
+          "me-south-1",
+          "sa-east-1",
+          "us-east-1",
+          "us-east-2",
+          "us-west-1",
+          "us-west-2"
+        ],
+        "aws-cn": [],
+        "aws-us-gov": [
+          "us-gov-west-1"
+        ]
+      }
+    },
     "cognito-identity": {
       "regions": {
         "aws": [
+          "af-south-1",
           "ap-northeast-1",
           "ap-northeast-2",
           "ap-northeast-3",
           "ap-south-1",
           "ap-southeast-1",
           "ap-southeast-2",
+          "ap-southeast-3",
           "ca-central-1",
           "eu-central-1",
           "eu-north-1",
@@ -2218,12 +2318,14 @@
     "cognito-idp": {
       "regions": {
         "aws": [
+          "af-south-1",
           "ap-northeast-1",
           "ap-northeast-2",
           "ap-northeast-3",
           "ap-south-1",
           "ap-southeast-1",
           "ap-southeast-2",
+          "ap-southeast-3",
           "ca-central-1",
           "eu-central-1",
           "eu-north-1",
@@ -2360,6 +2462,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -2513,6 +2616,15 @@
         ]
       }
     },
+    "cost-optimization-hub": {
+      "regions": {
+        "aws": [
+          "us-east-1"
+        ],
+        "aws-cn": [],
+        "aws-us-gov": []
+      }
+    },
     "costexplorer": {
       "regions": {
         "aws": [
@@ -2632,6 +2744,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -2663,12 +2776,14 @@
       "regions": {
         "aws": [
           "ap-northeast-1",
+          "ap-northeast-2",
           "ap-southeast-1",
           "ap-southeast-2",
           "ca-central-1",
           "eu-central-1",
           "eu-north-1",
           "eu-west-1",
+          "eu-west-2",
           "sa-east-1",
           "us-east-1",
           "us-east-2",
@@ -2711,17 +2826,6 @@
         "aws-us-gov": []
       }
     },
-    "deeplens": {
-      "regions": {
-        "aws": [
-          "ap-northeast-1",
-          "eu-central-1",
-          "us-east-1"
-        ],
-        "aws-cn": [],
-        "aws-us-gov": []
-      }
-    },
     "deepracer": {
       "regions": {
         "aws": [
@@ -2811,6 +2915,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -2868,6 +2973,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -2876,6 +2982,7 @@
           "eu-west-1",
           "eu-west-2",
           "eu-west-3",
+          "il-central-1",
           "me-central-1",
           "me-south-1",
           "sa-east-1",
@@ -2909,6 +3016,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -3000,7 +3108,10 @@
           "us-west-2"
         ],
         "aws-cn": [],
-        "aws-us-gov": []
+        "aws-us-gov": [
+          "us-gov-east-1",
+          "us-gov-west-1"
+        ]
       }
     },
     "ds": {
@@ -3018,6 +3129,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -3060,6 +3172,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -3102,6 +3215,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -3144,6 +3258,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -3186,6 +3301,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -3228,6 +3344,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -3280,6 +3397,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -3322,6 +3440,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -3364,6 +3483,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -3391,6 +3511,43 @@
         ]
       }
     },
+    "eks-auth": {
+      "regions": {
+        "aws": [
+          "af-south-1",
+          "ap-east-1",
+          "ap-northeast-1",
+          "ap-northeast-2",
+          "ap-northeast-3",
+          "ap-south-1",
+          "ap-south-2",
+          "ap-southeast-1",
+          "ap-southeast-2",
+          "ap-southeast-3",
+          "ap-southeast-4",
+          "ca-central-1",
+          "ca-west-1",
+          "eu-central-1",
+          "eu-central-2",
+          "eu-north-1",
+          "eu-south-1",
+          "eu-south-2",
+          "eu-west-1",
+          "eu-west-2",
+          "eu-west-3",
+          "il-central-1",
+          "me-central-1",
+          "me-south-1",
+          "sa-east-1",
+          "us-east-1",
+          "us-east-2",
+          "us-west-1",
+          "us-west-2"
+        ],
+        "aws-cn": [],
+        "aws-us-gov": []
+      }
+    },
     "elastic-inference": {
       "regions": {
         "aws": [
@@ -3420,6 +3577,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -3515,6 +3673,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -3557,6 +3716,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -3599,6 +3759,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -3679,9 +3840,11 @@
           "eu-central-1",
           "eu-north-1",
           "eu-south-1",
+          "eu-south-2",
           "eu-west-1",
           "eu-west-2",
           "eu-west-3",
+          "me-central-1",
           "me-south-1",
           "sa-east-1",
           "us-east-1",
@@ -3693,7 +3856,10 @@
           "cn-north-1",
           "cn-northwest-1"
         ],
-        "aws-us-gov": []
+        "aws-us-gov": [
+          "us-gov-east-1",
+          "us-gov-west-1"
+        ]
       }
     },
     "entityresolution": {
@@ -3729,6 +3895,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -3771,6 +3938,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -3813,6 +3981,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -3872,6 +4041,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -3963,6 +4133,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -4271,19 +4442,30 @@
     "fsx-openzfs": {
       "regions": {
         "aws": [
+          "af-south-1",
           "ap-east-1",
           "ap-northeast-1",
           "ap-northeast-2",
+          "ap-northeast-3",
           "ap-south-1",
+          "ap-south-2",
           "ap-southeast-1",
           "ap-southeast-2",
+          "ap-southeast-3",
           "ca-central-1",
           "eu-central-1",
           "eu-north-1",
+          "eu-south-1",
           "eu-west-1",
           "eu-west-2",
+          "eu-west-3",
+          "il-central-1",
+          "me-central-1",
+          "me-south-1",
+          "sa-east-1",
           "us-east-1",
           "us-east-2",
+          "us-west-1",
           "us-west-2"
         ],
         "aws-cn": [],
@@ -4451,6 +4633,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -4622,6 +4805,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -4670,6 +4854,7 @@
           "eu-west-2",
           "eu-west-3",
           "il-central-1",
+          "me-central-1",
           "me-south-1",
           "sa-east-1",
           "us-east-1",
@@ -4699,6 +4884,7 @@
           "ap-southeast-1",
           "ap-southeast-2",
           "ap-southeast-3",
+          "ap-southeast-4",
           "ca-central-1",
           "eu-central-1",
           "eu-central-2",
@@ -4708,6 +4894,7 @@
           "eu-west-2",
           "eu-west-3",
           "il-central-1",
+          "me-central-1",
           "me-south-1",
           "sa-east-1",
           "us-east-1",
@@ -4740,6 +4927,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -4806,7 +4994,7 @@
         ]
       }
     },
-    "inspector2": {
+    "inspector-scan": {
       "regions": {
         "aws": [
           "af-south-1",
@@ -4840,6 +5028,43 @@
         ]
       }
     },
+    "inspector2": {
+      "regions": {
+        "aws": [
+          "af-south-1",
+          "ap-east-1",
+          "ap-northeast-1",
+          "ap-northeast-2",
+          "ap-northeast-3",
+          "ap-south-1",
+          "ap-southeast-1",
+          "ap-southeast-2",
+          "ap-southeast-3",
+          "ca-central-1",
+          "eu-central-1",
+          "eu-central-2",
+          "eu-north-1",
+          "eu-south-1",
+          "eu-west-1",
+          "eu-west-2",
+          "eu-west-3",
+          "me-south-1",
+          "sa-east-1",
+          "us-east-1",
+          "us-east-2",
+          "us-west-1",
+          "us-west-2"
+        ],
+        "aws-cn": [
+          "cn-north-1",
+          "cn-northwest-1"
+        ],
+        "aws-us-gov": [
+          "us-gov-east-1",
+          "us-gov-west-1"
+        ]
+      }
+    },
     "internetmonitor": {
       "regions": {
         "aws": [
@@ -5218,7 +5443,9 @@
           "us-east-1",
           "us-west-2"
         ],
-        "aws-cn": [],
+        "aws-cn": [
+          "cn-north-1"
+        ],
         "aws-us-gov": [
           "us-gov-west-1"
         ]
@@ -5402,6 +5629,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -5512,6 +5740,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -5596,6 +5825,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -5636,10 +5866,13 @@
           "ap-southeast-1",
           "ap-southeast-2",
           "ap-southeast-3",
+          "ap-southeast-4",
           "ca-central-1",
           "eu-central-1",
+          "eu-central-2",
           "eu-north-1",
           "eu-south-1",
+          "eu-south-2",
           "eu-west-1",
           "eu-west-2",
           "eu-west-3",
@@ -5674,10 +5907,13 @@
           "ap-southeast-1",
           "ap-southeast-2",
           "ap-southeast-3",
+          "ap-southeast-4",
           "ca-central-1",
           "eu-central-1",
+          "eu-central-2",
           "eu-north-1",
           "eu-south-1",
+          "eu-south-2",
           "eu-west-1",
           "eu-west-2",
           "eu-west-3",
@@ -5812,6 +6048,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -5912,6 +6149,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -6011,16 +6249,22 @@
     "m2": {
       "regions": {
         "aws": [
+          "af-south-1",
           "ap-northeast-1",
           "ap-northeast-2",
+          "ap-northeast-3",
           "ap-south-1",
           "ap-southeast-1",
           "ap-southeast-2",
           "ca-central-1",
           "eu-central-1",
+          "eu-north-1",
+          "eu-south-1",
+          "eu-south-2",
           "eu-west-1",
           "eu-west-2",
           "eu-west-3",
+          "il-central-1",
           "sa-east-1",
           "us-east-1",
           "us-east-2",
@@ -6175,6 +6419,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -6270,14 +6515,17 @@
           "ap-northeast-2",
           "ap-northeast-3",
           "ap-south-1",
+          "ap-south-2",
           "ap-southeast-1",
           "ap-southeast-2",
+          "ap-southeast-4",
           "ca-central-1",
           "eu-central-1",
           "eu-north-1",
           "eu-west-1",
           "eu-west-2",
           "eu-west-3",
+          "me-central-1",
           "sa-east-1",
           "us-east-1",
           "us-east-2",
@@ -6328,6 +6576,7 @@
           "ap-south-1",
           "ap-southeast-1",
           "ap-southeast-2",
+          "ap-southeast-4",
           "ca-central-1",
           "eu-central-1",
           "eu-north-1",
@@ -6352,6 +6601,7 @@
           "ap-south-1",
           "ap-southeast-1",
           "ap-southeast-2",
+          "ap-southeast-4",
           "ca-central-1",
           "eu-central-1",
           "eu-north-1",
@@ -6377,6 +6627,7 @@
           "ap-south-1",
           "ap-southeast-1",
           "ap-southeast-2",
+          "ap-southeast-4",
           "ca-central-1",
           "eu-central-1",
           "eu-north-1",
@@ -6398,9 +6649,12 @@
         "aws": [
           "ap-northeast-1",
           "ap-northeast-2",
+          "ap-northeast-3",
           "ap-south-1",
           "ap-southeast-1",
           "ap-southeast-2",
+          "ap-southeast-4",
+          "ca-central-1",
           "eu-central-1",
           "eu-north-1",
           "eu-west-1",
@@ -6708,6 +6962,7 @@
           "eu-west-1",
           "eu-west-2",
           "eu-west-3",
+          "il-central-1",
           "me-central-1",
           "me-south-1",
           "sa-east-1",
@@ -6796,6 +7051,21 @@
         ]
       }
     },
+    "neptune-graph": {
+      "regions": {
+        "aws": [
+          "ap-northeast-1",
+          "ap-southeast-1",
+          "eu-central-1",
+          "eu-west-1",
+          "us-east-1",
+          "us-east-2",
+          "us-west-2"
+        ],
+        "aws-cn": [],
+        "aws-us-gov": []
+      }
+    },
     "network-firewall": {
       "regions": {
         "aws": [
@@ -6867,6 +7137,32 @@
         ]
       }
     },
+    "networkmonitor": {
+      "regions": {
+        "aws": [
+          "ap-east-1",
+          "ap-northeast-1",
+          "ap-northeast-2",
+          "ap-south-1",
+          "ap-southeast-1",
+          "ap-southeast-2",
+          "ca-central-1",
+          "eu-central-1",
+          "eu-north-1",
+          "eu-west-1",
+          "eu-west-2",
+          "eu-west-3",
+          "me-south-1",
+          "sa-east-1",
+          "us-east-1",
+          "us-east-2",
+          "us-west-1",
+          "us-west-2"
+        ],
+        "aws-cn": [],
+        "aws-us-gov": []
+      }
+    },
     "nimble": {
       "regions": {
         "aws": [
@@ -6937,6 +7233,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -6991,6 +7288,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -7123,6 +7421,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -7160,8 +7459,10 @@
           "ap-southeast-2",
           "ca-central-1",
           "eu-central-1",
+          "eu-north-1",
           "eu-west-1",
           "eu-west-2",
+          "sa-east-1",
           "us-east-1",
           "us-east-2",
           "us-west-1",
@@ -7224,6 +7525,7 @@
       "regions": {
         "aws": [
           "us-east-1",
+          "us-east-2",
           "us-west-2"
         ],
         "aws-cn": [],
@@ -7301,6 +7603,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -7381,19 +7684,37 @@
     "pinpoint-sms-voice-v2": {
       "regions": {
         "aws": [
+          "af-south-1",
           "ap-northeast-1",
+          "ap-northeast-2",
+          "ap-northeast-3",
           "ap-south-1",
+          "ap-south-2",
           "ap-southeast-1",
           "ap-southeast-2",
+          "ap-southeast-3",
+          "ap-southeast-4",
           "ca-central-1",
           "eu-central-1",
+          "eu-central-2",
+          "eu-north-1",
+          "eu-south-1",
+          "eu-south-2",
           "eu-west-1",
           "eu-west-2",
+          "eu-west-3",
+          "il-central-1",
+          "me-central-1",
+          "me-south-1",
+          "sa-east-1",
           "us-east-1",
+          "us-east-2",
+          "us-west-1",
           "us-west-2"
         ],
         "aws-cn": [],
         "aws-us-gov": [
+          "us-gov-east-1",
           "us-gov-west-1"
         ]
       }
@@ -7428,7 +7749,10 @@
           "us-west-1",
           "us-west-2"
         ],
-        "aws-cn": [],
+        "aws-cn": [
+          "cn-north-1",
+          "cn-northwest-1"
+        ],
         "aws-us-gov": []
       }
     },
@@ -7492,6 +7816,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -7606,7 +7931,9 @@
           "us-east-2",
           "us-west-2"
         ],
-        "aws-cn": [],
+        "aws-cn": [
+          "cn-north-1"
+        ],
         "aws-us-gov": [
           "us-gov-west-1"
         ]
@@ -7627,6 +7954,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -7669,6 +7997,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -7711,6 +8040,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -7784,6 +8114,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -7826,6 +8157,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -7853,6 +8185,23 @@
         ]
       }
     },
+    "redshift-serverless": {
+      "regions": {
+        "aws": [
+          "ap-south-1",
+          "ca-central-1",
+          "eu-west-3",
+          "us-east-1",
+          "us-east-2",
+          "us-west-1",
+          "us-west-2"
+        ],
+        "aws-cn": [
+          "cn-north-1"
+        ],
+        "aws-us-gov": []
+      }
+    },
     "rekognition": {
       "regions": {
         "aws": [
@@ -7877,6 +8226,16 @@
         ]
       }
     },
+    "repostspace": {
+      "regions": {
+        "aws": [
+          "eu-central-1",
+          "us-west-2"
+        ],
+        "aws-cn": [],
+        "aws-us-gov": []
+      }
+    },
     "resiliencehub": {
       "regions": {
         "aws": [
@@ -7950,6 +8309,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -7992,6 +8352,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -8045,16 +8406,22 @@
           "ap-northeast-2",
           "ap-northeast-3",
           "ap-south-1",
+          "ap-south-2",
           "ap-southeast-1",
           "ap-southeast-2",
           "ap-southeast-3",
+          "ap-southeast-4",
           "ca-central-1",
           "eu-central-1",
+          "eu-central-2",
           "eu-north-1",
           "eu-south-1",
+          "eu-south-2",
           "eu-west-1",
           "eu-west-2",
           "eu-west-3",
+          "il-central-1",
+          "me-central-1",
           "me-south-1",
           "sa-east-1",
           "us-east-1",
@@ -8103,7 +8470,10 @@
           "us-west-2"
         ],
         "aws-cn": [],
-        "aws-us-gov": []
+        "aws-us-gov": [
+          "us-gov-east-1",
+          "us-gov-west-1"
+        ]
       }
     },
     "route53": {
@@ -8121,45 +8491,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
-          "eu-central-1",
-          "eu-central-2",
-          "eu-north-1",
-          "eu-south-1",
-          "eu-south-2",
-          "eu-west-1",
-          "eu-west-2",
-          "eu-west-3",
-          "il-central-1",
-          "me-central-1",
-          "me-south-1",
-          "sa-east-1",
-          "us-east-1",
-          "us-east-2",
-          "us-west-1",
-          "us-west-2"
-        ],
-        "aws-cn": [
-          "cn-north-1",
-          "cn-northwest-1"
-        ],
-        "aws-us-gov": []
-      }
-    },
-    "route53-application-recovery-controller": {
-      "regions": {
-        "aws": [
-          "af-south-1",
-          "ap-east-1",
-          "ap-northeast-1",
-          "ap-northeast-2",
-          "ap-northeast-3",
-          "ap-south-1",
-          "ap-south-2",
-          "ap-southeast-1",
-          "ap-southeast-2",
-          "ap-southeast-3",
-          "ap-southeast-4",
-          "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -8217,6 +8549,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -8277,6 +8610,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -8384,6 +8718,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -8427,6 +8762,7 @@
           "eu-central-1",
           "eu-north-1",
           "eu-south-1",
+          "eu-south-2",
           "eu-west-1",
           "eu-west-2",
           "eu-west-3",
@@ -8468,6 +8804,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -8510,6 +8847,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -8552,6 +8890,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -8681,6 +9020,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -8723,6 +9063,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -8822,6 +9163,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -8906,6 +9248,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -8945,6 +9288,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -9231,6 +9575,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -9273,6 +9618,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -9315,6 +9661,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -9441,6 +9788,7 @@
           "eu-west-2",
           "eu-west-3",
           "il-central-1",
+          "me-central-1",
           "me-south-1",
           "sa-east-1",
           "us-east-1",
@@ -9473,6 +9821,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -9557,6 +9906,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -9584,6 +9934,17 @@
         ]
       }
     },
+    "supplychain": {
+      "regions": {
+        "aws": [
+          "eu-central-1",
+          "us-east-1",
+          "us-west-2"
+        ],
+        "aws-cn": [],
+        "aws-us-gov": []
+      }
+    },
     "support": {
       "regions": {
         "aws": [
@@ -9599,6 +9960,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -9652,6 +10014,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -9694,6 +10057,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -9745,6 +10109,21 @@
         ]
       }
     },
+    "thinclient": {
+      "regions": {
+        "aws": [
+          "ap-south-1",
+          "ca-central-1",
+          "eu-central-1",
+          "eu-west-1",
+          "eu-west-2",
+          "us-east-1",
+          "us-west-2"
+        ],
+        "aws-cn": [],
+        "aws-us-gov": []
+      }
+    },
     "timestream": {
       "regions": {
         "aws": [
@@ -9782,10 +10161,14 @@
     "tnb": {
       "regions": {
         "aws": [
+          "ap-northeast-2",
           "ap-southeast-2",
           "ca-central-1",
           "eu-central-1",
+          "eu-north-1",
+          "eu-south-2",
           "eu-west-3",
+          "sa-east-1",
           "us-east-1",
           "us-west-2"
         ],
@@ -9883,6 +10266,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -9951,6 +10335,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -9982,12 +10367,18 @@
       "regions": {
         "aws": [
           "ap-northeast-1",
+          "ap-northeast-2",
+          "ap-south-1",
           "ap-southeast-1",
           "ap-southeast-2",
+          "ap-southeast-3",
           "ca-central-1",
           "eu-central-1",
+          "eu-north-1",
+          "eu-south-1",
           "eu-west-1",
           "eu-west-2",
+          "il-central-1",
           "sa-east-1",
           "us-east-1",
           "us-east-2",
@@ -9995,7 +10386,10 @@
           "us-west-2"
         ],
         "aws-cn": [],
-        "aws-us-gov": []
+        "aws-us-gov": [
+          "us-gov-east-1",
+          "us-gov-west-1"
+        ]
       }
     },
     "verifiedpermissions": {
@@ -10099,6 +10493,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -10160,6 +10555,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -10400,7 +10796,10 @@
       "regions": {
         "aws": [
           "ap-northeast-1",
+          "ap-northeast-2",
+          "ap-southeast-1",
           "ap-southeast-2",
+          "ca-central-1",
           "eu-central-1",
           "eu-west-2",
           "us-east-1",
@@ -10506,6 +10905,7 @@
           "ap-southeast-3",
           "ap-southeast-4",
           "ca-central-1",
+          "ca-west-1",
           "eu-central-1",
           "eu-central-2",
           "eu-north-1",
@@ -10534,4 +10934,4 @@
       }
     }
   }
-}
\ No newline at end of file
+}
diff --git a/prowler/providers/aws/config.py b/prowler/providers/aws/config.py
index 619b433f883..aec929250f9 100644
--- a/prowler/providers/aws/config.py
+++ b/prowler/providers/aws/config.py
@@ -1,2 +1,3 @@
 AWS_STS_GLOBAL_ENDPOINT_REGION = "us-east-1"
 BOTO3_USER_AGENT_EXTRA = "APN_1826889"
+ROLE_SESSION_NAME = "ProwlerAssessmentSession"
diff --git a/prowler/providers/aws/lib/arguments/arguments.py b/prowler/providers/aws/lib/arguments/arguments.py
index 67477aca71e..a4ffc85ac99 100644
--- a/prowler/providers/aws/lib/arguments/arguments.py
+++ b/prowler/providers/aws/lib/arguments/arguments.py
@@ -1,6 +1,8 @@
 from argparse import ArgumentTypeError, Namespace
+from re import fullmatch, search
 
 from prowler.providers.aws.aws_provider import get_aws_available_regions
+from prowler.providers.aws.config import ROLE_SESSION_NAME
 from prowler.providers.aws.lib.arn.arn import arn_type
 
 
@@ -26,6 +28,13 @@ def init_parser(self):
         help="ARN of the role to be assumed",
         # Pending ARN validation
     )
+    aws_auth_subparser.add_argument(
+        "--role-session-name",
+        nargs="?",
+        default=ROLE_SESSION_NAME,
+        help="An identifier for the assumed role session. Defaults to ProwlerAssessmentSession",
+        type=validate_role_session_name,
+    )
     aws_auth_subparser.add_argument(
         "--mfa",
         action="store_true",
@@ -78,6 +87,11 @@ def init_parser(self):
         action="store_true",
         help="Skip updating previous findings of Prowler in Security Hub",
     )
+    aws_security_hub_subparser.add_argument(
+        "--send-sh-only-fails",
+        action="store_true",
+        help="Send only Prowler failed findings to SecurityHub",
+    )
     # AWS Quick Inventory
     aws_quick_inventory_subparser = aws_parser.add_argument_group("Quick Inventory")
     aws_quick_inventory_subparser.add_argument(
@@ -93,6 +107,7 @@ def init_parser(self):
         "-B",
         "--output-bucket",
         nargs="?",
+        type=validate_bucket,
         default=None,
         help="Custom output bucket, requires -M  and it can work also with -o flag.",
     )
@@ -100,6 +115,7 @@ def init_parser(self):
         "-D",
         "--output-bucket-no-assume",
         nargs="?",
+        type=validate_bucket,
         default=None,
         help="Same as -B but do not use the assumed role credentials to put objects to the bucket, instead uses the initial credentials.",
     )
@@ -173,9 +189,37 @@ def validate_arguments(arguments: Namespace) -> tuple[bool, str]:
 
     # Handle if session_duration is not the default value or external_id is set
     if (
-        arguments.session_duration and arguments.session_duration != 3600
-    ) or arguments.external_id:
+        (arguments.session_duration and arguments.session_duration != 3600)
+        or arguments.external_id
+        or arguments.role_session_name != ROLE_SESSION_NAME
+    ):
         if not arguments.role:
-            return (False, "To use -I/-T options -R option is needed")
+            return (
+                False,
+                "To use -I/--external-id, -T/--session-duration or --role-session-name options -R/--role option is needed",
+            )
 
     return (True, "")
+
+
+def validate_bucket(bucket_name):
+    """validate_bucket validates that the input bucket_name is valid"""
+    if search("(?!(^xn--|.+-s3alias$))^[a-z0-9][a-z0-9-]{1,61}[a-z0-9]$", bucket_name):
+        return bucket_name
+    else:
+        raise ArgumentTypeError(
+            "Bucket name must be valid (https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html)"
+        )
+
+
+def validate_role_session_name(session_name):
+    """
+    validates that the role session name is valid
+    Documentation: https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html
+    """
+    if fullmatch("[\w+=,.@-]{2,64}", session_name):
+        return session_name
+    else:
+        raise ArgumentTypeError(
+            "Role Session Name must be 2-64 characters long and consist only of upper- and lower-case alphanumeric characters with no spaces. You can also include underscores or any of the following characters: =,.@-"
+        )
diff --git a/prowler/providers/aws/lib/audit_info/audit_info.py b/prowler/providers/aws/lib/audit_info/audit_info.py
index 2030c5bb56d..fe2aba2a30e 100644
--- a/prowler/providers/aws/lib/audit_info/audit_info.py
+++ b/prowler/providers/aws/lib/audit_info/audit_info.py
@@ -30,6 +30,7 @@
         session_duration=None,
         external_id=None,
         mfa_enabled=None,
+        role_session_name=None,
     ),
     mfa_enabled=None,
     audit_resources=None,
@@ -38,4 +39,5 @@
     audit_metadata=None,
     audit_config=None,
     ignore_unused_services=False,
+    enabled_regions=set(),
 )
diff --git a/prowler/providers/aws/lib/audit_info/models.py b/prowler/providers/aws/lib/audit_info/models.py
index 20538a048fa..110126730fb 100644
--- a/prowler/providers/aws/lib/audit_info/models.py
+++ b/prowler/providers/aws/lib/audit_info/models.py
@@ -1,4 +1,4 @@
-from dataclasses import dataclass
+from dataclasses import dataclass, field
 from datetime import datetime
 from typing import Any, Optional
 
@@ -20,6 +20,7 @@ class AWSAssumeRole:
     session_duration: int
     external_id: str
     mfa_enabled: bool
+    role_session_name: str
 
 
 @dataclass
@@ -53,3 +54,4 @@ class AWS_Audit_Info:
     audit_metadata: Optional[Any]
     audit_config: Optional[dict] = None
     ignore_unused_services: bool = False
+    enabled_regions: set = field(default_factory=set)
diff --git a/prowler/providers/aws/lib/mutelist/mutelist.py b/prowler/providers/aws/lib/mutelist/mutelist.py
index da255f9b867..0d2274a87eb 100644
--- a/prowler/providers/aws/lib/mutelist/mutelist.py
+++ b/prowler/providers/aws/lib/mutelist/mutelist.py
@@ -118,7 +118,7 @@ def parse_mutelist_file(audit_info, mutelist_file):
 def mutelist_findings(
     mutelist: dict,
     audited_account: str,
-    check_findings: [Any],
+    check_findings: list[Any],
 ):
     # Check if finding is muted
     for finding in check_findings:
@@ -143,28 +143,23 @@ def is_muted(
     finding_tags,
 ):
     try:
-        muted_checks = {}
         # By default is not muted
         is_finding_muted = False
-        # First set account key from mutelist dict
-        if audited_account in mutelist["Accounts"]:
-            muted_checks = mutelist["Accounts"][audited_account]["Checks"]
-        # If there is a *, it affects to all accounts
-        # This cannot be elif since in the case of * and single accounts we
-        # want to merge muted checks from * to the other accounts check list
-        if "*" in mutelist["Accounts"]:
-            checks_multi_account = mutelist["Accounts"]["*"]["Checks"]
-            muted_checks.update(checks_multi_account)
-        # Test if it is muted
-        if is_muted_in_check(
-            muted_checks,
-            audited_account,
-            check,
-            finding_region,
-            finding_resource,
-            finding_tags,
-        ):
-            is_finding_muted = True
+
+        # We always check all the accounts present in the mutelist
+        # if one mutes the finding we set the finding as muted
+        for account in mutelist["Accounts"]:
+            if account == audited_account or account == "*":
+                if is_muted_in_check(
+                    mutelist["Accounts"][account]["Checks"],
+                    audited_account,
+                    check,
+                    finding_region,
+                    finding_resource,
+                    finding_tags,
+                ):
+                    is_finding_muted = True
+                    break
 
         return is_finding_muted
     except Exception as error:
@@ -204,7 +199,10 @@ def is_muted_in_check(
 
             muted_regions = muted_check_info.get("Regions")
             muted_resources = muted_check_info.get("Resources")
-            muted_tags = muted_check_info.get("Tags")
+            muted_tags = muted_check_info.get("Tags", "*")
+            # We need to set the allowlisted_tags if None, "" or [], so the falsy helps
+            if not muted_tags:
+                muted_tags = "*"
             # If there is a *, it affects to all checks
             if (
                 "*" == muted_check
@@ -221,13 +219,15 @@ def is_muted_in_check(
                 # For a finding to be muted requires the following set to True:
                 # - muted_in_check -> True
                 # - muted_in_region -> True
-                # - muted_in_tags -> True or muted_in_resource -> True
+                # - muted_in_tags -> True
+                # - muted_in_resource -> True
                 # - excepted -> False
 
                 if (
                     muted_in_check
                     and muted_in_region
-                    and (muted_in_tags or muted_in_resource)
+                    and muted_in_tags
+                    and muted_in_resource
                 ):
                     is_check_muted = True
 
@@ -305,10 +305,17 @@ def is_excepted(
             is_tag_excepted = __is_item_matched__(excepted_tags, finding_tags)
 
             if (
-                is_account_excepted
-                and is_region_excepted
-                and is_resource_excepted
-                and is_tag_excepted
+                not is_account_excepted
+                and not is_region_excepted
+                and not is_resource_excepted
+                and not is_tag_excepted
+            ):
+                excepted = False
+            elif (
+                (is_account_excepted or not excepted_accounts)
+                and (is_region_excepted or not excepted_regions)
+                and (is_resource_excepted or not excepted_resources)
+                and (is_tag_excepted or not excepted_tags)
             ):
                 excepted = True
         return excepted
diff --git a/prowler/providers/aws/lib/organizations/organizations.py b/prowler/providers/aws/lib/organizations/organizations.py
index 130b7166b8a..c691b2a5a5e 100644
--- a/prowler/providers/aws/lib/organizations/organizations.py
+++ b/prowler/providers/aws/lib/organizations/organizations.py
@@ -1,40 +1,61 @@
-import sys
-
-from boto3 import client
+from boto3 import client, session
 
 from prowler.lib.logger import logger
 from prowler.providers.aws.lib.audit_info.models import AWSOrganizationsInfo
 
 
 def get_organizations_metadata(
-    metadata_account: str, assumed_credentials: dict
-) -> AWSOrganizationsInfo:
+    aws_account_id: str,
+    assumed_credentials: dict = None,
+    session: session = None,
+) -> tuple[dict, dict]:
     try:
-        organizations_client = client(
-            "organizations",
-            aws_access_key_id=assumed_credentials["Credentials"]["AccessKeyId"],
-            aws_secret_access_key=assumed_credentials["Credentials"]["SecretAccessKey"],
-            aws_session_token=assumed_credentials["Credentials"]["SessionToken"],
-        )
+        if assumed_credentials:
+            organizations_client = client(
+                "organizations",
+                aws_access_key_id=assumed_credentials["Credentials"]["AccessKeyId"],
+                aws_secret_access_key=assumed_credentials["Credentials"][
+                    "SecretAccessKey"
+                ],
+                aws_session_token=assumed_credentials["Credentials"]["SessionToken"],
+            )
+        if session:
+            organizations_client = session.client("organizations")
+        else:
+            organizations_client = client("organizations")
+
         organizations_metadata = organizations_client.describe_account(
-            AccountId=metadata_account
+            AccountId=aws_account_id
         )
         list_tags_for_resource = organizations_client.list_tags_for_resource(
-            ResourceId=metadata_account
+            ResourceId=aws_account_id
         )
+
+        return organizations_metadata, list_tags_for_resource
     except Exception as error:
-        logger.critical(f"{error.__class__.__name__} -- {error}")
-        sys.exit(1)
-    else:
+        logger.warning(
+            f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+        )
+        return {}, {}
+
+
+def parse_organizations_metadata(metadata: dict, tags: dict) -> AWSOrganizationsInfo:
+    try:
         # Convert Tags dictionary to String
         account_details_tags = ""
-        for tag in list_tags_for_resource["Tags"]:
+        for tag in tags.get("Tags", {}):
             account_details_tags += tag["Key"] + ":" + tag["Value"] + ","
+
+        account_details = metadata.get("Account", {})
         organizations_info = AWSOrganizationsInfo(
-            account_details_email=organizations_metadata["Account"]["Email"],
-            account_details_name=organizations_metadata["Account"]["Name"],
-            account_details_arn=organizations_metadata["Account"]["Arn"],
-            account_details_org=organizations_metadata["Account"]["Arn"].split("/")[1],
-            account_details_tags=account_details_tags,
+            account_details_email=account_details.get("Email", ""),
+            account_details_name=account_details.get("Name", ""),
+            account_details_arn=account_details.get("Arn", ""),
+            account_details_org=account_details.get("Arn", "").split("/")[1],
+            account_details_tags=account_details_tags.rstrip(","),
         )
         return organizations_info
+    except Exception as error:
+        logger.warning(
+            f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+        )
diff --git a/prowler/providers/aws/lib/policy_condition_parser/policy_condition_parser.py b/prowler/providers/aws/lib/policy_condition_parser/policy_condition_parser.py
index 020aedc5057..d88d63bce78 100644
--- a/prowler/providers/aws/lib/policy_condition_parser/policy_condition_parser.py
+++ b/prowler/providers/aws/lib/policy_condition_parser/policy_condition_parser.py
@@ -1,8 +1,11 @@
-def is_account_only_allowed_in_condition(
-    condition_statement: dict, source_account: str
+def is_condition_block_restrictive(
+    condition_statement: dict, source_account: str, is_cross_account_allowed=False
 ):
     """
-    is_account_only_allowed_in_condition parses the IAM Condition policy block and returns True if the source_account passed as argument is within, False if not.
+    is_condition_block_restrictive parses the IAM Condition policy block and, by default, returns True if the source_account passed as argument is within, False if not.
+
+    If argument is_cross_account_allowed is True it tests if the Condition block includes any of the operators allowlisted returning True if does, False if not.
+
 
     @param condition_statement: dict with an IAM Condition block, e.g.:
         {
@@ -54,13 +57,19 @@ def is_account_only_allowed_in_condition(
                         condition_statement[condition_operator][value],
                         list,
                     ):
-                        # if there is an arn/account without the source account -> we do not consider it safe
-                        # here by default we assume is true and look for false entries
                         is_condition_key_restrictive = True
-                        for item in condition_statement[condition_operator][value]:
-                            if source_account not in item:
-                                is_condition_key_restrictive = False
-                                break
+                        # if cross account is not allowed check for each condition block looking for accounts
+                        # different than default
+                        if not is_cross_account_allowed:
+                            # if there is an arn/account without the source account -> we do not consider it safe
+                            # here by default we assume is true and look for false entries
+                            for item in condition_statement[condition_operator][value]:
+                                if source_account not in item:
+                                    is_condition_key_restrictive = False
+                                    break
+
+                        if is_condition_key_restrictive:
+                            is_condition_valid = True
 
                         if is_condition_key_restrictive:
                             is_condition_valid = True
@@ -70,10 +79,13 @@ def is_account_only_allowed_in_condition(
                         condition_statement[condition_operator][value],
                         str,
                     ):
-                        if (
-                            source_account
-                            in condition_statement[condition_operator][value]
-                        ):
+                        if is_cross_account_allowed:
                             is_condition_valid = True
+                        else:
+                            if (
+                                source_account
+                                in condition_statement[condition_operator][value]
+                            ):
+                                is_condition_valid = True
 
     return is_condition_valid
diff --git a/prowler/providers/aws/lib/quick_inventory/quick_inventory.py b/prowler/providers/aws/lib/quick_inventory/quick_inventory.py
index 666c2896d5e..82471431d04 100644
--- a/prowler/providers/aws/lib/quick_inventory/quick_inventory.py
+++ b/prowler/providers/aws/lib/quick_inventory/quick_inventory.py
@@ -211,9 +211,13 @@ def create_inventory_table(resources: list, resources_in_region: dict) -> dict:
 
 def create_output(resources: list, audit_info: AWS_Audit_Info, args):
     json_output = []
-    output_file = (
-        f"prowler-inventory-{audit_info.audited_account}-{output_file_timestamp}"
-    )
+    # Check if custom output filename was input, if not, set the default
+    if not hasattr(args, "output_filename") or args.output_filename is None:
+        output_file = (
+            f"prowler-inventory-{audit_info.audited_account}-{output_file_timestamp}"
+        )
+    else:
+        output_file = args.output_filename
 
     for item in sorted(resources, key=lambda d: d["arn"]):
         resource = {}
@@ -275,8 +279,8 @@ def create_output(resources: list, audit_info: AWS_Audit_Info, args):
         f"\n{Fore.YELLOW}WARNING: Only resources that have or have had tags will appear (except for IAM and S3).\nSee more in https://docs.prowler.cloud/en/latest/tutorials/quick-inventory/#objections{Style.RESET_ALL}"
     )
     print("\nMore details in files:")
-    print(f" - CSV: {args.output_directory}/{output_file+csv_file_suffix}")
-    print(f" - JSON: {args.output_directory}/{output_file+json_file_suffix}")
+    print(f" - CSV: {args.output_directory}/{output_file + csv_file_suffix}")
+    print(f" - JSON: {args.output_directory}/{output_file + json_file_suffix}")
 
     # Send output to S3 if needed (-B / -D)
     for mode in ["json", "csv"]:
diff --git a/prowler/providers/aws/lib/s3/s3.py b/prowler/providers/aws/lib/s3/s3.py
index 0ef570514f4..6ebb711fff7 100644
--- a/prowler/providers/aws/lib/s3/s3.py
+++ b/prowler/providers/aws/lib/s3/s3.py
@@ -1,5 +1,3 @@
-import sys
-
 from prowler.config.config import (
     csv_file_suffix,
     html_file_suffix,
@@ -29,7 +27,7 @@ def send_to_s3_bucket(
         else:  # Compliance output mode
             filename = f"{output_filename}_{output_mode}{csv_file_suffix}"
 
-        logger.info(f"Sending outputs to S3 bucket {output_bucket_name}")
+        logger.info(f"Sending output file {filename} to S3 bucket {output_bucket_name}")
         # File location
         file_name = output_directory + "/" + filename
 
@@ -41,10 +39,9 @@ def send_to_s3_bucket(
         s3_client.upload_file(file_name, output_bucket_name, object_name)
 
     except Exception as error:
-        logger.critical(
+        logger.error(
             f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}] -- {error}"
         )
-        sys.exit(1)
 
 
 def get_s3_object_path(output_directory: str) -> str:
diff --git a/prowler/providers/aws/lib/security_hub/security_hub.py b/prowler/providers/aws/lib/security_hub/security_hub.py
index 4c7f682a098..b4749aae174 100644
--- a/prowler/providers/aws/lib/security_hub/security_hub.py
+++ b/prowler/providers/aws/lib/security_hub/security_hub.py
@@ -1,4 +1,5 @@
 from boto3 import session
+from botocore.client import ClientError
 
 from prowler.config.config import timestamp_utc
 from prowler.lib.logger import logger
@@ -11,7 +12,7 @@
 
 
 def prepare_security_hub_findings(
-    findings: [], audit_info: AWS_Audit_Info, output_options, enabled_regions: []
+    findings: list, audit_info: AWS_Audit_Info, output_options, enabled_regions: list
 ) -> dict:
     security_hub_findings_per_region = {}
 
@@ -29,7 +30,11 @@ def prepare_security_hub_findings(
             continue
 
         # Handle status filters, if any
-        if not output_options.status or finding.status in output_options.status:
+        if (
+            not output_options.status
+            or finding.status in output_options.status
+            or output_options.send_sh_only_fails
+        ):
             continue
 
         # Get the finding region
@@ -70,15 +75,32 @@ def verify_security_hub_integration_enabled_per_region(
         if security_hub_prowler_integration_arn not in str(
             security_hub_client.list_enabled_products_for_import()
         ):
-            logger.error(
+            logger.warning(
                 f"Security Hub is enabled in {region} but Prowler integration does not accept findings. More info: https://docs.prowler.cloud/en/latest/tutorials/aws/securityhub/"
             )
         else:
             prowler_integration_enabled = True
 
+    # Handle all the permissions / configuration errors
+    except ClientError as client_error:
+        # Check if Account is subscribed to Security Hub
+        error_code = client_error.response["Error"]["Code"]
+        error_message = client_error.response["Error"]["Message"]
+        if (
+            error_code == "InvalidAccessException"
+            and f"Account {aws_account_number} is not subscribed to AWS Security Hub in region {region}"
+            in error_message
+        ):
+            logger.warning(
+                f"{client_error.__class__.__name__} -- [{client_error.__traceback__.tb_lineno}]: {client_error}"
+            )
+        else:
+            logger.error(
+                f"{client_error.__class__.__name__} -- [{client_error.__traceback__.tb_lineno}]: {client_error}"
+            )
     except Exception as error:
         logger.error(
-            f"{error.__class__.__name__} -- [{error.__traceback__.tb_lineno}]:{error} in region {region}"
+            f"{error.__class__.__name__} -- [{error.__traceback__.tb_lineno}]: {error}"
         )
 
     finally:
@@ -167,7 +189,7 @@ def resolve_security_hub_previous_findings(
 
 
 def __send_findings_to_security_hub__(
-    findings: [dict], region: str, security_hub_client
+    findings: list[dict], region: str, security_hub_client
 ):
     """Private function send_findings_to_security_hub chunks the findings in groups of 100 findings and send them to AWS Security Hub. It returns the number of sent findings."""
     success_count = 0
diff --git a/prowler/providers/aws/lib/service/service.py b/prowler/providers/aws/lib/service/service.py
index a3dd71f08ea..ce9c29c3a6b 100644
--- a/prowler/providers/aws/lib/service/service.py
+++ b/prowler/providers/aws/lib/service/service.py
@@ -1,13 +1,23 @@
-import threading
+from concurrent.futures import ThreadPoolExecutor, as_completed
 
+from prowler.lib.logger import logger
 from prowler.providers.aws.aws_provider_new import AwsProvider
 
+# TODO: review the following code
+# from prowler.providers.aws.aws_provider import (
+#     generate_regional_clients,
+#     get_default_region,
+# )
+
+MAX_WORKERS = 10
+
 
 class AWSService:
     """The AWSService class offers a parent class for each AWS Service to generate:
     - AWS Regional Clients
     - Shared information like the account ID and ARN, the the AWS partition and the checks audited
     - AWS Session
+    - Thread pool for the __threading_call__
     - Also handles if the AWS Service is Global
     """
 
@@ -33,6 +43,8 @@ def __init__(self, service: str, provider: AwsProvider, global_service=False):
             self.regional_clients = provider.generate_regional_clients(
                 self.service, global_service
             )
+            # TODO: review the following code
+            # self.regional_clients = generate_regional_clients(self.service, audit_info)
 
         # Get a single region and client if the service needs it (e.g. AWS Global Service)
         # We cannot include this within an else because some services needs both the regional_clients
@@ -40,14 +52,40 @@ def __init__(self, service: str, provider: AwsProvider, global_service=False):
         self.region = provider.get_default_region(self.service)
         self.client = self.session.client(self.service, self.region)
 
+        # Thread pool for __threading_call__
+        self.thread_pool = ThreadPoolExecutor(max_workers=MAX_WORKERS)
+
     def __get_session__(self):
         return self.session
 
-    def __threading_call__(self, call):
-        threads = []
-        for regional_client in self.regional_clients.values():
-            threads.append(threading.Thread(target=call, args=(regional_client,)))
-        for t in threads:
-            t.start()
-        for t in threads:
-            t.join()
+    def __threading_call__(self, call, iterator=None):
+        # Use the provided iterator, or default to self.regional_clients
+        items = iterator if iterator is not None else self.regional_clients.values()
+        # Determine the total count for logging
+        item_count = len(items)
+
+        # Trim leading and trailing underscores from the call's name
+        call_name = call.__name__.strip("_")
+        # Add Capitalization
+        call_name = " ".join([x.capitalize() for x in call_name.split("_")])
+
+        # Print a message based on the call's name, and if its regional or processing a list of items
+        if iterator is None:
+            logger.info(
+                f"{self.service.upper()} - Starting threads for '{call_name}' function across {item_count} regions..."
+            )
+        else:
+            logger.info(
+                f"{self.service.upper()} - Starting threads for '{call_name}' function to process {item_count} items..."
+            )
+
+        # Submit tasks to the thread pool
+        futures = [self.thread_pool.submit(call, item) for item in items]
+
+        # Wait for all tasks to complete
+        for future in as_completed(futures):
+            try:
+                future.result()  # Raises exceptions from the thread, if any
+            except Exception:
+                # Handle exceptions if necessary
+                pass  # Replace 'pass' with any additional exception handling logic. Currently handled within the called function
diff --git a/prowler/providers/aws/services/accessanalyzer/accessanalyzer_service.py b/prowler/providers/aws/services/accessanalyzer/accessanalyzer_service.py
index 54ee4abd00c..8e5eda2bd09 100644
--- a/prowler/providers/aws/services/accessanalyzer/accessanalyzer_service.py
+++ b/prowler/providers/aws/services/accessanalyzer/accessanalyzer_service.py
@@ -85,21 +85,36 @@ def __get_finding_status__(self):
                 f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
             )
 
+    # TODO: We need to include ListFindingsV2
+    # https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/accessanalyzer/client/list_findings_v2.html
     def __list_findings__(self):
         logger.info("AccessAnalyzer - Listing Findings per Analyzer...")
         try:
             for analyzer in self.analyzers:
-                if analyzer.status == "ACTIVE":
-                    regional_client = self.regional_clients[analyzer.region]
-                    list_findings_paginator = regional_client.get_paginator(
-                        "list_findings"
+                try:
+                    if analyzer.status == "ACTIVE":
+                        regional_client = self.regional_clients[analyzer.region]
+                        list_findings_paginator = regional_client.get_paginator(
+                            "list_findings"
+                        )
+                        for page in list_findings_paginator.paginate(
+                            analyzerArn=analyzer.arn
+                        ):
+                            for finding in page["findings"]:
+                                analyzer.findings.append(Finding(id=finding["id"]))
+                except ClientError as error:
+                    if error.response["Error"]["Code"] == "ValidationException":
+                        logger.warning(
+                            f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                        )
+                    else:
+                        logger.error(
+                            f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                        )
+                except Exception as error:
+                    logger.error(
+                        f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
                     )
-                    for page in list_findings_paginator.paginate(
-                        analyzerArn=analyzer.arn
-                    ):
-                        for finding in page["findings"]:
-                            analyzer.findings.append(Finding(id=finding["id"]))
-
         except Exception as error:
             logger.error(
                 f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
diff --git a/prowler/providers/aws/services/acm/acm_certificates_expiration_check/acm_certificates_expiration_check.py b/prowler/providers/aws/services/acm/acm_certificates_expiration_check/acm_certificates_expiration_check.py
index f8af3ead0e2..0557c51317a 100644
--- a/prowler/providers/aws/services/acm/acm_certificates_expiration_check/acm_certificates_expiration_check.py
+++ b/prowler/providers/aws/services/acm/acm_certificates_expiration_check/acm_certificates_expiration_check.py
@@ -19,7 +19,11 @@ def execute(self):
                 report.resource_tags = certificate.tags
             else:
                 report.status = "FAIL"
-                report.status_extended = f"ACM Certificate {certificate.id} for {certificate.name} is about to expire in {DAYS_TO_EXPIRE_THRESHOLD} days."
+                if certificate.expiration_days < 0:
+                    report.status_extended = f"ACM Certificate {certificate.id} for {certificate.name} has expired ({abs(certificate.expiration_days)} days ago)."
+                else:
+                    report.status_extended = f"ACM Certificate {certificate.id} for {certificate.name} is about to expire in {certificate.expiration_days} days."
+
                 report.resource_id = certificate.id
                 report.resource_details = certificate.name
                 report.resource_arn = certificate.arn
diff --git a/prowler/providers/aws/services/apigateway/apigateway_restapi_authorizers_enabled/apigateway_restapi_authorizers_enabled.metadata.json b/prowler/providers/aws/services/apigateway/apigateway_restapi_authorizers_enabled/apigateway_restapi_authorizers_enabled.metadata.json
index 1d8b25f2bfb..ea7cd2aec92 100644
--- a/prowler/providers/aws/services/apigateway/apigateway_restapi_authorizers_enabled/apigateway_restapi_authorizers_enabled.metadata.json
+++ b/prowler/providers/aws/services/apigateway/apigateway_restapi_authorizers_enabled/apigateway_restapi_authorizers_enabled.metadata.json
@@ -1,7 +1,7 @@
 {
   "Provider": "aws",
   "CheckID": "apigateway_restapi_authorizers_enabled",
-  "CheckTitle": "Check if API Gateway has configured authorizers.",
+  "CheckTitle": "Check if API Gateway has configured authorizers at api or method level.",
   "CheckAliases": [
     "apigateway_authorizers_enabled"
   ],
@@ -13,7 +13,7 @@
   "ResourceIdTemplate": "arn:partition:service:region:account-id:resource-id",
   "Severity": "medium",
   "ResourceType": "AwsApiGatewayRestApi",
-  "Description": "Check if API Gateway has configured authorizers.",
+  "Description": "Check if API Gateway has configured authorizers at api or method level.",
   "Risk": "If no authorizer is enabled anyone can use the service.",
   "RelatedUrl": "",
   "Remediation": {
diff --git a/prowler/providers/aws/services/apigateway/apigateway_restapi_authorizers_enabled/apigateway_restapi_authorizers_enabled.py b/prowler/providers/aws/services/apigateway/apigateway_restapi_authorizers_enabled/apigateway_restapi_authorizers_enabled.py
index ec154555427..70cabcd31c6 100644
--- a/prowler/providers/aws/services/apigateway/apigateway_restapi_authorizers_enabled/apigateway_restapi_authorizers_enabled.py
+++ b/prowler/providers/aws/services/apigateway/apigateway_restapi_authorizers_enabled/apigateway_restapi_authorizers_enabled.py
@@ -13,12 +13,41 @@ def execute(self):
             report.resource_id = rest_api.name
             report.resource_arn = rest_api.arn
             report.resource_tags = rest_api.tags
+            # it there are not authorizers at api level and resources without methods (default case) ->
+            report.status = "FAIL"
+            report.status_extended = f"API Gateway {rest_api.name} ID {rest_api.id} does not have an authorizer configured at api level."
             if rest_api.authorizer:
                 report.status = "PASS"
-                report.status_extended = f"API Gateway {rest_api.name} ID {rest_api.id} has an authorizer configured."
+                report.status_extended = f"API Gateway {rest_api.name} ID {rest_api.id} has an authorizer configured at api level"
             else:
-                report.status = "FAIL"
-                report.status_extended = f"API Gateway {rest_api.name} ID {rest_api.id} does not have an authorizer configured."
+                # we want to know if api has not authorizers and all the resources don't have methods configured
+                resources_have_methods = False
+                all_methods_authorized = True
+                resource_paths_with_unathorized_methods = []
+                for resource in rest_api.resources:
+                    # if the resource has methods test if they have all configured authorizer
+                    if resource.resource_methods:
+                        resources_have_methods = True
+                        for (
+                            http_method,
+                            authorization_method,
+                        ) in resource.resource_methods.items():
+                            if authorization_method == "NONE":
+                                all_methods_authorized = False
+                                unauthorized_method = (
+                                    f"{resource.path} -> {http_method}"
+                                )
+                                resource_paths_with_unathorized_methods.append(
+                                    unauthorized_method
+                                )
+                # if there are methods in at least one resource and are all authorized
+                if all_methods_authorized and resources_have_methods:
+                    report.status = "PASS"
+                    report.status_extended = f"API Gateway {rest_api.name} ID {rest_api.id} has all methods authorized"
+                # if there are methods in at least one result but some of then are not authorized-> list it
+                elif not all_methods_authorized:
+                    report.status_extended = f"API Gateway {rest_api.name} ID {rest_api.id} does not have authorizers at api level and the following paths and methods are unauthorized: {'; '.join(resource_paths_with_unathorized_methods)}."
+
             findings.append(report)
 
         return findings
diff --git a/prowler/providers/aws/services/apigateway/apigateway_service.py b/prowler/providers/aws/services/apigateway/apigateway_service.py
index 73ea8cce0bf..461c88032d6 100644
--- a/prowler/providers/aws/services/apigateway/apigateway_service.py
+++ b/prowler/providers/aws/services/apigateway/apigateway_service.py
@@ -17,6 +17,7 @@ def __init__(self, provider):
         self.__get_authorizers__()
         self.__get_rest_api__()
         self.__get_stages__()
+        self.__get_resources__()
 
     def __get_rest_apis__(self, regional_client):
         logger.info("APIGateway - Getting Rest APIs...")
@@ -53,7 +54,9 @@ def __get_authorizers__(self):
                 if authorizers:
                     rest_api.authorizer = True
         except Exception as error:
-            logger.error(f"{error.__class__.__name__}: {error}")
+            logger.error(
+                f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+            )
 
     def __get_rest_api__(self):
         logger.info("APIGateway - Describing Rest API...")
@@ -64,7 +67,9 @@ def __get_rest_api__(self):
                 if rest_api_info["endpointConfiguration"]["types"] == ["PRIVATE"]:
                     rest_api.public_endpoint = False
         except Exception as error:
-            logger.error(f"{error.__class__.__name__}: {error}")
+            logger.error(
+                f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+            )
 
     def __get_stages__(self):
         logger.info("APIGateway - Getting stages for Rest APIs...")
@@ -95,7 +100,46 @@ def __get_stages__(self):
                         )
                     )
         except Exception as error:
-            logger.error(f"{error.__class__.__name__}: {error}")
+            logger.error(
+                f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+            )
+
+    def __get_resources__(self):
+        logger.info("APIGateway - Getting API resources...")
+        try:
+            for rest_api in self.rest_apis:
+                regional_client = self.regional_clients[rest_api.region]
+                get_resources_paginator = regional_client.get_paginator("get_resources")
+                for page in get_resources_paginator.paginate(restApiId=rest_api.id):
+                    for resource in page["items"]:
+                        id = resource["id"]
+                        resource_methods = []
+                        methods_auth = {}
+                        for resource_method in resource.get(
+                            "resourceMethods", {}
+                        ).keys():
+                            resource_methods.append(resource_method)
+
+                        for resource_method in resource_methods:
+                            if resource_method != "OPTIONS":
+                                method_config = regional_client.get_method(
+                                    restApiId=rest_api.id,
+                                    resourceId=id,
+                                    httpMethod=resource_method,
+                                )
+                                auth_type = method_config["authorizationType"]
+                                methods_auth.update({resource_method: auth_type})
+
+                        rest_api.resources.append(
+                            PathResourceMethods(
+                                path=resource["path"], resource_methods=methods_auth
+                            )
+                        )
+
+        except Exception as error:
+            logger.error(
+                f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+            )
 
 
 class Stage(BaseModel):
@@ -107,6 +151,11 @@ class Stage(BaseModel):
     tags: Optional[list] = []
 
 
+class PathResourceMethods(BaseModel):
+    path: str
+    resource_methods: dict
+
+
 class RestAPI(BaseModel):
     id: str
     arn: str
@@ -116,3 +165,4 @@ class RestAPI(BaseModel):
     public_endpoint: bool = True
     stages: list[Stage] = []
     tags: Optional[list] = []
+    resources: list[PathResourceMethods] = []
diff --git a/prowler/providers/aws/services/apigatewayv2/apigatewayv2_api_access_logging_enabled/apigatewayv2_api_access_logging_enabled.py b/prowler/providers/aws/services/apigatewayv2/apigatewayv2_api_access_logging_enabled/apigatewayv2_api_access_logging_enabled.py
index 3a3c6f5681c..6ca506f07c1 100644
--- a/prowler/providers/aws/services/apigatewayv2/apigatewayv2_api_access_logging_enabled/apigatewayv2_api_access_logging_enabled.py
+++ b/prowler/providers/aws/services/apigatewayv2/apigatewayv2_api_access_logging_enabled/apigatewayv2_api_access_logging_enabled.py
@@ -14,13 +14,13 @@ def execute(self):
                 if stage.logging:
                     report.status = "PASS"
                     report.status_extended = f"API Gateway V2 {api.name} ID {api.id} in stage {stage.name} has access logging enabled."
-                    report.resource_id = api.name
+                    report.resource_id = f"{api.name}-{stage.name}"
                     report.resource_arn = api.arn
                     report.resource_tags = api.tags
                 else:
                     report.status = "FAIL"
                     report.status_extended = f"API Gateway V2 {api.name} ID {api.id} in stage {stage.name} has access logging disabled."
-                    report.resource_id = api.name
+                    report.resource_id = f"{api.name}-{stage.name}"
                     report.resource_arn = api.arn
                     report.resource_tags = api.tags
                 findings.append(report)
diff --git a/prowler/providers/aws/services/athena/athena_service.py b/prowler/providers/aws/services/athena/athena_service.py
index fa0a946bc63..67778910f35 100644
--- a/prowler/providers/aws/services/athena/athena_service.py
+++ b/prowler/providers/aws/services/athena/athena_service.py
@@ -54,10 +54,8 @@ def __get_workgroups__(self):
                     )
 
                     wg_configuration = wg.get("WorkGroup").get("Configuration")
-                    self.workgroups[
-                        workgroup.arn
-                    ].enforce_workgroup_configuration = wg_configuration.get(
-                        "EnforceWorkGroupConfiguration", False
+                    self.workgroups[workgroup.arn].enforce_workgroup_configuration = (
+                        wg_configuration.get("EnforceWorkGroupConfiguration", False)
                     )
 
                     # We include an empty EncryptionConfiguration to handle if the workgroup does not have encryption configured
@@ -77,9 +75,9 @@ def __get_workgroups__(self):
                         encryption_configuration = EncryptionConfiguration(
                             encryption_option=encryption, encrypted=True
                         )
-                        self.workgroups[
-                            workgroup.arn
-                        ].encryption_configuration = encryption_configuration
+                        self.workgroups[workgroup.arn].encryption_configuration = (
+                            encryption_configuration
+                        )
                 except Exception as error:
                     logger.error(
                         f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
diff --git a/prowler/providers/aws/services/awslambda/awslambda_function_no_secrets_in_code/awslambda_function_no_secrets_in_code.py b/prowler/providers/aws/services/awslambda/awslambda_function_no_secrets_in_code/awslambda_function_no_secrets_in_code.py
index b90ba4e5e3f..cc3d1075250 100644
--- a/prowler/providers/aws/services/awslambda/awslambda_function_no_secrets_in_code/awslambda_function_no_secrets_in_code.py
+++ b/prowler/providers/aws/services/awslambda/awslambda_function_no_secrets_in_code/awslambda_function_no_secrets_in_code.py
@@ -11,57 +11,55 @@
 class awslambda_function_no_secrets_in_code(Check):
     def execute(self):
         findings = []
-        for function in awslambda_client.functions.values():
-            if function.code:
-                report = Check_Report_AWS(self.metadata())
-                report.region = function.region
-                report.resource_id = function.name
-                report.resource_arn = function.arn
-                report.resource_tags = function.tags
+        if awslambda_client.functions:
+            for function, function_code in awslambda_client.__get_function_code__():
+                if function_code:
+                    report = Check_Report_AWS(self.metadata())
+                    report.region = function.region
+                    report.resource_id = function.name
+                    report.resource_arn = function.arn
+                    report.resource_tags = function.tags
 
-                report.status = "PASS"
-                report.status_extended = (
-                    f"No secrets found in Lambda function {function.name} code."
-                )
-                with tempfile.TemporaryDirectory() as tmp_dir_name:
-                    function.code.code_zip.extractall(tmp_dir_name)
-                    # List all files
-                    files_in_zip = next(os.walk(tmp_dir_name))[2]
-                    secrets_findings = []
-                    for file in files_in_zip:
-                        secrets = SecretsCollection()
-                        with default_settings():
-                            secrets.scan_file(f"{tmp_dir_name}/{file}")
-                        detect_secrets_output = secrets.json()
-                        if detect_secrets_output:
-                            for (
-                                file_name
-                            ) in (
-                                detect_secrets_output.keys()
-                            ):  # Appears that only 1 file is being scanned at a time, so could rework this
-                                output_file_name = file_name.replace(
-                                    f"{tmp_dir_name}/", ""
-                                )
-                                secrets_string = ", ".join(
-                                    [
-                                        f"{secret['type']} on line {secret['line_number']}"
-                                        for secret in detect_secrets_output[file_name]
-                                    ]
-                                )
-                                secrets_findings.append(
-                                    f"{output_file_name}: {secrets_string}"
-                                )
+                    report.status = "PASS"
+                    report.status_extended = (
+                        f"No secrets found in Lambda function {function.name} code."
+                    )
+                    with tempfile.TemporaryDirectory() as tmp_dir_name:
+                        function_code.code_zip.extractall(tmp_dir_name)
+                        # List all files
+                        files_in_zip = next(os.walk(tmp_dir_name))[2]
+                        secrets_findings = []
+                        for file in files_in_zip:
+                            secrets = SecretsCollection()
+                            with default_settings():
+                                secrets.scan_file(f"{tmp_dir_name}/{file}")
+                            detect_secrets_output = secrets.json()
+                            if detect_secrets_output:
+                                for (
+                                    file_name
+                                ) in (
+                                    detect_secrets_output.keys()
+                                ):  # Appears that only 1 file is being scanned at a time, so could rework this
+                                    output_file_name = file_name.replace(
+                                        f"{tmp_dir_name}/", ""
+                                    )
+                                    secrets_string = ", ".join(
+                                        [
+                                            f"{secret['type']} on line {secret['line_number']}"
+                                            for secret in detect_secrets_output[
+                                                file_name
+                                            ]
+                                        ]
+                                    )
+                                    secrets_findings.append(
+                                        f"{output_file_name}: {secrets_string}"
+                                    )
 
-                    if secrets_findings:
-                        final_output_string = "; ".join(secrets_findings)
-                        report.status = "FAIL"
-                        # report.status_extended = f"Potential {'secrets' if len(secrets_findings)>1 else 'secret'} found in Lambda function {function.name} code. {final_output_string}."
-                        if len(secrets_findings) > 1:
-                            report.status_extended = f"Potential secrets found in Lambda function {function.name} code -> {final_output_string}."
-                        else:
-                            report.status_extended = f"Potential secret found in Lambda function {function.name} code -> {final_output_string}."
-                        # break // Don't break as there may be additional findings
+                        if secrets_findings:
+                            final_output_string = "; ".join(secrets_findings)
+                            report.status = "FAIL"
+                            report.status_extended = f"Potential {'secrets' if len(secrets_findings) > 1 else 'secret'} found in Lambda function {function.name} code -> {final_output_string}."
 
-                findings.append(report)
+                    findings.append(report)
 
         return findings
diff --git a/prowler/providers/aws/services/awslambda/awslambda_function_no_secrets_in_variables/awslambda_function_no_secrets_in_variables.py b/prowler/providers/aws/services/awslambda/awslambda_function_no_secrets_in_variables/awslambda_function_no_secrets_in_variables.py
index 469fcfdd986..a791e46b13b 100644
--- a/prowler/providers/aws/services/awslambda/awslambda_function_no_secrets_in_variables/awslambda_function_no_secrets_in_variables.py
+++ b/prowler/providers/aws/services/awslambda/awslambda_function_no_secrets_in_variables/awslambda_function_no_secrets_in_variables.py
@@ -42,7 +42,7 @@ def execute(self):
                     environment_variable_names = list(function.environment.keys())
                     secrets_string = ", ".join(
                         [
-                            f"{secret['type']} in variable {environment_variable_names[int(secret['line_number'])-2]}"
+                            f"{secret['type']} in variable {environment_variable_names[int(secret['line_number']) - 2]}"
                             for secret in detect_secrets_output[temp_env_data_file.name]
                         ]
                     )
diff --git a/prowler/providers/aws/services/awslambda/awslambda_service.py b/prowler/providers/aws/services/awslambda/awslambda_service.py
index 78faad6066d..82f335227eb 100644
--- a/prowler/providers/aws/services/awslambda/awslambda_service.py
+++ b/prowler/providers/aws/services/awslambda/awslambda_service.py
@@ -1,6 +1,7 @@
 import io
 import json
 import zipfile
+from concurrent.futures import as_completed
 from enum import Enum
 from typing import Any, Optional
 
@@ -21,15 +22,6 @@ def __init__(self, provider):
         self.functions = {}
         self.__threading_call__(self.__list_functions__)
         self.__list_tags_for_resource__()
-
-        # We only want to retrieve the Lambda code if the
-        # awslambda_function_no_secrets_in_code check is set
-        if (
-            "awslambda_function_no_secrets_in_code"
-            in provider.audit_metadata.expected_checks
-        ):
-            self.__threading_call__(self.__get_function__)
-
         self.__threading_call__(self.__get_policy__)
         self.__threading_call__(self.__get_function_url_config__)
 
@@ -70,28 +62,45 @@ def __list_functions__(self, regional_client):
                 f" {error}"
             )
 
-    def __get_function__(self, regional_client):
-        logger.info("Lambda - Getting Function...")
+    def __get_function_code__(self):
+        logger.info("Lambda - Getting Function Code...")
+        # Use a thread pool handle the queueing and execution of the __fetch_function_code__ tasks, up to max_workers tasks concurrently.
+        lambda_functions_to_fetch = {
+            self.thread_pool.submit(
+                self.__fetch_function_code__, function.name, function.region
+            ): function
+            for function in self.functions.values()
+        }
+
+        for fetched_lambda_code in as_completed(lambda_functions_to_fetch):
+            function = lambda_functions_to_fetch[fetched_lambda_code]
+            try:
+                function_code = fetched_lambda_code.result()
+                if function_code:
+                    yield function, function_code
+            except Exception as error:
+                logger.error(
+                    f"{function.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
+
+    def __fetch_function_code__(self, function_name, function_region):
         try:
-            for function in self.functions.values():
-                if function.region == regional_client.region:
-                    function_information = regional_client.get_function(
-                        FunctionName=function.name
-                    )
-                    if "Location" in function_information["Code"]:
-                        code_location_uri = function_information["Code"]["Location"]
-                        raw_code_zip = requests.get(code_location_uri).content
-                        self.functions[function.arn].code = LambdaCode(
-                            location=code_location_uri,
-                            code_zip=zipfile.ZipFile(io.BytesIO(raw_code_zip)),
-                        )
-
+            regional_client = self.regional_clients[function_region]
+            function_information = regional_client.get_function(
+                FunctionName=function_name
+            )
+            if "Location" in function_information["Code"]:
+                code_location_uri = function_information["Code"]["Location"]
+                raw_code_zip = requests.get(code_location_uri).content
+                return LambdaCode(
+                    location=code_location_uri,
+                    code_zip=zipfile.ZipFile(io.BytesIO(raw_code_zip)),
+                )
         except Exception as error:
             logger.error(
-                f"{regional_client.region} --"
-                f" {error.__class__.__name__}[{error.__traceback__.tb_lineno}]:"
-                f" {error}"
+                f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
             )
+            raise
 
     def __get_policy__(self, regional_client):
         logger.info("Lambda - Getting Policy...")
diff --git a/prowler/providers/aws/services/backup/backup_service.py b/prowler/providers/aws/services/backup/backup_service.py
index fec72fc3ca2..fd77ab63977 100644
--- a/prowler/providers/aws/services/backup/backup_service.py
+++ b/prowler/providers/aws/services/backup/backup_service.py
@@ -152,5 +152,5 @@ class BackupReportPlan(BaseModel):
     arn: str
     region: str
     name: str
-    last_attempted_execution_date: datetime
+    last_attempted_execution_date: Optional[datetime]
     last_successful_execution_date: Optional[datetime]
diff --git a/prowler/providers/aws/services/cloudfront/cloudfront_service.py b/prowler/providers/aws/services/cloudfront/cloudfront_service.py
index 05e60138d83..24851345362 100644
--- a/prowler/providers/aws/services/cloudfront/cloudfront_service.py
+++ b/prowler/providers/aws/services/cloudfront/cloudfront_service.py
@@ -53,12 +53,12 @@ def __get_distribution_config__(self, client, distributions, region) -> dict:
                 distributions[distribution_id].logging_enabled = distribution_config[
                     "DistributionConfig"
                 ]["Logging"]["Enabled"]
-                distributions[
-                    distribution_id
-                ].geo_restriction_type = GeoRestrictionType(
-                    distribution_config["DistributionConfig"]["Restrictions"][
-                        "GeoRestriction"
-                    ]["RestrictionType"]
+                distributions[distribution_id].geo_restriction_type = (
+                    GeoRestrictionType(
+                        distribution_config["DistributionConfig"]["Restrictions"][
+                            "GeoRestriction"
+                        ]["RestrictionType"]
+                    )
                 )
                 distributions[distribution_id].web_acl_id = distribution_config[
                     "DistributionConfig"
@@ -78,9 +78,9 @@ def __get_distribution_config__(self, client, distributions, region) -> dict:
                         "DefaultCacheBehavior"
                     ].get("FieldLevelEncryptionId"),
                 )
-                distributions[
-                    distribution_id
-                ].default_cache_config = default_cache_config
+                distributions[distribution_id].default_cache_config = (
+                    default_cache_config
+                )
 
         except Exception as error:
             logger.error(
diff --git a/prowler/providers/aws/services/cloudtrail/cloudtrail_service.py b/prowler/providers/aws/services/cloudtrail/cloudtrail_service.py
index 06de17737bc..48116bc1532 100644
--- a/prowler/providers/aws/services/cloudtrail/cloudtrail_service.py
+++ b/prowler/providers/aws/services/cloudtrail/cloudtrail_service.py
@@ -140,7 +140,16 @@ def __get_insight_selectors__(self):
                                 error.response["Error"]["Code"]
                                 == "InsightNotEnabledException"
                             ):
-                                continue
+                                logger.warning(
+                                    f"{client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                                )
+                            elif (
+                                error.response["Error"]["Code"]
+                                == "UnsupportedOperationException"
+                            ):
+                                logger.warning(
+                                    f"{client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                                )
                             else:
                                 logger.error(
                                     f"{client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
diff --git a/prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_acls_alarm_configured/cloudwatch_changes_to_network_acls_alarm_configured.py b/prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_acls_alarm_configured/cloudwatch_changes_to_network_acls_alarm_configured.py
index ae4f0f37918..6bf9e6f36c0 100644
--- a/prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_acls_alarm_configured/cloudwatch_changes_to_network_acls_alarm_configured.py
+++ b/prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_acls_alarm_configured/cloudwatch_changes_to_network_acls_alarm_configured.py
@@ -1,5 +1,3 @@
-import re
-
 from prowler.lib.check.models import Check, Check_Report_AWS
 from prowler.providers.aws.services.cloudtrail.cloudtrail_client import (
     cloudtrail_client,
@@ -7,6 +5,9 @@
 from prowler.providers.aws.services.cloudwatch.cloudwatch_client import (
     cloudwatch_client,
 )
+from prowler.providers.aws.services.cloudwatch.lib.metric_filters import (
+    check_cloudwatch_log_metric_filter,
+)
 from prowler.providers.aws.services.cloudwatch.logs_client import logs_client
 
 
@@ -22,26 +23,13 @@ def execute(self):
         report.region = cloudwatch_client.region
         report.resource_id = cloudtrail_client.audited_account
         report.resource_arn = cloudtrail_client.audited_account_arn
-        # 1. Iterate for CloudWatch Log Group in CloudTrail trails
-        log_groups = []
-        for trail in cloudtrail_client.trails:
-            if trail.log_group_arn:
-                log_groups.append(trail.log_group_arn.split(":")[6])
-        # 2. Describe metric filters for previous log groups
-        for metric_filter in logs_client.metric_filters:
-            if metric_filter.log_group in log_groups:
-                if re.search(pattern, metric_filter.pattern, flags=re.DOTALL):
-                    report.resource_id = metric_filter.log_group
-                    report.resource_arn = metric_filter.arn
-                    report.region = metric_filter.region
-                    report.status = "FAIL"
-                    report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} but no alarms associated."
-                    # 3. Check if there is an alarm for the metric
-                    for alarm in cloudwatch_client.metric_alarms:
-                        if alarm.metric == metric_filter.metric:
-                            report.status = "PASS"
-                            report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} and alarms set."
-                            break
+        report = check_cloudwatch_log_metric_filter(
+            pattern,
+            cloudtrail_client.trails,
+            logs_client.metric_filters,
+            cloudwatch_client.metric_alarms,
+            report,
+        )
 
         findings.append(report)
         return findings
diff --git a/prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_gateways_alarm_configured/cloudwatch_changes_to_network_gateways_alarm_configured.py b/prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_gateways_alarm_configured/cloudwatch_changes_to_network_gateways_alarm_configured.py
index c24461253d8..2ad693d112a 100644
--- a/prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_gateways_alarm_configured/cloudwatch_changes_to_network_gateways_alarm_configured.py
+++ b/prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_gateways_alarm_configured/cloudwatch_changes_to_network_gateways_alarm_configured.py
@@ -1,5 +1,3 @@
-import re
-
 from prowler.lib.check.models import Check, Check_Report_AWS
 from prowler.providers.aws.services.cloudtrail.cloudtrail_client import (
     cloudtrail_client,
@@ -7,6 +5,9 @@
 from prowler.providers.aws.services.cloudwatch.cloudwatch_client import (
     cloudwatch_client,
 )
+from prowler.providers.aws.services.cloudwatch.lib.metric_filters import (
+    check_cloudwatch_log_metric_filter,
+)
 from prowler.providers.aws.services.cloudwatch.logs_client import logs_client
 
 
@@ -22,26 +23,13 @@ def execute(self):
         report.region = cloudwatch_client.region
         report.resource_id = cloudtrail_client.audited_account
         report.resource_arn = cloudtrail_client.audited_account_arn
-        # 1. Iterate for CloudWatch Log Group in CloudTrail trails
-        log_groups = []
-        for trail in cloudtrail_client.trails:
-            if trail.log_group_arn:
-                log_groups.append(trail.log_group_arn.split(":")[6])
-        # 2. Describe metric filters for previous log groups
-        for metric_filter in logs_client.metric_filters:
-            if metric_filter.log_group in log_groups:
-                if re.search(pattern, metric_filter.pattern, flags=re.DOTALL):
-                    report.resource_id = metric_filter.log_group
-                    report.resource_arn = metric_filter.arn
-                    report.region = metric_filter.region
-                    report.status = "FAIL"
-                    report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} but no alarms associated."
-                    # 3. Check if there is an alarm for the metric
-                    for alarm in cloudwatch_client.metric_alarms:
-                        if alarm.metric == metric_filter.metric:
-                            report.status = "PASS"
-                            report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} and alarms set."
-                            break
+        report = check_cloudwatch_log_metric_filter(
+            pattern,
+            cloudtrail_client.trails,
+            logs_client.metric_filters,
+            cloudwatch_client.metric_alarms,
+            report,
+        )
 
         findings.append(report)
         return findings
diff --git a/prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_route_tables_alarm_configured/cloudwatch_changes_to_network_route_tables_alarm_configured.metadata.json b/prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_route_tables_alarm_configured/cloudwatch_changes_to_network_route_tables_alarm_configured.metadata.json
index ff9e50e60e9..4b3f3cad316 100644
--- a/prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_route_tables_alarm_configured/cloudwatch_changes_to_network_route_tables_alarm_configured.metadata.json
+++ b/prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_route_tables_alarm_configured/cloudwatch_changes_to_network_route_tables_alarm_configured.metadata.json
@@ -1,7 +1,7 @@
 {
   "Provider": "aws",
   "CheckID": "cloudwatch_changes_to_network_route_tables_alarm_configured",
-  "CheckTitle": "Ensure a log metric filter and alarm exist for route table changes.",
+  "CheckTitle": "Ensure route table changes are monitored",
   "CheckType": [
     "Software and Configuration Checks/Industry and Regulatory Standards/CIS AWS Foundations Benchmark"
   ],
@@ -10,8 +10,8 @@
   "ResourceIdTemplate": "arn:partition:cloudwatch:region:account-id:certificate/resource-id",
   "Severity": "medium",
   "ResourceType": "AwsCloudTrailTrail",
-  "Description": "Ensure a log metric filter and alarm exist for route table changes.",
-  "Risk": "Monitoring unauthorized API calls will help reveal application errors and may reduce time to detect malicious activity.",
+  "Description": "Real-time monitoring of API calls can be achieved by directing Cloud Trail Logs to CloudWatch Logs, or an external Security information and event management (SIEM)environment, and establishing corresponding metric filters and alarms. Routing tablesare used to route network traffic between subnets and to network gateways. It isrecommended that a metric filter and alarm be established for changes to route tables.",
+  "Risk": "CloudWatch is an AWS native service that allows you to ob serve and monitor resources and applications. CloudTrail Logs can also be sent to an external Security informationand event management (SIEM) environment for monitoring and alerting.Monitoring changes to route tables will help ensure that all VPC traffic flows through anexpected path and prevent any accidental or intentional modifications that may lead touncontrolled network traffic. An alarm should be triggered every time an AWS API call isperformed to create, replace, delete, or disassociate a Route Table.",
   "RelatedUrl": "https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudwatch-alarms-for-cloudtrail.html",
   "Remediation": {
     "Code": {
@@ -21,12 +21,12 @@
       "Terraform": "https://docs.bridgecrew.io/docs/monitoring_13#fix---buildtime"
     },
     "Recommendation": {
-      "Text": "It is recommended that a metric filter and alarm be established for unauthorized requests.",
+      "Text": "If you are using CloudTrails and CloudWatch, perform the following to setup the metric filter, alarm, SNS topic, and subscription: 1. Create a metric filter based on filter pattern provided which checks for route table changes and the  taken from audit step 1. aws logs put-metric-filter --log-group-name  -- filter-name `` --metric-transformations metricName= `` ,metricNamespace='CISBenchmark',metricValue=1 --filter-pattern '{ ($.eventName = CreateRoute) || ($.eventName = CreateRouteTable) || ($.eventName = ReplaceRoute) || ($.eventName = ReplaceRouteTableAssociation) || ($.eventName = DeleteRouteTable) || ($.eventName = DeleteRoute) || ($.eventName = DisassociateRouteTable) }' Note: You can choose your own metricName and metricNamespace strings. Using the same metricNamespace for all Foundations Benchmark metrics will group them together. 2. Create an SNS topic that the alarm will notify aws sns create-topic --name  Note: you can execute this command once and then re-use the same topic for all monitoring alarms. 3. Create an SNS subscription to the topic created in step 2 aws sns subscribe --topic-arn  --protocol  - -notification-endpoint  Note: you can execute this command once and then re-use the SNS subscription for all monitoring alarms. 4. Create an alarm that is associated with the CloudWatch Logs Metric Filter created in step 1 and an SNS topic created in step 2 aws cloudwatch put-metric-alarm --alarm-name `` --metric-name `` --statistic Sum --period 300 - -threshold 1 --comparison-operator GreaterThanOrEqualToThreshold -- evaluation-periods 1 --namespace 'CISBenchmark' --alarm-actions ",
       "Url": "https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudwatch-alarms-for-cloudtrail.html"
     }
   },
   "Categories": [],
   "DependsOn": [],
   "RelatedTo": [],
-  "Notes": "Logging and Monitoring"
+  "Notes": ""
 }
diff --git a/prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_route_tables_alarm_configured/cloudwatch_changes_to_network_route_tables_alarm_configured.py b/prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_route_tables_alarm_configured/cloudwatch_changes_to_network_route_tables_alarm_configured.py
index 6d8655d4ed2..c220af9ef3f 100644
--- a/prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_route_tables_alarm_configured/cloudwatch_changes_to_network_route_tables_alarm_configured.py
+++ b/prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_route_tables_alarm_configured/cloudwatch_changes_to_network_route_tables_alarm_configured.py
@@ -1,5 +1,3 @@
-import re
-
 from prowler.lib.check.models import Check, Check_Report_AWS
 from prowler.providers.aws.services.cloudtrail.cloudtrail_client import (
     cloudtrail_client,
@@ -7,12 +5,15 @@
 from prowler.providers.aws.services.cloudwatch.cloudwatch_client import (
     cloudwatch_client,
 )
+from prowler.providers.aws.services.cloudwatch.lib.metric_filters import (
+    check_cloudwatch_log_metric_filter,
+)
 from prowler.providers.aws.services.cloudwatch.logs_client import logs_client
 
 
 class cloudwatch_changes_to_network_route_tables_alarm_configured(Check):
     def execute(self):
-        pattern = r"\$\.eventName\s*=\s*.?CreateRoute.+\$\.eventName\s*=\s*.?CreateRouteTable.+\$\.eventName\s*=\s*.?ReplaceRoute.+\$\.eventName\s*=\s*.?ReplaceRouteTableAssociation.+\$\.eventName\s*=\s*.?DeleteRouteTable.+\$\.eventName\s*=\s*.?DeleteRoute.+\$\.eventName\s*=\s*.?DisassociateRouteTable.?"
+        pattern = r"\$\.eventSource\s*=\s*.?ec2.amazonaws.com.+\$\.eventName\s*=\s*.?CreateRoute.+\$\.eventName\s*=\s*.?CreateRouteTable.+\$\.eventName\s*=\s*.?ReplaceRoute.+\$\.eventName\s*=\s*.?ReplaceRouteTableAssociation.+\$\.eventName\s*=\s*.?DeleteRouteTable.+\$\.eventName\s*=\s*.?DeleteRoute.+\$\.eventName\s*=\s*.?DisassociateRouteTable.?"
         findings = []
         report = Check_Report_AWS(self.metadata())
         report.status = "FAIL"
@@ -22,26 +23,13 @@ def execute(self):
         report.region = cloudwatch_client.region
         report.resource_id = cloudtrail_client.audited_account
         report.resource_arn = cloudtrail_client.audited_account_arn
-        # 1. Iterate for CloudWatch Log Group in CloudTrail trails
-        log_groups = []
-        for trail in cloudtrail_client.trails:
-            if trail.log_group_arn:
-                log_groups.append(trail.log_group_arn.split(":")[6])
-        # 2. Describe metric filters for previous log groups
-        for metric_filter in logs_client.metric_filters:
-            if metric_filter.log_group in log_groups:
-                if re.search(pattern, metric_filter.pattern, flags=re.DOTALL):
-                    report.resource_id = metric_filter.log_group
-                    report.resource_arn = metric_filter.arn
-                    report.region = metric_filter.region
-                    report.status = "FAIL"
-                    report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} but no alarms associated."
-                    # 3. Check if there is an alarm for the metric
-                    for alarm in cloudwatch_client.metric_alarms:
-                        if alarm.metric == metric_filter.metric:
-                            report.status = "PASS"
-                            report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} and alarms set."
-                            break
+        report = check_cloudwatch_log_metric_filter(
+            pattern,
+            cloudtrail_client.trails,
+            logs_client.metric_filters,
+            cloudwatch_client.metric_alarms,
+            report,
+        )
 
         findings.append(report)
         return findings
diff --git a/prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_vpcs_alarm_configured/cloudwatch_changes_to_vpcs_alarm_configured.py b/prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_vpcs_alarm_configured/cloudwatch_changes_to_vpcs_alarm_configured.py
index e95dacf16d5..41b20039222 100644
--- a/prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_vpcs_alarm_configured/cloudwatch_changes_to_vpcs_alarm_configured.py
+++ b/prowler/providers/aws/services/cloudwatch/cloudwatch_changes_to_vpcs_alarm_configured/cloudwatch_changes_to_vpcs_alarm_configured.py
@@ -1,5 +1,3 @@
-import re
-
 from prowler.lib.check.models import Check, Check_Report_AWS
 from prowler.providers.aws.services.cloudtrail.cloudtrail_client import (
     cloudtrail_client,
@@ -7,6 +5,9 @@
 from prowler.providers.aws.services.cloudwatch.cloudwatch_client import (
     cloudwatch_client,
 )
+from prowler.providers.aws.services.cloudwatch.lib.metric_filters import (
+    check_cloudwatch_log_metric_filter,
+)
 from prowler.providers.aws.services.cloudwatch.logs_client import logs_client
 
 
@@ -22,26 +23,13 @@ def execute(self):
         report.region = cloudwatch_client.region
         report.resource_id = cloudtrail_client.audited_account
         report.resource_arn = cloudtrail_client.audited_account_arn
-        # 1. Iterate for CloudWatch Log Group in CloudTrail trails
-        log_groups = []
-        for trail in cloudtrail_client.trails:
-            if trail.log_group_arn:
-                log_groups.append(trail.log_group_arn.split(":")[6])
-        # 2. Describe metric filters for previous log groups
-        for metric_filter in logs_client.metric_filters:
-            if metric_filter.log_group in log_groups:
-                if re.search(pattern, metric_filter.pattern, flags=re.DOTALL):
-                    report.resource_id = metric_filter.log_group
-                    report.resource_arn = metric_filter.arn
-                    report.region = metric_filter.region
-                    report.status = "FAIL"
-                    report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} but no alarms associated."
-                    # 3. Check if there is an alarm for the metric
-                    for alarm in cloudwatch_client.metric_alarms:
-                        if alarm.metric == metric_filter.metric:
-                            report.status = "PASS"
-                            report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} and alarms set."
-                            break
+        report = check_cloudwatch_log_metric_filter(
+            pattern,
+            cloudtrail_client.trails,
+            logs_client.metric_filters,
+            cloudwatch_client.metric_alarms,
+            report,
+        )
 
         findings.append(report)
         return findings
diff --git a/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled/cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled.py b/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled/cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled.py
index e43e786558f..57791fd8c76 100644
--- a/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled/cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled.py
+++ b/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled/cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled.py
@@ -1,5 +1,3 @@
-import re
-
 from prowler.lib.check.models import Check, Check_Report_AWS
 from prowler.providers.aws.services.cloudtrail.cloudtrail_client import (
     cloudtrail_client,
@@ -7,6 +5,9 @@
 from prowler.providers.aws.services.cloudwatch.cloudwatch_client import (
     cloudwatch_client,
 )
+from prowler.providers.aws.services.cloudwatch.lib.metric_filters import (
+    check_cloudwatch_log_metric_filter,
+)
 from prowler.providers.aws.services.cloudwatch.logs_client import logs_client
 
 
@@ -24,26 +25,13 @@ def execute(self):
         report.region = cloudwatch_client.region
         report.resource_id = cloudtrail_client.audited_account
         report.resource_arn = cloudtrail_client.audited_account_arn
-        # 1. Iterate for CloudWatch Log Group in CloudTrail trails
-        log_groups = []
-        for trail in cloudtrail_client.trails:
-            if trail.log_group_arn:
-                log_groups.append(trail.log_group_arn.split(":")[6])
-        # 2. Describe metric filters for previous log groups
-        for metric_filter in logs_client.metric_filters:
-            if metric_filter.log_group in log_groups:
-                if re.search(pattern, metric_filter.pattern, flags=re.DOTALL):
-                    report.resource_id = metric_filter.log_group
-                    report.resource_arn = metric_filter.arn
-                    report.region = metric_filter.region
-                    report.status = "FAIL"
-                    report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} but no alarms associated."
-                    # 3. Check if there is an alarm for the metric
-                    for alarm in cloudwatch_client.metric_alarms:
-                        if alarm.metric == metric_filter.metric:
-                            report.status = "PASS"
-                            report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} and alarms set."
-                            break
+        report = check_cloudwatch_log_metric_filter(
+            pattern,
+            cloudtrail_client.trails,
+            logs_client.metric_filters,
+            cloudwatch_client.metric_alarms,
+            report,
+        )
 
         findings.append(report)
         return findings
diff --git a/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled/cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled.py b/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled/cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled.py
index 78f505b031a..90e8fcfa026 100644
--- a/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled/cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled.py
+++ b/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled/cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled.py
@@ -1,5 +1,3 @@
-import re
-
 from prowler.lib.check.models import Check, Check_Report_AWS
 from prowler.providers.aws.services.cloudtrail.cloudtrail_client import (
     cloudtrail_client,
@@ -7,6 +5,9 @@
 from prowler.providers.aws.services.cloudwatch.cloudwatch_client import (
     cloudwatch_client,
 )
+from prowler.providers.aws.services.cloudwatch.lib.metric_filters import (
+    check_cloudwatch_log_metric_filter,
+)
 from prowler.providers.aws.services.cloudwatch.logs_client import logs_client
 
 
@@ -24,26 +25,13 @@ def execute(self):
         report.region = cloudwatch_client.region
         report.resource_id = cloudtrail_client.audited_account
         report.resource_arn = cloudtrail_client.audited_account_arn
-        # 1. Iterate for CloudWatch Log Group in CloudTrail trails
-        log_groups = []
-        for trail in cloudtrail_client.trails:
-            if trail.log_group_arn:
-                log_groups.append(trail.log_group_arn.split(":")[6])
-        # 2. Describe metric filters for previous log groups
-        for metric_filter in logs_client.metric_filters:
-            if metric_filter.log_group in log_groups:
-                if re.search(pattern, metric_filter.pattern, flags=re.DOTALL):
-                    report.resource_id = metric_filter.log_group
-                    report.resource_arn = metric_filter.arn
-                    report.region = metric_filter.region
-                    report.status = "FAIL"
-                    report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} but no alarms associated."
-                    # 3. Check if there is an alarm for the metric
-                    for alarm in cloudwatch_client.metric_alarms:
-                        if alarm.metric == metric_filter.metric:
-                            report.status = "PASS"
-                            report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} and alarms set."
-                            break
+        report = check_cloudwatch_log_metric_filter(
+            pattern,
+            cloudtrail_client.trails,
+            logs_client.metric_filters,
+            cloudwatch_client.metric_alarms,
+            report,
+        )
 
         findings.append(report)
         return findings
diff --git a/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_authentication_failures/cloudwatch_log_metric_filter_authentication_failures.py b/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_authentication_failures/cloudwatch_log_metric_filter_authentication_failures.py
index 861950a2ef7..17c627f12a4 100644
--- a/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_authentication_failures/cloudwatch_log_metric_filter_authentication_failures.py
+++ b/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_authentication_failures/cloudwatch_log_metric_filter_authentication_failures.py
@@ -1,5 +1,3 @@
-import re
-
 from prowler.lib.check.models import Check, Check_Report_AWS
 from prowler.providers.aws.services.cloudtrail.cloudtrail_client import (
     cloudtrail_client,
@@ -7,6 +5,9 @@
 from prowler.providers.aws.services.cloudwatch.cloudwatch_client import (
     cloudwatch_client,
 )
+from prowler.providers.aws.services.cloudwatch.lib.metric_filters import (
+    check_cloudwatch_log_metric_filter,
+)
 from prowler.providers.aws.services.cloudwatch.logs_client import logs_client
 
 
@@ -22,26 +23,13 @@ def execute(self):
         report.region = cloudwatch_client.region
         report.resource_id = cloudtrail_client.audited_account
         report.resource_arn = cloudtrail_client.audited_account_arn
-        # 1. Iterate for CloudWatch Log Group in CloudTrail trails
-        log_groups = []
-        for trail in cloudtrail_client.trails:
-            if trail.log_group_arn:
-                log_groups.append(trail.log_group_arn.split(":")[6])
-        # 2. Describe metric filters for previous log groups
-        for metric_filter in logs_client.metric_filters:
-            if metric_filter.log_group in log_groups:
-                if re.search(pattern, metric_filter.pattern, flags=re.DOTALL):
-                    report.resource_id = metric_filter.log_group
-                    report.resource_arn = metric_filter.arn
-                    report.region = metric_filter.region
-                    report.status = "FAIL"
-                    report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} but no alarms associated."
-                    # 3. Check if there is an alarm for the metric
-                    for alarm in cloudwatch_client.metric_alarms:
-                        if alarm.metric == metric_filter.metric:
-                            report.status = "PASS"
-                            report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} and alarms set."
-                            break
+        report = check_cloudwatch_log_metric_filter(
+            pattern,
+            cloudtrail_client.trails,
+            logs_client.metric_filters,
+            cloudwatch_client.metric_alarms,
+            report,
+        )
 
         findings.append(report)
         return findings
diff --git a/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_aws_organizations_changes/cloudwatch_log_metric_filter_aws_organizations_changes.py b/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_aws_organizations_changes/cloudwatch_log_metric_filter_aws_organizations_changes.py
index 667f35d60ce..b4a49a90879 100644
--- a/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_aws_organizations_changes/cloudwatch_log_metric_filter_aws_organizations_changes.py
+++ b/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_aws_organizations_changes/cloudwatch_log_metric_filter_aws_organizations_changes.py
@@ -1,5 +1,3 @@
-import re
-
 from prowler.lib.check.models import Check, Check_Report_AWS
 from prowler.providers.aws.services.cloudtrail.cloudtrail_client import (
     cloudtrail_client,
@@ -7,6 +5,9 @@
 from prowler.providers.aws.services.cloudwatch.cloudwatch_client import (
     cloudwatch_client,
 )
+from prowler.providers.aws.services.cloudwatch.lib.metric_filters import (
+    check_cloudwatch_log_metric_filter,
+)
 from prowler.providers.aws.services.cloudwatch.logs_client import logs_client
 
 
@@ -22,26 +23,13 @@ def execute(self):
         report.region = cloudwatch_client.region
         report.resource_id = cloudtrail_client.audited_account
         report.resource_arn = cloudtrail_client.audited_account_arn
-        # 1. Iterate for CloudWatch Log Group in CloudTrail trails
-        log_groups = []
-        for trail in cloudtrail_client.trails:
-            if trail.log_group_arn:
-                log_groups.append(trail.log_group_arn.split(":")[6])
-        # 2. Describe metric filters for previous log groups
-        for metric_filter in logs_client.metric_filters:
-            if metric_filter.log_group in log_groups:
-                if re.search(pattern, metric_filter.pattern, flags=re.DOTALL):
-                    report.resource_id = metric_filter.log_group
-                    report.resource_arn = metric_filter.arn
-                    report.region = metric_filter.region
-                    report.status = "FAIL"
-                    report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} but no alarms associated."
-                    # 3. Check if there is an alarm for the metric
-                    for alarm in cloudwatch_client.metric_alarms:
-                        if alarm.metric == metric_filter.metric:
-                            report.status = "PASS"
-                            report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} and alarms set."
-                            break
+        report = check_cloudwatch_log_metric_filter(
+            pattern,
+            cloudtrail_client.trails,
+            logs_client.metric_filters,
+            cloudwatch_client.metric_alarms,
+            report,
+        )
 
         findings.append(report)
         return findings
diff --git a/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk/cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk.py b/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk/cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk.py
index 483a9ec2788..cb963ca12f3 100644
--- a/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk/cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk.py
+++ b/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk/cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk.py
@@ -1,5 +1,3 @@
-import re
-
 from prowler.lib.check.models import Check, Check_Report_AWS
 from prowler.providers.aws.services.cloudtrail.cloudtrail_client import (
     cloudtrail_client,
@@ -7,6 +5,9 @@
 from prowler.providers.aws.services.cloudwatch.cloudwatch_client import (
     cloudwatch_client,
 )
+from prowler.providers.aws.services.cloudwatch.lib.metric_filters import (
+    check_cloudwatch_log_metric_filter,
+)
 from prowler.providers.aws.services.cloudwatch.logs_client import logs_client
 
 
@@ -22,26 +23,13 @@ def execute(self):
         report.region = cloudwatch_client.region
         report.resource_id = cloudtrail_client.audited_account
         report.resource_arn = cloudtrail_client.audited_account_arn
-        # 1. Iterate for CloudWatch Log Group in CloudTrail trails
-        log_groups = []
-        for trail in cloudtrail_client.trails:
-            if trail.log_group_arn:
-                log_groups.append(trail.log_group_arn.split(":")[6])
-        # 2. Describe metric filters for previous log groups
-        for metric_filter in logs_client.metric_filters:
-            if metric_filter.log_group in log_groups:
-                if re.search(pattern, metric_filter.pattern, flags=re.DOTALL):
-                    report.resource_id = metric_filter.log_group
-                    report.resource_arn = metric_filter.arn
-                    report.region = metric_filter.region
-                    report.status = "FAIL"
-                    report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} but no alarms associated."
-                    # 3. Check if there is an alarm for the metric
-                    for alarm in cloudwatch_client.metric_alarms:
-                        if alarm.metric == metric_filter.metric:
-                            report.status = "PASS"
-                            report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} and alarms set."
-                            break
+        report = check_cloudwatch_log_metric_filter(
+            pattern,
+            cloudtrail_client.trails,
+            logs_client.metric_filters,
+            cloudwatch_client.metric_alarms,
+            report,
+        )
 
         findings.append(report)
         return findings
diff --git a/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_for_s3_bucket_policy_changes/cloudwatch_log_metric_filter_for_s3_bucket_policy_changes.py b/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_for_s3_bucket_policy_changes/cloudwatch_log_metric_filter_for_s3_bucket_policy_changes.py
index 4ed802404d4..1e80b5d21b8 100644
--- a/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_for_s3_bucket_policy_changes/cloudwatch_log_metric_filter_for_s3_bucket_policy_changes.py
+++ b/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_for_s3_bucket_policy_changes/cloudwatch_log_metric_filter_for_s3_bucket_policy_changes.py
@@ -1,5 +1,3 @@
-import re
-
 from prowler.lib.check.models import Check, Check_Report_AWS
 from prowler.providers.aws.services.cloudtrail.cloudtrail_client import (
     cloudtrail_client,
@@ -7,6 +5,9 @@
 from prowler.providers.aws.services.cloudwatch.cloudwatch_client import (
     cloudwatch_client,
 )
+from prowler.providers.aws.services.cloudwatch.lib.metric_filters import (
+    check_cloudwatch_log_metric_filter,
+)
 from prowler.providers.aws.services.cloudwatch.logs_client import logs_client
 
 
@@ -22,26 +23,14 @@ def execute(self):
         report.region = cloudwatch_client.region
         report.resource_id = cloudtrail_client.audited_account
         report.resource_arn = cloudtrail_client.audited_account_arn
-        # 1. Iterate for CloudWatch Log Group in CloudTrail trails
-        log_groups = []
-        for trail in cloudtrail_client.trails:
-            if trail.log_group_arn:
-                log_groups.append(trail.log_group_arn.split(":")[6])
-        # 2. Describe metric filters for previous log groups
-        for metric_filter in logs_client.metric_filters:
-            if metric_filter.log_group in log_groups:
-                if re.search(pattern, metric_filter.pattern, flags=re.DOTALL):
-                    report.resource_id = metric_filter.log_group
-                    report.resource_arn = metric_filter.arn
-                    report.region = metric_filter.region
-                    report.status = "FAIL"
-                    report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} but no alarms associated."
-                    # 3. Check if there is an alarm for the metric
-                    for alarm in cloudwatch_client.metric_alarms:
-                        if alarm.metric == metric_filter.metric:
-                            report.status = "PASS"
-                            report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} and alarms set."
-                            break
+
+        report = check_cloudwatch_log_metric_filter(
+            pattern,
+            cloudtrail_client.trails,
+            logs_client.metric_filters,
+            cloudwatch_client.metric_alarms,
+            report,
+        )
 
         findings.append(report)
         return findings
diff --git a/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_policy_changes/cloudwatch_log_metric_filter_policy_changes.py b/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_policy_changes/cloudwatch_log_metric_filter_policy_changes.py
index dbfb9a06089..b33e9425eeb 100644
--- a/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_policy_changes/cloudwatch_log_metric_filter_policy_changes.py
+++ b/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_policy_changes/cloudwatch_log_metric_filter_policy_changes.py
@@ -1,5 +1,3 @@
-import re
-
 from prowler.lib.check.models import Check, Check_Report_AWS
 from prowler.providers.aws.services.cloudtrail.cloudtrail_client import (
     cloudtrail_client,
@@ -7,6 +5,9 @@
 from prowler.providers.aws.services.cloudwatch.cloudwatch_client import (
     cloudwatch_client,
 )
+from prowler.providers.aws.services.cloudwatch.lib.metric_filters import (
+    check_cloudwatch_log_metric_filter,
+)
 from prowler.providers.aws.services.cloudwatch.logs_client import logs_client
 
 
@@ -22,26 +23,13 @@ def execute(self):
         report.region = cloudwatch_client.region
         report.resource_id = cloudtrail_client.audited_account
         report.resource_arn = cloudtrail_client.audited_account_arn
-        # 1. Iterate for CloudWatch Log Group in CloudTrail trails
-        log_groups = []
-        for trail in cloudtrail_client.trails:
-            if trail.log_group_arn:
-                log_groups.append(trail.log_group_arn.split(":")[6])
-        # 2. Describe metric filters for previous log groups
-        for metric_filter in logs_client.metric_filters:
-            if metric_filter.log_group in log_groups:
-                if re.search(pattern, metric_filter.pattern, flags=re.DOTALL):
-                    report.resource_id = metric_filter.log_group
-                    report.resource_arn = metric_filter.arn
-                    report.region = metric_filter.region
-                    report.status = "FAIL"
-                    report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} but no alarms associated."
-                    # 3. Check if there is an alarm for the metric
-                    for alarm in cloudwatch_client.metric_alarms:
-                        if alarm.metric == metric_filter.metric:
-                            report.status = "PASS"
-                            report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} and alarms set."
-                            break
+        report = check_cloudwatch_log_metric_filter(
+            pattern,
+            cloudtrail_client.trails,
+            logs_client.metric_filters,
+            cloudwatch_client.metric_alarms,
+            report,
+        )
 
         findings.append(report)
         return findings
diff --git a/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_root_usage/cloudwatch_log_metric_filter_root_usage.py b/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_root_usage/cloudwatch_log_metric_filter_root_usage.py
index 36f92790286..4c78c4de1a0 100644
--- a/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_root_usage/cloudwatch_log_metric_filter_root_usage.py
+++ b/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_root_usage/cloudwatch_log_metric_filter_root_usage.py
@@ -1,5 +1,3 @@
-import re
-
 from prowler.lib.check.models import Check, Check_Report_AWS
 from prowler.providers.aws.services.cloudtrail.cloudtrail_client import (
     cloudtrail_client,
@@ -7,6 +5,9 @@
 from prowler.providers.aws.services.cloudwatch.cloudwatch_client import (
     cloudwatch_client,
 )
+from prowler.providers.aws.services.cloudwatch.lib.metric_filters import (
+    check_cloudwatch_log_metric_filter,
+)
 from prowler.providers.aws.services.cloudwatch.logs_client import logs_client
 
 
@@ -22,26 +23,13 @@ def execute(self):
         report.region = cloudwatch_client.region
         report.resource_id = cloudtrail_client.audited_account
         report.resource_arn = cloudtrail_client.audited_account_arn
-        # 1. Iterate for CloudWatch Log Group in CloudTrail trails
-        log_groups = []
-        for trail in cloudtrail_client.trails:
-            if trail.log_group_arn:
-                log_groups.append(trail.log_group_arn.split(":")[6])
-        # 2. Describe metric filters for previous log groups
-        for metric_filter in logs_client.metric_filters:
-            if metric_filter.log_group in log_groups:
-                if re.search(pattern, metric_filter.pattern, flags=re.DOTALL):
-                    report.resource_id = metric_filter.log_group
-                    report.resource_arn = metric_filter.arn
-                    report.region = metric_filter.region
-                    report.status = "FAIL"
-                    report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} but no alarms associated."
-                    # 3. Check if there is an alarm for the metric
-                    for alarm in cloudwatch_client.metric_alarms:
-                        if alarm.metric == metric_filter.metric:
-                            report.status = "PASS"
-                            report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} and alarms set."
-                            break
+        report = check_cloudwatch_log_metric_filter(
+            pattern,
+            cloudtrail_client.trails,
+            logs_client.metric_filters,
+            cloudwatch_client.metric_alarms,
+            report,
+        )
 
         findings.append(report)
         return findings
diff --git a/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_security_group_changes/cloudwatch_log_metric_filter_security_group_changes.py b/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_security_group_changes/cloudwatch_log_metric_filter_security_group_changes.py
index 12b15696e98..e87275a592f 100644
--- a/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_security_group_changes/cloudwatch_log_metric_filter_security_group_changes.py
+++ b/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_security_group_changes/cloudwatch_log_metric_filter_security_group_changes.py
@@ -1,5 +1,3 @@
-import re
-
 from prowler.lib.check.models import Check, Check_Report_AWS
 from prowler.providers.aws.services.cloudtrail.cloudtrail_client import (
     cloudtrail_client,
@@ -7,6 +5,9 @@
 from prowler.providers.aws.services.cloudwatch.cloudwatch_client import (
     cloudwatch_client,
 )
+from prowler.providers.aws.services.cloudwatch.lib.metric_filters import (
+    check_cloudwatch_log_metric_filter,
+)
 from prowler.providers.aws.services.cloudwatch.logs_client import logs_client
 
 
@@ -22,26 +23,13 @@ def execute(self):
         report.region = cloudwatch_client.region
         report.resource_id = cloudtrail_client.audited_account
         report.resource_arn = cloudtrail_client.audited_account_arn
-        # 1. Iterate for CloudWatch Log Group in CloudTrail trails
-        log_groups = []
-        for trail in cloudtrail_client.trails:
-            if trail.log_group_arn:
-                log_groups.append(trail.log_group_arn.split(":")[6])
-        # 2. Describe metric filters for previous log groups
-        for metric_filter in logs_client.metric_filters:
-            if metric_filter.log_group in log_groups:
-                if re.search(pattern, metric_filter.pattern, flags=re.DOTALL):
-                    report.resource_id = metric_filter.log_group
-                    report.resource_arn = metric_filter.arn
-                    report.region = metric_filter.region
-                    report.status = "FAIL"
-                    report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} but no alarms associated."
-                    # 3. Check if there is an alarm for the metric
-                    for alarm in cloudwatch_client.metric_alarms:
-                        if alarm.metric == metric_filter.metric:
-                            report.status = "PASS"
-                            report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} and alarms set."
-                            break
+        report = check_cloudwatch_log_metric_filter(
+            pattern,
+            cloudtrail_client.trails,
+            logs_client.metric_filters,
+            cloudwatch_client.metric_alarms,
+            report,
+        )
 
         findings.append(report)
         return findings
diff --git a/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_sign_in_without_mfa/cloudwatch_log_metric_filter_sign_in_without_mfa.py b/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_sign_in_without_mfa/cloudwatch_log_metric_filter_sign_in_without_mfa.py
index 3ac928224e8..bfa69df3d61 100644
--- a/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_sign_in_without_mfa/cloudwatch_log_metric_filter_sign_in_without_mfa.py
+++ b/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_sign_in_without_mfa/cloudwatch_log_metric_filter_sign_in_without_mfa.py
@@ -1,5 +1,3 @@
-import re
-
 from prowler.lib.check.models import Check, Check_Report_AWS
 from prowler.providers.aws.services.cloudtrail.cloudtrail_client import (
     cloudtrail_client,
@@ -7,6 +5,9 @@
 from prowler.providers.aws.services.cloudwatch.cloudwatch_client import (
     cloudwatch_client,
 )
+from prowler.providers.aws.services.cloudwatch.lib.metric_filters import (
+    check_cloudwatch_log_metric_filter,
+)
 from prowler.providers.aws.services.cloudwatch.logs_client import logs_client
 
 
@@ -22,26 +23,13 @@ def execute(self):
         report.region = cloudwatch_client.region
         report.resource_id = cloudtrail_client.audited_account
         report.resource_arn = cloudtrail_client.audited_account_arn
-        # 1. Iterate for CloudWatch Log Group in CloudTrail trails
-        log_groups = []
-        for trail in cloudtrail_client.trails:
-            if trail.log_group_arn:
-                log_groups.append(trail.log_group_arn.split(":")[6])
-        # 2. Describe metric filters for previous log groups
-        for metric_filter in logs_client.metric_filters:
-            if metric_filter.log_group in log_groups:
-                if re.search(pattern, metric_filter.pattern, flags=re.DOTALL):
-                    report.resource_id = metric_filter.log_group
-                    report.resource_arn = metric_filter.arn
-                    report.region = metric_filter.region
-                    report.status = "FAIL"
-                    report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} but no alarms associated."
-                    # 3. Check if there is an alarm for the metric
-                    for alarm in cloudwatch_client.metric_alarms:
-                        if alarm.metric == metric_filter.metric:
-                            report.status = "PASS"
-                            report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} and alarms set."
-                            break
+        report = check_cloudwatch_log_metric_filter(
+            pattern,
+            cloudtrail_client.trails,
+            logs_client.metric_filters,
+            cloudwatch_client.metric_alarms,
+            report,
+        )
 
         findings.append(report)
         return findings
diff --git a/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_unauthorized_api_calls/cloudwatch_log_metric_filter_unauthorized_api_calls.py b/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_unauthorized_api_calls/cloudwatch_log_metric_filter_unauthorized_api_calls.py
index 7e8200bccdd..a9a96fa7314 100644
--- a/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_unauthorized_api_calls/cloudwatch_log_metric_filter_unauthorized_api_calls.py
+++ b/prowler/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_unauthorized_api_calls/cloudwatch_log_metric_filter_unauthorized_api_calls.py
@@ -1,5 +1,3 @@
-import re
-
 from prowler.lib.check.models import Check, Check_Report_AWS
 from prowler.providers.aws.services.cloudtrail.cloudtrail_client import (
     cloudtrail_client,
@@ -7,6 +5,9 @@
 from prowler.providers.aws.services.cloudwatch.cloudwatch_client import (
     cloudwatch_client,
 )
+from prowler.providers.aws.services.cloudwatch.lib.metric_filters import (
+    check_cloudwatch_log_metric_filter,
+)
 from prowler.providers.aws.services.cloudwatch.logs_client import logs_client
 
 
@@ -22,26 +23,13 @@ def execute(self):
         report.region = cloudwatch_client.region
         report.resource_id = cloudtrail_client.audited_account
         report.resource_arn = cloudtrail_client.audited_account_arn
-        # 1. Iterate for CloudWatch Log Group in CloudTrail trails
-        log_groups = []
-        for trail in cloudtrail_client.trails:
-            if trail.log_group_arn:
-                log_groups.append(trail.log_group_arn.split(":")[6])
-        # 2. Describe metric filters for previous log groups
-        for metric_filter in logs_client.metric_filters:
-            if metric_filter.log_group in log_groups:
-                if re.search(pattern, metric_filter.pattern, flags=re.DOTALL):
-                    report.resource_id = metric_filter.log_group
-                    report.resource_arn = metric_filter.arn
-                    report.region = metric_filter.region
-                    report.status = "FAIL"
-                    report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} but no alarms associated."
-                    # 3. Check if there is an alarm for the metric
-                    for alarm in cloudwatch_client.metric_alarms:
-                        if alarm.metric == metric_filter.metric:
-                            report.status = "PASS"
-                            report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} and alarms set."
-                            break
+        report = check_cloudwatch_log_metric_filter(
+            pattern,
+            cloudtrail_client.trails,
+            logs_client.metric_filters,
+            cloudwatch_client.metric_alarms,
+            report,
+        )
 
         findings.append(report)
         return findings
diff --git a/prowler/providers/aws/services/cloudwatch/cloudwatch_service.py b/prowler/providers/aws/services/cloudwatch/cloudwatch_service.py
index c765c8e0bb5..93f0e1eaf68 100644
--- a/prowler/providers/aws/services/cloudwatch/cloudwatch_service.py
+++ b/prowler/providers/aws/services/cloudwatch/cloudwatch_service.py
@@ -218,9 +218,9 @@ class LogGroup(BaseModel):
     never_expire: bool
     kms_id: Optional[str]
     region: str
-    log_streams: dict[
-        str, list[str]
-    ] = {}  # Log stream name as the key, array of events as the value
+    log_streams: dict[str, list[str]] = (
+        {}
+    )  # Log stream name as the key, array of events as the value
     tags: Optional[list] = []
 
 
diff --git a/prowler/providers/aws/services/cloudwatch/lib/metric_filters.py b/prowler/providers/aws/services/cloudwatch/lib/metric_filters.py
new file mode 100644
index 00000000000..ea6dcafcd94
--- /dev/null
+++ b/prowler/providers/aws/services/cloudwatch/lib/metric_filters.py
@@ -0,0 +1,34 @@
+import re
+
+from prowler.lib.check.models import Check_Report_AWS
+
+
+def check_cloudwatch_log_metric_filter(
+    metric_filter_pattern: str,
+    trails: list,
+    metric_filters: list,
+    metric_alarms: list,
+    report: Check_Report_AWS,
+):
+    # 1. Iterate for CloudWatch Log Group in CloudTrail trails
+    log_groups = []
+    for trail in trails:
+        if trail.log_group_arn:
+            log_groups.append(trail.log_group_arn.split(":")[6])
+    # 2. Describe metric filters for previous log groups
+    for metric_filter in metric_filters:
+        if metric_filter.log_group in log_groups:
+            if re.search(metric_filter_pattern, metric_filter.pattern, flags=re.DOTALL):
+                report.resource_id = metric_filter.log_group
+                report.resource_arn = metric_filter.arn
+                report.region = metric_filter.region
+                report.status = "FAIL"
+                report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} but no alarms associated."
+                # 3. Check if there is an alarm for the metric
+                for alarm in metric_alarms:
+                    if alarm.metric == metric_filter.metric:
+                        report.status = "PASS"
+                        report.status_extended = f"CloudWatch log group {metric_filter.log_group} found with metric filter {metric_filter.name} and alarms set."
+                        break
+
+    return report
diff --git a/prowler/providers/aws/services/inspector2/inspector2_findings_exist/__init__.py b/prowler/providers/aws/services/cognito/__init__.py
similarity index 100%
rename from prowler/providers/aws/services/inspector2/inspector2_findings_exist/__init__.py
rename to prowler/providers/aws/services/cognito/__init__.py
diff --git a/prowler/providers/aws/services/cognito/cognito_idp_client.py b/prowler/providers/aws/services/cognito/cognito_idp_client.py
new file mode 100644
index 00000000000..f71f16aff5c
--- /dev/null
+++ b/prowler/providers/aws/services/cognito/cognito_idp_client.py
@@ -0,0 +1,4 @@
+from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info
+from prowler.providers.aws.services.cognito.cognito_service import CognitoIDP
+
+cognito_idp_client = CognitoIDP(current_audit_info)
diff --git a/prowler/providers/aws/services/cognito/cognito_service.py b/prowler/providers/aws/services/cognito/cognito_service.py
new file mode 100644
index 00000000000..735846de0b9
--- /dev/null
+++ b/prowler/providers/aws/services/cognito/cognito_service.py
@@ -0,0 +1,122 @@
+from datetime import datetime
+from typing import Optional
+
+from pydantic import BaseModel
+
+from prowler.lib.logger import logger
+from prowler.lib.scan_filters.scan_filters import is_resource_filtered
+from prowler.providers.aws.lib.service.service import AWSService
+
+
+################## CognitoIDP
+class CognitoIDP(AWSService):
+    def __init__(self, audit_info):
+        super().__init__("cognito-idp", audit_info)
+        self.user_pools = {}
+        self.__threading_call__(self.__list_user_pools__)
+        self.__describe_user_pools__()
+        self.__get_user_pool_mfa_config__()
+
+    def __list_user_pools__(self, regional_client):
+        logger.info("Cognito - Listing User Pools...")
+        try:
+            user_pools_paginator = regional_client.get_paginator("list_user_pools")
+            for page in user_pools_paginator.paginate(MaxResults=60):
+                for user_pool in page["UserPools"]:
+                    arn = f"arn:{self.audited_partition}:cognito-idp:{regional_client.region}:{self.audited_account}:userpool/{user_pool['Id']}"
+                    if not self.audit_resources or (
+                        is_resource_filtered(arn, self.audit_resources)
+                    ):
+                        try:
+                            self.user_pools[arn] = UserPool(
+                                id=user_pool["Id"],
+                                arn=arn,
+                                name=user_pool["Name"],
+                                region=regional_client.region,
+                                last_modified=user_pool["LastModifiedDate"],
+                                creation_date=user_pool["CreationDate"],
+                                status=user_pool.get("Status", "Disabled"),
+                            )
+                        except Exception as error:
+                            logger.error(
+                                f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                            )
+        except Exception as error:
+            logger.error(
+                f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+            )
+
+    def __describe_user_pools__(self):
+        logger.info("Cognito - Describing User Pools...")
+        try:
+            for user_pool in self.user_pools.values():
+                try:
+                    user_pool_details = self.regional_clients[
+                        user_pool.region
+                    ].describe_user_pool(UserPoolId=user_pool.id)["UserPool"]
+                    user_pool.password_policy = user_pool_details.get(
+                        "Policies", {}
+                    ).get("PasswordPolicy", {})
+                    user_pool.deletion_protection = user_pool_details.get(
+                        "DeletionProtection", "INACTIVE"
+                    )
+                    user_pool.advanced_security_mode = user_pool_details.get(
+                        "UserPoolAddOns", {}
+                    ).get("AdvancedSecurityMode", "OFF")
+                    user_pool.tags = [user_pool_details.get("UserPoolTags", "")]
+                except Exception as error:
+                    logger.error(
+                        f"{user_pool.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                    )
+        except Exception as error:
+            logger.error(
+                f"{user_pool.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+            )
+
+    def __get_user_pool_mfa_config__(self):
+        logger.info("Cognito - Getting User Pool MFA Configuration...")
+        try:
+            for user_pool in self.user_pools.values():
+                try:
+                    mfa_config = self.regional_clients[
+                        user_pool.region
+                    ].get_user_pool_mfa_config(UserPoolId=user_pool.id)
+                    if mfa_config["MfaConfiguration"] != "OFF":
+                        user_pool.mfa_config = MFAConfig(
+                            sms_authentication=mfa_config.get(
+                                "SmsMfaConfiguration", {}
+                            ),
+                            software_token_mfa_authentication=mfa_config.get(
+                                "SoftwareTokenMfaConfiguration", {}
+                            ),
+                            status=mfa_config["MfaConfiguration"],
+                        )
+                except Exception as error:
+                    logger.error(
+                        f"{user_pool.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                    )
+        except Exception as error:
+            logger.error(
+                f"{user_pool.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+            )
+
+
+class MFAConfig(BaseModel):
+    sms_authentication: Optional[dict]
+    software_token_mfa_authentication: Optional[dict]
+    status: str
+
+
+class UserPool(BaseModel):
+    id: str
+    arn: str
+    name: str
+    region: str
+    advanced_security_mode: str = "OFF"
+    deletion_protection: str = "INACTIVE"
+    last_modified: datetime
+    creation_date: datetime
+    status: str
+    password_policy: Optional[dict]
+    mfa_config: Optional[MFAConfig]
+    tags: Optional[list] = []
diff --git a/prowler/providers/aws/services/ec2/ec2_elastic_ip_shodan/ec2_elastic_ip_shodan.py b/prowler/providers/aws/services/ec2/ec2_elastic_ip_shodan/ec2_elastic_ip_shodan.py
index b211d3c4697..af6832bd2a7 100644
--- a/prowler/providers/aws/services/ec2/ec2_elastic_ip_shodan/ec2_elastic_ip_shodan.py
+++ b/prowler/providers/aws/services/ec2/ec2_elastic_ip_shodan/ec2_elastic_ip_shodan.py
@@ -37,6 +37,6 @@ def execute(self):
 
         else:
             logger.error(
-                "ERROR: No Shodan API Key -- Please input a Shodan API Key with -N/--shodan or in config.yaml"
+                "No Shodan API Key -- Please input a Shodan API Key with -N/--shodan or in config.yaml"
             )
         return findings
diff --git a/prowler/providers/aws/services/ec2/ec2_service.py b/prowler/providers/aws/services/ec2/ec2_service.py
index b08ca8aa3ce..9ab5c3cb0c1 100644
--- a/prowler/providers/aws/services/ec2/ec2_service.py
+++ b/prowler/providers/aws/services/ec2/ec2_service.py
@@ -17,7 +17,7 @@ def __init__(self, provider):
         super().__init__(__class__.__name__, provider)
         self.instances = []
         self.__threading_call__(self.__describe_instances__)
-        self.__get_instance_user_data__()
+        self.__threading_call__(self.__get_instance_user_data__, self.instances)
         self.security_groups = []
         self.regions_with_sgs = []
         self.__threading_call__(self.__describe_security_groups__)
@@ -27,7 +27,7 @@ def __init__(self, provider):
         self.volumes_with_snapshots = {}
         self.regions_with_snapshots = {}
         self.__threading_call__(self.__describe_snapshots__)
-        self.__get_snapshot_public__()
+        self.__threading_call__(self.__determine_public_snapshots__, self.snapshots)
         self.network_interfaces = []
         self.__threading_call__(self.__describe_public_network_interfaces__)
         self.__threading_call__(self.__describe_sg_network_interfaces__)
@@ -36,12 +36,11 @@ def __init__(self, provider):
         self.volumes = []
         self.__threading_call__(self.__describe_volumes__)
         self.ebs_encryption_by_default = []
-        self.__threading_call__(self.__get_ebs_encryption_by_default__)
+        self.__threading_call__(self.__get_ebs_encryption_settings__)
         self.elastic_ips = []
-        self.__threading_call__(self.__describe_addresses__)
+        self.__threading_call__(self.__describe_ec2_addresses__)
 
     def __describe_instances__(self, regional_client):
-        logger.info("EC2 - Describing EC2 Instances...")
         try:
             describe_instances_paginator = regional_client.get_paginator(
                 "describe_instances"
@@ -106,7 +105,6 @@ def __describe_instances__(self, regional_client):
             )
 
     def __describe_security_groups__(self, regional_client):
-        logger.info("EC2 - Describing Security Groups...")
         try:
             describe_security_groups_paginator = regional_client.get_paginator(
                 "describe_security_groups"
@@ -155,7 +153,6 @@ def __describe_security_groups__(self, regional_client):
             )
 
     def __describe_network_acls__(self, regional_client):
-        logger.info("EC2 - Describing Network ACLs...")
         try:
             describe_network_acls_paginator = regional_client.get_paginator(
                 "describe_network_acls"
@@ -186,7 +183,6 @@ def __describe_network_acls__(self, regional_client):
             )
 
     def __describe_snapshots__(self, regional_client):
-        logger.info("EC2 - Describing Snapshots...")
         try:
             snapshots_in_region = False
             describe_snapshots_paginator = regional_client.get_paginator(
@@ -219,35 +215,30 @@ def __describe_snapshots__(self, regional_client):
                 f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
             )
 
-    def __get_snapshot_public__(self):
-        logger.info("EC2 - Getting snapshot volume attribute permissions...")
-        for snapshot in self.snapshots:
-            try:
-                regional_client = self.regional_clients[snapshot.region]
-                snapshot_public = regional_client.describe_snapshot_attribute(
-                    Attribute="createVolumePermission", SnapshotId=snapshot.id
-                )
-                for permission in snapshot_public["CreateVolumePermissions"]:
-                    if "Group" in permission:
-                        if permission["Group"] == "all":
-                            snapshot.public = True
-
-            except ClientError as error:
-                if error.response["Error"]["Code"] == "InvalidSnapshot.NotFound":
-                    logger.warning(
-                        f"{snapshot.region} --"
-                        f" {error.__class__.__name__}[{error.__traceback__.tb_lineno}]:"
-                        f" {error}"
-                    )
-                    continue
-
-            except Exception as error:
-                logger.error(
-                    f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+    def __determine_public_snapshots__(self, snapshot):
+        try:
+            regional_client = self.regional_clients[snapshot.region]
+            snapshot_public = regional_client.describe_snapshot_attribute(
+                Attribute="createVolumePermission", SnapshotId=snapshot.id
+            )
+            for permission in snapshot_public["CreateVolumePermissions"]:
+                if "Group" in permission:
+                    if permission["Group"] == "all":
+                        snapshot.public = True
+
+        except ClientError as error:
+            if error.response["Error"]["Code"] == "InvalidSnapshot.NotFound":
+                logger.warning(
+                    f"{snapshot.region} --"
+                    f" {error.__class__.__name__}[{error.__traceback__.tb_lineno}]:"
+                    f" {error}"
                 )
+        except Exception as error:
+            logger.error(
+                f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+            )
 
     def __describe_public_network_interfaces__(self, regional_client):
-        logger.info("EC2 - Describing Network Interfaces...")
         try:
             # Get Network Interfaces with Public IPs
             describe_network_interfaces_paginator = regional_client.get_paginator(
@@ -274,7 +265,6 @@ def __describe_public_network_interfaces__(self, regional_client):
             )
 
     def __describe_sg_network_interfaces__(self, regional_client):
-        logger.info("EC2 - Describing Network Interfaces...")
         try:
             # Get Network Interfaces for Security Groups
             for sg in self.security_groups:
@@ -299,30 +289,25 @@ def __describe_sg_network_interfaces__(self, regional_client):
                 f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
             )
 
-    def __get_instance_user_data__(self):
-        logger.info("EC2 - Getting instance user data...")
-        for instance in self.instances:
-            try:
-                regional_client = self.regional_clients[instance.region]
-                user_data = regional_client.describe_instance_attribute(
-                    Attribute="userData", InstanceId=instance.id
-                )["UserData"]
-                if "Value" in user_data:
-                    instance.user_data = user_data["Value"]
-
-            except ClientError as error:
-                if error.response["Error"]["Code"] == "InvalidInstanceID.NotFound":
-                    logger.warning(
-                        f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
-                    )
-                    continue
-            except Exception as error:
-                logger.error(
+    def __get_instance_user_data__(self, instance):
+        try:
+            regional_client = self.regional_clients[instance.region]
+            user_data = regional_client.describe_instance_attribute(
+                Attribute="userData", InstanceId=instance.id
+            )["UserData"]
+            if "Value" in user_data:
+                instance.user_data = user_data["Value"]
+        except ClientError as error:
+            if error.response["Error"]["Code"] == "InvalidInstanceID.NotFound":
+                logger.warning(
                     f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
                 )
+        except Exception as error:
+            logger.error(
+                f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+            )
 
     def __describe_images__(self, regional_client):
-        logger.info("EC2 - Describing Images...")
         try:
             for image in regional_client.describe_images(Owners=["self"])["Images"]:
                 arn = f"arn:{self.audited_partition}:ec2:{regional_client.region}:{self.audited_account}:image/{image['ImageId']}"
@@ -345,7 +330,6 @@ def __describe_images__(self, regional_client):
             )
 
     def __describe_volumes__(self, regional_client):
-        logger.info("EC2 - Describing Volumes...")
         try:
             describe_volumes_paginator = regional_client.get_paginator(
                 "describe_volumes"
@@ -370,8 +354,7 @@ def __describe_volumes__(self, regional_client):
                 f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
             )
 
-    def __describe_addresses__(self, regional_client):
-        logger.info("EC2 - Describing Elastic IPs...")
+    def __describe_ec2_addresses__(self, regional_client):
         try:
             for address in regional_client.describe_addresses()["Addresses"]:
                 public_ip = None
@@ -402,8 +385,7 @@ def __describe_addresses__(self, regional_client):
                 f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
             )
 
-    def __get_ebs_encryption_by_default__(self, regional_client):
-        logger.info("EC2 - Get EBS Encryption By Default...")
+    def __get_ebs_encryption_settings__(self, regional_client):
         try:
             volumes_in_region = False
             for volume in self.volumes:
diff --git a/prowler/providers/aws/services/ecr/ecr_service.py b/prowler/providers/aws/services/ecr/ecr_service.py
index c0d5f3d7cb3..9c9fc60feb0 100644
--- a/prowler/providers/aws/services/ecr/ecr_service.py
+++ b/prowler/providers/aws/services/ecr/ecr_service.py
@@ -70,11 +70,20 @@ def __describe_repository_policies__(self, regional_client):
             if regional_client.region in self.registries:
                 for repository in self.registries[regional_client.region].repositories:
                     client = self.regional_clients[repository.region]
-                    policy = client.get_repository_policy(
-                        repositoryName=repository.name
-                    )
-                    if "policyText" in policy:
-                        repository.policy = loads(policy["policyText"])
+                    try:
+                        policy = client.get_repository_policy(
+                            repositoryName=repository.name
+                        )
+                        if "policyText" in policy:
+                            repository.policy = loads(policy["policyText"])
+                    except ClientError as error:
+                        if (
+                            error.response["Error"]["Code"]
+                            == "RepositoryPolicyNotFoundException"
+                        ):
+                            logger.warning(
+                                f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                            )
 
         except Exception as error:
             if "RepositoryPolicyNotFoundException" not in str(error):
diff --git a/prowler/providers/gcp/services/serviceusage/serviceusage_cloudasset_inventory_enabled/__init__.py b/prowler/providers/aws/services/eks/eks_cluster_network_policy_enabled/__init__.py
similarity index 100%
rename from prowler/providers/gcp/services/serviceusage/serviceusage_cloudasset_inventory_enabled/__init__.py
rename to prowler/providers/aws/services/eks/eks_cluster_network_policy_enabled/__init__.py
diff --git a/prowler/providers/aws/services/eks/eks_cluster_network_policy_enabled/eks_cluster_network_policy_enabled.metadata.json b/prowler/providers/aws/services/eks/eks_cluster_network_policy_enabled/eks_cluster_network_policy_enabled.metadata.json
new file mode 100644
index 00000000000..1692b375089
--- /dev/null
+++ b/prowler/providers/aws/services/eks/eks_cluster_network_policy_enabled/eks_cluster_network_policy_enabled.metadata.json
@@ -0,0 +1,35 @@
+{
+  "Provider": "aws",
+  "CheckID": "eks_cluster_network_policy_enabled",
+  "CheckTitle": "Ensure Network Policy is Enabled and Set as Appropriate",
+  "CheckType": [
+    "Security",
+    "Configuration"
+  ],
+  "ServiceName": "eks",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "arn:partition:service:region:account-id:resource-id",
+  "Severity": "high",
+  "ResourceType": "AwsEksCluster",
+  "Description": "Ensure that Network Policy is enabled and set as appropriate in Amazon EKS clusters. Network Policy provides pod-level firewalling to restrict traffic between sources, enhancing network security within the cluster.",
+  "Risk": "Without proper Network Policy settings, pods within the cluster may be vulnerable to unauthorized access and communication.",
+  "RelatedUrl": "https://docs.aws.amazon.com/eks/latest/userguide/eks-networking-add-ons.html",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/aws/EKS/security-groups.html",
+      "Terraform": "https://docs.bridgecrew.io/docs/bc_aws_kubernetes_1#terraform"
+    },
+    "Recommendation": {
+      "Text": "Enable and configure Network Policy to enhance network security within the EKS cluster.",
+      "Url": "https://docs.aws.amazon.com/eks/latest/userguide/eks-networking-add-ons.html"
+    }
+  },
+  "Categories": [
+    "internet-exposed"
+  ],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "Enabling Network Policy may cause a rolling update of all cluster nodes and consumes additional resources."
+}
diff --git a/prowler/providers/aws/services/eks/eks_cluster_network_policy_enabled/eks_cluster_network_policy_enabled.py b/prowler/providers/aws/services/eks/eks_cluster_network_policy_enabled/eks_cluster_network_policy_enabled.py
new file mode 100644
index 00000000000..56e58008521
--- /dev/null
+++ b/prowler/providers/aws/services/eks/eks_cluster_network_policy_enabled/eks_cluster_network_policy_enabled.py
@@ -0,0 +1,22 @@
+from prowler.lib.check.models import Check, Check_Report_AWS
+from prowler.providers.aws.services.eks.eks_client import eks_client
+
+
+class eks_cluster_network_policy_enabled(Check):
+    def execute(self):
+        findings = []
+        for cluster in eks_client.clusters:
+            report = Check_Report_AWS(self.metadata())
+            report.region = cluster.region
+            report.resource_id = cluster.name
+            report.resource_arn = cluster.arn
+            report.resource_tags = cluster.tags
+            report.status = "FAIL"
+            report.status_extended = f"EKS cluster {cluster.name} does not have a Network Policy. Cluster security group ID is not set."
+            if cluster.security_group_id:
+                report.status = "PASS"
+                report.status_extended = f"EKS cluster {cluster.name} has a Network Policy with the security group {cluster.security_group_id}."
+
+            findings.append(report)
+
+        return findings
diff --git a/prowler/providers/aws/services/eks/eks_cluster_private_nodes_enabled/__init__.py b/prowler/providers/aws/services/eks/eks_cluster_private_nodes_enabled/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/aws/services/eks/eks_cluster_private_nodes_enabled/eks_cluster_private_nodes_enabled.metadata.json b/prowler/providers/aws/services/eks/eks_cluster_private_nodes_enabled/eks_cluster_private_nodes_enabled.metadata.json
new file mode 100644
index 00000000000..697e311c31a
--- /dev/null
+++ b/prowler/providers/aws/services/eks/eks_cluster_private_nodes_enabled/eks_cluster_private_nodes_enabled.metadata.json
@@ -0,0 +1,35 @@
+{
+  "Provider": "aws",
+  "CheckID": "eks_cluster_private_nodes_enabled",
+  "CheckTitle": "Ensure Clusters are created with Private Nodes",
+  "CheckType": [
+    "Security",
+    "Configuration"
+  ],
+  "ServiceName": "EKS",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "high",
+  "ResourceType": "AwsEksCluster",
+  "Description": "Ensure that clusters are created with private nodes, disabling public IP addresses for cluster nodes. Private nodes have no public IP addresses, restricting access to internal networks and enhancing security.",
+  "Risk": "Without private nodes, cluster nodes may have public IP addresses, increasing the attack surface and exposing them to potential threats from the internet.",
+  "RelatedUrl": "https://docs.aws.amazon.com/eks/latest/userguide/private-clusters.html",
+  "Remediation": {
+    "Code": {
+      "CLI": "aws eks update-cluster-config --region region-code --name my-cluster --resources-vpc-config endpointPrivateAccess=true",
+      "NativeIaC": "",
+      "Other": "",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "Update the cluster configuration to enable private nodes, disabling public IP addresses for cluster nodes.",
+      "Url": "https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html"
+    }
+  },
+  "Categories": [
+    "internet-exposed"
+  ],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "Enabling private nodes restricts outbound access to the public internet. If outbound internet access is required, Cloud NAT or a NAT gateway can be used."
+}
diff --git a/prowler/providers/aws/services/eks/eks_cluster_private_nodes_enabled/eks_cluster_private_nodes_enabled.py b/prowler/providers/aws/services/eks/eks_cluster_private_nodes_enabled/eks_cluster_private_nodes_enabled.py
new file mode 100644
index 00000000000..d8ddcabafe2
--- /dev/null
+++ b/prowler/providers/aws/services/eks/eks_cluster_private_nodes_enabled/eks_cluster_private_nodes_enabled.py
@@ -0,0 +1,23 @@
+from prowler.lib.check.models import Check, Check_Report_AWS
+from prowler.providers.aws.services.eks.eks_client import eks_client
+
+
+class eks_cluster_private_nodes_enabled(Check):
+    def execute(self):
+        findings = []
+        for cluster in eks_client.clusters:
+            report = Check_Report_AWS(self.metadata())
+            report.region = cluster.region
+            report.resource_id = cluster.name
+            report.resource_arn = cluster.arn
+            report.resource_tags = cluster.tags
+            report.status = "PASS"
+            report.status_extended = (
+                f"EKS cluster {cluster.name} is created with private nodes."
+            )
+            if not cluster.endpoint_private_access:
+                report.status = "FAIL"
+                report.status_extended = f"Cluster endpoint private access is not enabled for EKS cluster {cluster.name}."
+            findings.append(report)
+
+        return findings
diff --git a/prowler/providers/aws/services/eks/eks_service.py b/prowler/providers/aws/services/eks/eks_service.py
index 70ac050e75b..1dcca3379d5 100644
--- a/prowler/providers/aws/services/eks/eks_service.py
+++ b/prowler/providers/aws/services/eks/eks_service.py
@@ -54,6 +54,13 @@ def __describe_cluster__(self, regional_clients):
                             "clusterLogging"
                         ][0]["enabled"],
                     )
+                if (
+                    "clusterSecurityGroupId"
+                    in describe_cluster["cluster"]["resourcesVpcConfig"]
+                ):
+                    cluster.security_group_id = describe_cluster["cluster"][
+                        "resourcesVpcConfig"
+                    ]["clusterSecurityGroupId"]
                 if (
                     "endpointPublicAccess"
                     in describe_cluster["cluster"]["resourcesVpcConfig"]
@@ -95,6 +102,7 @@ class EKSCluster(BaseModel):
     arn: str
     region: str
     logging: EKSClusterLoggingEntity = None
+    security_group_id: str = None
     endpoint_public_access: bool = None
     endpoint_private_access: bool = None
     public_access_cidrs: list[str] = None
diff --git a/prowler/providers/aws/services/elasticache/elasticache_service.py b/prowler/providers/aws/services/elasticache/elasticache_service.py
index 353ad4ff8cd..9e8d1c78110 100644
--- a/prowler/providers/aws/services/elasticache/elasticache_service.py
+++ b/prowler/providers/aws/services/elasticache/elasticache_service.py
@@ -1,5 +1,6 @@
 from typing import Optional
 
+from botocore.exceptions import ClientError
 from pydantic import BaseModel
 
 from prowler.lib.logger import logger
@@ -73,7 +74,15 @@ def __list_tags_for_resource__(self):
                     cluster.tags = regional_client.list_tags_for_resource(
                         ResourceName=cluster.arn
                     )["TagList"]
-
+                except ClientError as error:
+                    if error.response["Error"]["Code"] == "CacheClusterNotFound":
+                        logger.warning(
+                            f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                        )
+                    else:
+                        logger.error(
+                            f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                        )
                 except Exception as error:
                     logger.error(
                         f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
diff --git a/prowler/providers/aws/services/elbv2/elbv2_insecure_ssl_ciphers/elbv2_insecure_ssl_ciphers.py b/prowler/providers/aws/services/elbv2/elbv2_insecure_ssl_ciphers/elbv2_insecure_ssl_ciphers.py
index 40bcf1e1009..eeca1eb0742 100644
--- a/prowler/providers/aws/services/elbv2/elbv2_insecure_ssl_ciphers/elbv2_insecure_ssl_ciphers.py
+++ b/prowler/providers/aws/services/elbv2/elbv2_insecure_ssl_ciphers/elbv2_insecure_ssl_ciphers.py
@@ -33,7 +33,7 @@ def execute(self):
                     and listener.ssl_policy not in secure_ssl_policies
                 ):
                     report.status = "FAIL"
-                    report.status_extended = f"ELBv2 {lb.name} has listeners with insecure SSL protocols or ciphers."
+                    report.status_extended = f"ELBv2 {lb.name} has listeners with insecure SSL protocols or ciphers ({listener.ssl_policy})."
 
             findings.append(report)
 
diff --git a/prowler/providers/aws/services/emr/emr_service.py b/prowler/providers/aws/services/emr/emr_service.py
index 287025daba4..6dba118677b 100644
--- a/prowler/providers/aws/services/emr/emr_service.py
+++ b/prowler/providers/aws/services/emr/emr_service.py
@@ -108,9 +108,9 @@ def __describe_cluster__(self, regional_client):
                     master_public_dns_name = cluster_info["Cluster"].get(
                         "MasterPublicDnsName"
                     )
-                    self.clusters[
-                        cluster.id
-                    ].master_public_dns_name = master_public_dns_name
+                    self.clusters[cluster.id].master_public_dns_name = (
+                        master_public_dns_name
+                    )
                     # Set cluster Public/Private
                     # Public EMR cluster have their DNS ending with .amazonaws.com
                     # while private ones have format of ip-xxx-xx-xx.us-east-1.compute.internal.
@@ -136,12 +136,12 @@ def __get_block_public_access_configuration__(self, regional_client):
                 regional_client.get_block_public_access_configuration()
             )
 
-            self.block_public_access_configuration[
-                regional_client.region
-            ] = BlockPublicAccessConfiguration(
-                block_public_security_group_rules=block_public_access_configuration[
-                    "BlockPublicAccessConfiguration"
-                ]["BlockPublicSecurityGroupRules"]
+            self.block_public_access_configuration[regional_client.region] = (
+                BlockPublicAccessConfiguration(
+                    block_public_security_group_rules=block_public_access_configuration[
+                        "BlockPublicAccessConfiguration"
+                    ]["BlockPublicSecurityGroupRules"]
+                )
             )
         except Exception as error:
             logger.error(
diff --git a/prowler/providers/aws/services/fms/fms_policy_compliant/fms_policy_compliant.py b/prowler/providers/aws/services/fms/fms_policy_compliant/fms_policy_compliant.py
index dcb0b4e58a1..bfb9b698b0e 100644
--- a/prowler/providers/aws/services/fms/fms_policy_compliant/fms_policy_compliant.py
+++ b/prowler/providers/aws/services/fms/fms_policy_compliant/fms_policy_compliant.py
@@ -13,17 +13,24 @@ def execute(self):
             report.status = "PASS"
             report.status_extended = "FMS enabled with all compliant accounts."
             non_compliant_policy = False
-            for policy in fms_client.fms_policies:
-                for policy_to_account in policy.compliance_status:
-                    if policy_to_account.status == "NON_COMPLIANT":
-                        report.status = "FAIL"
-                        report.status_extended = f"FMS with non-compliant policy {policy.name} for account {policy_to_account.account_id}."
-                        report.resource_id = policy.id
-                        report.resource_arn = policy.arn
-                        non_compliant_policy = True
+            if fms_client.fms_policies:
+                for policy in fms_client.fms_policies:
+                    for policy_to_account in policy.compliance_status:
+                        if (
+                            policy_to_account.status == "NON_COMPLIANT"
+                            or not policy_to_account.status
+                        ):
+                            report.status = "FAIL"
+                            report.status_extended = f"FMS with non-compliant policy {policy.name} for account {policy_to_account.account_id}."
+                            report.resource_id = policy.id
+                            report.resource_arn = policy.arn
+                            non_compliant_policy = True
+                            break
+                    if non_compliant_policy:
                         break
-                if non_compliant_policy:
-                    break
+            else:
+                report.status = "FAIL"
+                report.status_extended = f"FMS without any compliant policy for account {fms_client.audited_account}."
 
             findings.append(report)
         return findings
diff --git a/prowler/providers/aws/services/fms/fms_service.py b/prowler/providers/aws/services/fms/fms_service.py
index 5e645ae5440..b810e5d935a 100644
--- a/prowler/providers/aws/services/fms/fms_service.py
+++ b/prowler/providers/aws/services/fms/fms_service.py
@@ -5,8 +5,6 @@
 from prowler.lib.scan_filters.scan_filters import is_resource_filtered
 from prowler.providers.aws.lib.service.service import AWSService
 
-# from prowler.providers.aws.aws_provider import generate_regional_clients
-
 
 ################## FMS
 class FMS(AWSService):
@@ -68,14 +66,19 @@ def __list_compliance_status__(self):
                 for page in list_compliance_status_paginator.paginate(
                     PolicyId=fms_policy.id
                 ):
-                    for fms_compliance_status in page["PolicyComplianceStatusList"]:
+                    for fms_compliance_status in page.get(
+                        "PolicyComplianceStatusList", []
+                    ):
+                        compliance_status = ""
+                        if fms_compliance_status.get("EvaluationResults"):
+                            compliance_status = fms_compliance_status.get(
+                                "EvaluationResults"
+                            )[0].get("ComplianceStatus", "")
                         fms_policy.compliance_status.append(
                             PolicyAccountComplianceStatus(
                                 account_id=fms_compliance_status.get("MemberAccount"),
                                 policy_id=fms_compliance_status.get("PolicyId"),
-                                status=fms_compliance_status.get("EvaluationResults")[
-                                    0
-                                ].get("ComplianceStatus"),
+                                status=compliance_status,
                             )
                         )
 
diff --git a/prowler/providers/aws/services/iam/iam_role_cross_service_confused_deputy_prevention/iam_role_cross_service_confused_deputy_prevention.py b/prowler/providers/aws/services/iam/iam_role_cross_service_confused_deputy_prevention/iam_role_cross_service_confused_deputy_prevention.py
index c2fa7b91873..3fd7739e258 100644
--- a/prowler/providers/aws/services/iam/iam_role_cross_service_confused_deputy_prevention/iam_role_cross_service_confused_deputy_prevention.py
+++ b/prowler/providers/aws/services/iam/iam_role_cross_service_confused_deputy_prevention/iam_role_cross_service_confused_deputy_prevention.py
@@ -1,6 +1,6 @@
 from prowler.lib.check.models import Check, Check_Report_AWS
 from prowler.providers.aws.lib.policy_condition_parser.policy_condition_parser import (
-    is_account_only_allowed_in_condition,
+    is_condition_block_restrictive,
 )
 from prowler.providers.aws.services.iam.iam_client import iam_client
 
@@ -30,7 +30,7 @@ def execute(self) -> Check_Report_AWS:
                         and "Service" in statement["Principal"]
                         # Check to see if the appropriate condition statements have been implemented
                         and "Condition" in statement
-                        and is_account_only_allowed_in_condition(
+                        and is_condition_block_restrictive(
                             statement["Condition"], iam_client.audited_account
                         )
                     ):
diff --git a/prowler/providers/aws/services/iam/iam_service.py b/prowler/providers/aws/services/iam/iam_service.py
index 21bf63ac289..3c378eef25f 100644
--- a/prowler/providers/aws/services/iam/iam_service.py
+++ b/prowler/providers/aws/services/iam/iam_service.py
@@ -453,12 +453,29 @@ def __list_inline_user_policies__(self):
                                     document=inline_user_policy_doc,
                                 )
                             )
-
+                        except ClientError as error:
+                            if error.response["Error"]["Code"] == "NoSuchEntity":
+                                logger.warning(
+                                    f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                                )
+                            else:
+                                logger.error(
+                                    f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                                )
                         except Exception as error:
                             logger.error(
                                 f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
                             )
                 user.inline_policies = inline_user_policies
+            except ClientError as error:
+                if error.response["Error"]["Code"] == "NoSuchEntity":
+                    logger.warning(
+                        f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                    )
+                else:
+                    logger.error(
+                        f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                    )
             except Exception as error:
                 logger.error(
                     f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
@@ -494,11 +511,30 @@ def __list_inline_group_policies__(self):
                                     document=inline_group_policy_doc,
                                 )
                             )
+                        except ClientError as error:
+                            if error.response["Error"]["Code"] == "NoSuchEntity":
+                                logger.warning(
+                                    f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                                )
+                            else:
+                                logger.error(
+                                    f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                                )
+
                         except Exception as error:
                             logger.error(
                                 f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
                             )
                 group.inline_policies = inline_group_policies
+            except ClientError as error:
+                if error.response["Error"]["Code"] == "NoSuchEntity":
+                    logger.warning(
+                        f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                    )
+                else:
+                    logger.error(
+                        f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                    )
 
             except Exception as error:
                 logger.error(
@@ -600,9 +636,9 @@ def __list_policies__(self, scope):
                                 entity=policy["PolicyId"],
                                 version_id=policy["DefaultVersionId"],
                                 type="Custom" if scope == "Local" else "AWS",
-                                attached=True
-                                if policy["AttachmentCount"] > 0
-                                else False,
+                                attached=(
+                                    True if policy["AttachmentCount"] > 0 else False
+                                ),
                             )
                         )
         except Exception as error:
@@ -831,9 +867,9 @@ def __get_user_temporary_credentials_usage__(self):
                     services_accessed > 0 and access_keys_number > 0
                 )
 
-                self.user_temporary_credentials_usage[
-                    user_data
-                ] = temporary_credentials_usage
+                self.user_temporary_credentials_usage[user_data] = (
+                    temporary_credentials_usage
+                )
 
         except Exception as error:
             logger.error(
diff --git a/prowler/providers/aws/services/inspector2/inspector2_active_findings_exist/__init__.py b/prowler/providers/aws/services/inspector2/inspector2_active_findings_exist/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/aws/services/inspector2/inspector2_findings_exist/inspector2_findings_exist.metadata.json b/prowler/providers/aws/services/inspector2/inspector2_active_findings_exist/inspector2_active_findings_exist.metadata.json
similarity index 85%
rename from prowler/providers/aws/services/inspector2/inspector2_findings_exist/inspector2_findings_exist.metadata.json
rename to prowler/providers/aws/services/inspector2/inspector2_active_findings_exist/inspector2_active_findings_exist.metadata.json
index b788370dc5b..cc50df3f93f 100644
--- a/prowler/providers/aws/services/inspector2/inspector2_findings_exist/inspector2_findings_exist.metadata.json
+++ b/prowler/providers/aws/services/inspector2/inspector2_active_findings_exist/inspector2_active_findings_exist.metadata.json
@@ -1,7 +1,10 @@
 {
   "Provider": "aws",
-  "CheckID": "inspector2_findings_exist",
+  "CheckID": "inspector2_active_findings_exist",
   "CheckTitle": "Check if Inspector2 findings exist",
+  "CheckAliases": [
+    "inspector2_findings_exist"
+  ],
   "CheckType": [],
   "ServiceName": "inspector2",
   "SubServiceName": "",
@@ -13,13 +16,13 @@
   "RelatedUrl": "https://docs.aws.amazon.com/inspector/latest/user/findings-understanding.html",
   "Remediation": {
     "Code": {
-      "CLI": "aws inspector2 enable",
+      "CLI": "",
       "NativeIaC": "",
       "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/aws/Inspector/amazon-inspector-findings.html",
       "Terraform": ""
     },
     "Recommendation": {
-      "Text": "Enable Inspector2",
+      "Text": "Review the active findings from Inspector2",
       "Url": "https://docs.aws.amazon.com/inspector/latest/user/what-is-inspector.html"
     }
   },
diff --git a/prowler/providers/aws/services/inspector2/inspector2_active_findings_exist/inspector2_active_findings_exist.py b/prowler/providers/aws/services/inspector2/inspector2_active_findings_exist/inspector2_active_findings_exist.py
new file mode 100644
index 00000000000..b398ab208ae
--- /dev/null
+++ b/prowler/providers/aws/services/inspector2/inspector2_active_findings_exist/inspector2_active_findings_exist.py
@@ -0,0 +1,33 @@
+from prowler.lib.check.models import Check, Check_Report_AWS
+from prowler.providers.aws.services.inspector2.inspector2_client import (
+    inspector2_client,
+)
+
+
+class inspector2_active_findings_exist(Check):
+    def execute(self):
+        findings = []
+        for inspector in inspector2_client.inspectors:
+            if inspector.status == "ENABLED":
+                report = Check_Report_AWS(self.metadata())
+                report.resource_id = inspector.id
+                report.resource_arn = inspector.arn
+                report.region = inspector.region
+                active_findings = 0
+                report.status = "PASS"
+                report.status_extended = "Inspector2 is enabled with no findings."
+                for finding in inspector.findings:
+                    if finding.status == "ACTIVE":
+                        active_findings += 1
+                if len(inspector.findings) > 0:
+                    report.status_extended = (
+                        "Inspector2 is enabled with no active findings."
+                    )
+                    if active_findings > 0:
+                        report.status = "FAIL"
+                        report.status_extended = (
+                            f"There are {active_findings} active Inspector2 findings."
+                        )
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/aws/services/inspector2/inspector2_is_enabled/__init__.py b/prowler/providers/aws/services/inspector2/inspector2_is_enabled/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/aws/services/inspector2/inspector2_is_enabled/inspector2_is_enabled.metadata.json b/prowler/providers/aws/services/inspector2/inspector2_is_enabled/inspector2_is_enabled.metadata.json
new file mode 100644
index 00000000000..ec548c3401c
--- /dev/null
+++ b/prowler/providers/aws/services/inspector2/inspector2_is_enabled/inspector2_is_enabled.metadata.json
@@ -0,0 +1,33 @@
+{
+  "Provider": "aws",
+  "CheckID": "inspector2_is_enabled",
+  "CheckTitle": "Check if Inspector2 is enabled",
+  "CheckAliases": [
+    "inspector2_findings_exist"
+  ],
+  "CheckType": [],
+  "ServiceName": "inspector2",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "arn:aws:inspector2:region:account-id/detector-id",
+  "Severity": "medium",
+  "ResourceType": "Other",
+  "Description": "Check if Inspector2 is enabled",
+  "Risk": "Without using AWS Inspector, you may not be aware of all the security vulnerabilities in your AWS resources, which could lead to unauthorized access, data breaches, or other security incidents.",
+  "RelatedUrl": "https://docs.aws.amazon.com/inspector/latest/user/findings-understanding.html",
+  "Remediation": {
+    "Code": {
+      "CLI": "aws inspector2 enable",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/aws/Inspector/amazon-inspector-findings.html",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "Enable Inspector2",
+      "Url": "https://docs.aws.amazon.com/inspector/latest/user/what-is-inspector.html"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": ""
+}
diff --git a/prowler/providers/aws/services/inspector2/inspector2_findings_exist/inspector2_findings_exist.py b/prowler/providers/aws/services/inspector2/inspector2_is_enabled/inspector2_is_enabled.py
similarity index 65%
rename from prowler/providers/aws/services/inspector2/inspector2_findings_exist/inspector2_findings_exist.py
rename to prowler/providers/aws/services/inspector2/inspector2_is_enabled/inspector2_is_enabled.py
index fad57d213cd..d183c175a1b 100644
--- a/prowler/providers/aws/services/inspector2/inspector2_findings_exist/inspector2_findings_exist.py
+++ b/prowler/providers/aws/services/inspector2/inspector2_is_enabled/inspector2_is_enabled.py
@@ -7,30 +7,17 @@
 )
 
 
-class inspector2_findings_exist(Check):
+class inspector2_is_enabled(Check):
     def execute(self):
         findings = []
         for inspector in inspector2_client.inspectors:
             report = Check_Report_AWS(self.metadata())
-            report.resource_id = inspector2_client.audited_account
-            report.resource_arn = inspector2_client.audited_account_arn
+            report.resource_id = inspector.id
+            report.resource_arn = inspector.arn
             report.region = inspector.region
             if inspector.status == "ENABLED":
-                active_findings = 0
                 report.status = "PASS"
-                report.status_extended = "Inspector2 is enabled with no findings."
-                for finding in inspector.findings:
-                    if finding.status == "ACTIVE":
-                        active_findings += 1
-                if len(inspector.findings) > 0:
-                    report.status_extended = (
-                        "Inspector2 is enabled with no active findings."
-                    )
-                    if active_findings > 0:
-                        report.status = "FAIL"
-                        report.status_extended = (
-                            f"There are {active_findings} ACTIVE Inspector2 findings."
-                        )
+                report.status_extended = "Inspector2 is enabled."
                 findings.append(report)
             else:
                 if inspector2_client.provider.ignore_unused_services:
diff --git a/prowler/providers/aws/services/inspector2/inspector2_service.py b/prowler/providers/aws/services/inspector2/inspector2_service.py
index d5b7ff4d0e2..d8d3485ac1d 100644
--- a/prowler/providers/aws/services/inspector2/inspector2_service.py
+++ b/prowler/providers/aws/services/inspector2/inspector2_service.py
@@ -23,7 +23,8 @@ def __batch_get_account_status__(self, regional_client):
             ][0]
             self.inspectors.append(
                 Inspector(
-                    id=self.audited_account,
+                    id="Inspector2",
+                    arn=f"arn:{self.audited_partition}:inspector2:{regional_client.region}:{self.audited_account}:inspector2",
                     status=batch_get_account_status.get("state").get("status"),
                     region=regional_client.region,
                 )
@@ -80,6 +81,7 @@ class InspectorFinding(BaseModel):
 
 class Inspector(BaseModel):
     id: str
+    arn: str
     region: str
     status: str
     findings: list[InspectorFinding] = []
diff --git a/prowler/providers/aws/services/organizations/organizations_scp_check_deny_regions/organizations_scp_check_deny_regions.py b/prowler/providers/aws/services/organizations/organizations_scp_check_deny_regions/organizations_scp_check_deny_regions.py
index 4062c42b61c..ab9eb8573e2 100644
--- a/prowler/providers/aws/services/organizations/organizations_scp_check_deny_regions/organizations_scp_check_deny_regions.py
+++ b/prowler/providers/aws/services/organizations/organizations_scp_check_deny_regions/organizations_scp_check_deny_regions.py
@@ -48,11 +48,12 @@ def execute(self):
                                 and "aws:RequestedRegion"
                                 in statement["Condition"]["StringNotEquals"]
                             ):
-                                if (
-                                    organizations_enabled_regions
-                                    == statement["Condition"]["StringNotEquals"][
+                                if all(
+                                    region
+                                    in statement["Condition"]["StringNotEquals"][
                                         "aws:RequestedRegion"
                                     ]
+                                    for region in organizations_enabled_regions
                                 ):
                                     # All defined regions are restricted, we exit here, no need to continue.
                                     report.status = "PASS"
@@ -73,11 +74,12 @@ def execute(self):
                                 and "aws:RequestedRegion"
                                 in statement["Condition"]["StringEquals"]
                             ):
-                                if (
-                                    organizations_enabled_regions
-                                    == statement["Condition"]["StringEquals"][
+                                if all(
+                                    region
+                                    in statement["Condition"]["StringEquals"][
                                         "aws:RequestedRegion"
                                     ]
+                                    for region in organizations_enabled_regions
                                 ):
                                     # All defined regions are restricted, we exit here, no need to continue.
                                     report.status = "PASS"
diff --git a/prowler/providers/aws/services/organizations/organizations_service.py b/prowler/providers/aws/services/organizations/organizations_service.py
index 472efff23e1..ea7ecf5e259 100644
--- a/prowler/providers/aws/services/organizations/organizations_service.py
+++ b/prowler/providers/aws/services/organizations/organizations_service.py
@@ -102,14 +102,13 @@ def __list_policies__(self):
                 )
                 for page in list_policies_paginator.paginate(Filter=policy_type):
                     for policy in page["Policies"]:
-                        policy_content = self.__describe_policy__(policy.get("Id"))
-                        policy_targets = self.__list_targets_for_policy__(
-                            policy.get("Id")
-                        )
+                        policy_id = policy.get("Id")
+                        policy_content = self.__describe_policy__(policy_id)
+                        policy_targets = self.__list_targets_for_policy__(policy_id)
                         self.policies.append(
                             Policy(
                                 arn=policy.get("Arn"),
-                                id=policy.get("Id"),
+                                id=policy_id,
                                 type=policy.get("Type"),
                                 aws_managed=policy.get("AwsManaged"),
                                 content=policy_content,
@@ -134,23 +133,29 @@ def __describe_policy__(self, policy_id):
 
         # This operation can be called only from the organization’s management account or by a member account that is a delegated administrator for an Amazon Web Services service.
         try:
-            policy_desc = self.client.describe_policy(PolicyId=policy_id)["Policy"]
-            policy_content = policy_desc["Content"]
-            policy_content_json = json.loads(policy_content)
+            policy_content = {}
+            if policy_id:
+                policy_content = (
+                    self.client.describe_policy(PolicyId=policy_id)
+                    .get("Policy", {})
+                    .get("Content", "")
+                )
         except Exception as error:
             logger.error(
                 f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
             )
         finally:
-            return policy_content_json
+            return json.loads(policy_content)
 
     def __list_targets_for_policy__(self, policy_id):
         logger.info("Organizations - List Targets for policy: %s ...", policy_id)
 
         try:
-            targets_for_policy = self.client.list_targets_for_policy(
-                PolicyId=policy_id
-            )["Targets"]
+            targets_for_policy = []
+            if policy_id:
+                targets_for_policy = self.client.list_targets_for_policy(
+                    PolicyId=policy_id
+                )["Targets"]
         except Exception as error:
             logger.error(
                 f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
diff --git a/prowler/providers/aws/services/rds/rds_instance_no_public_access/rds_instance_no_public_access.py b/prowler/providers/aws/services/rds/rds_instance_no_public_access/rds_instance_no_public_access.py
index a5e2cd297b1..8040302d804 100644
--- a/prowler/providers/aws/services/rds/rds_instance_no_public_access/rds_instance_no_public_access.py
+++ b/prowler/providers/aws/services/rds/rds_instance_no_public_access/rds_instance_no_public_access.py
@@ -1,4 +1,5 @@
 from prowler.lib.check.models import Check, Check_Report_AWS
+from prowler.providers.aws.services.ec2.ec2_client import ec2_client
 from prowler.providers.aws.services.rds.rds_client import rds_client
 
 
@@ -11,17 +12,23 @@ def execute(self):
             report.resource_id = db_instance.id
             report.resource_arn = db_instance.arn
             report.resource_tags = db_instance.tags
-            if not db_instance.public:
-                report.status = "PASS"
-                report.status_extended = (
-                    f"RDS Instance {db_instance.id} is not Publicly Accessible."
-                )
-            else:
-                report.status = "FAIL"
-                report.status_extended = (
-                    f"RDS Instance {db_instance.id} is set as Publicly Accessible."
-                )
-
+            report.status = "PASS"
+            report.status_extended = (
+                f"RDS Instance {db_instance.id} is not publicly accessible."
+            )
+            if db_instance.public:
+                # Check if any DB Instance Security Group is publicly open
+                if db_instance.security_groups:
+                    report.status = "PASS"
+                    report.status_extended = f"RDS Instance {db_instance.id} is public but filtered with security groups."
+                    for security_group in ec2_client.security_groups:
+                        if (
+                            security_group.id in db_instance.security_groups
+                            and security_group.public_ports
+                        ):
+                            report.status = "FAIL"
+                            report.status_extended = f"RDS Instance {db_instance.id} is set as publicly accessible."
+                            break
             findings.append(report)
 
         return findings
diff --git a/prowler/providers/aws/services/rds/rds_service.py b/prowler/providers/aws/services/rds/rds_service.py
index 1a5f88a6d74..e2ac030a65f 100644
--- a/prowler/providers/aws/services/rds/rds_service.py
+++ b/prowler/providers/aws/services/rds/rds_service.py
@@ -68,6 +68,11 @@ def __describe_db_instances__(self, regional_client):
                                         for item in instance["DBParameterGroups"]
                                     ],
                                     multi_az=instance["MultiAZ"],
+                                    security_groups=[
+                                        sg["VpcSecurityGroupId"]
+                                        for sg in instance["VpcSecurityGroups"]
+                                        if sg["Status"] == "active"
+                                    ],
                                     cluster_id=instance.get("DBClusterIdentifier"),
                                     cluster_arn=f"arn:{self.audited_partition}:rds:{regional_client.region}:{self.audited_account}:cluster:{instance.get('DBClusterIdentifier')}",
                                     region=regional_client.region,
@@ -232,7 +237,15 @@ def __describe_db_cluster_snapshot_attributes__(self, regional_client):
                     for att in response["DBClusterSnapshotAttributes"]:
                         if "all" in att["AttributeValues"]:
                             snapshot.public = True
-
+        except ClientError as error:
+            if error.response["Error"]["Code"] == "DBClusterSnapshotNotFoundFault":
+                logger.warning(
+                    f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
+            else:
+                logger.error(
+                    f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
         except Exception as error:
             logger.error(
                 f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
@@ -287,6 +300,7 @@ class DBInstance(BaseModel):
     multi_az: bool
     parameter_groups: list[str] = []
     parameters: list[dict] = []
+    security_groups: list[str] = []
     cluster_id: Optional[str]
     cluster_arn: Optional[str]
     region: str
diff --git a/prowler/providers/aws/services/route53/route53_service.py b/prowler/providers/aws/services/route53/route53_service.py
index c715a7b1375..8c0ad23281a 100644
--- a/prowler/providers/aws/services/route53/route53_service.py
+++ b/prowler/providers/aws/services/route53/route53_service.py
@@ -87,12 +87,12 @@ def __list_query_logging_configs__(self):
                 )
                 for page in list_query_logging_configs_paginator.paginate():
                     for logging_config in page["QueryLoggingConfigs"]:
-                        self.hosted_zones[
-                            hosted_zone.id
-                        ].logging_config = LoggingConfig(
-                            cloudwatch_log_group_arn=logging_config[
-                                "CloudWatchLogsLogGroupArn"
-                            ]
+                        self.hosted_zones[hosted_zone.id].logging_config = (
+                            LoggingConfig(
+                                cloudwatch_log_group_arn=logging_config[
+                                    "CloudWatchLogsLogGroupArn"
+                                ]
+                            )
                         )
 
         except Exception as error:
diff --git a/prowler/providers/aws/services/s3/s3_bucket_policy_public_write_access/s3_bucket_policy_public_write_access.py b/prowler/providers/aws/services/s3/s3_bucket_policy_public_write_access/s3_bucket_policy_public_write_access.py
index ca509904511..8828702290b 100644
--- a/prowler/providers/aws/services/s3/s3_bucket_policy_public_write_access/s3_bucket_policy_public_write_access.py
+++ b/prowler/providers/aws/services/s3/s3_bucket_policy_public_write_access/s3_bucket_policy_public_write_access.py
@@ -46,9 +46,24 @@ def execute(self):
                             and "*" in str(statement["Principal"])
                         )
                         and (
-                            "s3:PutObject" in statement["Action"]
-                            or "*" in statement["Action"]
-                            or "s3:*" in statement["Action"]
+                            (
+                                isinstance(statement["Action"], list)
+                                and (
+                                    "s3:PutObject" in statement["Action"]
+                                    or "*" in statement["Action"]
+                                    or "s3:*" in statement["Action"]
+                                    or "s3:Put*" in statement["Action"]
+                                )
+                            )
+                            or (
+                                isinstance(statement["Action"], str)
+                                and (
+                                    "s3:PutObject" == statement["Action"]
+                                    or "*" == statement["Action"]
+                                    or "s3:*" == statement["Action"]
+                                    or "s3:Put*" == statement["Action"]
+                                )
+                            )
                         )
                     ):
                         report.status = "FAIL"
diff --git a/prowler/providers/aws/services/s3/s3_service.py b/prowler/providers/aws/services/s3/s3_service.py
index f7578c990a9..dfcb0146796 100644
--- a/prowler/providers/aws/services/s3/s3_service.py
+++ b/prowler/providers/aws/services/s3/s3_service.py
@@ -28,6 +28,7 @@ def __init__(self, provider):
         self.__threading_call__(self.__get_bucket_tagging__)
 
     # In the S3 service we override the "__threading_call__" method because we spawn a process per bucket instead of per region
+    # TODO: Replace the above function with the service __threading_call__ using the buckets as the iterator
     def __threading_call__(self, call):
         threads = []
         for bucket in self.buckets:
@@ -101,6 +102,15 @@ def __get_bucket_versioning__(self, bucket):
             if "MFADelete" in bucket_versioning:
                 if "Enabled" == bucket_versioning["MFADelete"]:
                     bucket.mfa_delete = True
+        except ClientError as error:
+            if error.response["Error"]["Code"] == "NoSuchBucket":
+                logger.warning(
+                    f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
+            else:
+                logger.error(
+                    f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
         except Exception as error:
             if bucket.region:
                 logger.error(
@@ -153,6 +163,15 @@ def __get_bucket_logging__(self, bucket):
                 bucket.logging_target_bucket = bucket_logging["LoggingEnabled"][
                     "TargetBucket"
                 ]
+        except ClientError as error:
+            if error.response["Error"]["Code"] == "NoSuchBucket":
+                logger.warning(
+                    f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
+            else:
+                logger.error(
+                    f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
         except Exception as error:
             if regional_client:
                 logger.error(
@@ -224,6 +243,15 @@ def __get_bucket_acl__(self, bucket):
                     grantee.permission = grant["Permission"]
                 grantees.append(grantee)
             bucket.acl_grantees = grantees
+        except ClientError as error:
+            if error.response["Error"]["Code"] == "NoSuchBucket":
+                logger.warning(
+                    f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
+            else:
+                logger.error(
+                    f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
         except Exception as error:
             if regional_client:
                 logger.error(
@@ -241,18 +269,26 @@ def __get_bucket_policy__(self, bucket):
             bucket.policy = json.loads(
                 regional_client.get_bucket_policy(Bucket=bucket.name)["Policy"]
             )
-        except Exception as error:
-            if "NoSuchBucketPolicy" in str(error):
+        except ClientError as error:
+            if error.response["Error"]["Code"] == "NoSuchBucketPolicy":
                 bucket.policy = {}
+            elif error.response["Error"]["Code"] == "NoSuchBucket":
+                logger.warning(
+                    f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
             else:
-                if regional_client:
-                    logger.error(
-                        f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
-                    )
-                else:
-                    logger.error(
-                        f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
-                    )
+                logger.error(
+                    f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
+        except Exception as error:
+            if regional_client:
+                logger.error(
+                    f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
+            else:
+                logger.error(
+                    f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
 
     def __get_bucket_ownership_controls__(self, bucket):
         logger.info("S3 - Get buckets ownership controls...")
diff --git a/prowler/providers/aws/services/sns/sns_topics_not_publicly_accessible/sns_topics_not_publicly_accessible.py b/prowler/providers/aws/services/sns/sns_topics_not_publicly_accessible/sns_topics_not_publicly_accessible.py
index bec81d1ba51..91f2448212a 100644
--- a/prowler/providers/aws/services/sns/sns_topics_not_publicly_accessible/sns_topics_not_publicly_accessible.py
+++ b/prowler/providers/aws/services/sns/sns_topics_not_publicly_accessible/sns_topics_not_publicly_accessible.py
@@ -1,6 +1,6 @@
 from prowler.lib.check.models import Check, Check_Report_AWS
 from prowler.providers.aws.lib.policy_condition_parser.policy_condition_parser import (
-    is_account_only_allowed_in_condition,
+    is_condition_block_restrictive,
 )
 from prowler.providers.aws.services.sns.sns_client import sns_client
 
@@ -35,7 +35,7 @@ def execute(self):
                         ):
                             if (
                                 "Condition" in statement
-                                and is_account_only_allowed_in_condition(
+                                and is_condition_block_restrictive(
                                     statement["Condition"], sns_client.audited_account
                                 )
                             ):
diff --git a/prowler/providers/aws/services/sqs/sqs_queues_not_publicly_accessible/sqs_queues_not_publicly_accessible.py b/prowler/providers/aws/services/sqs/sqs_queues_not_publicly_accessible/sqs_queues_not_publicly_accessible.py
index f360b7bc482..9207d6c2daf 100644
--- a/prowler/providers/aws/services/sqs/sqs_queues_not_publicly_accessible/sqs_queues_not_publicly_accessible.py
+++ b/prowler/providers/aws/services/sqs/sqs_queues_not_publicly_accessible/sqs_queues_not_publicly_accessible.py
@@ -1,6 +1,6 @@
 from prowler.lib.check.models import Check, Check_Report_AWS
 from prowler.providers.aws.lib.policy_condition_parser.policy_condition_parser import (
-    is_account_only_allowed_in_condition,
+    is_condition_block_restrictive,
 )
 from prowler.providers.aws.services.sqs.sqs_client import sqs_client
 
@@ -32,8 +32,10 @@ def execute(self):
                             )
                         ):
                             if "Condition" in statement:
-                                if is_account_only_allowed_in_condition(
-                                    statement["Condition"], sqs_client.audited_account
+                                if is_condition_block_restrictive(
+                                    statement["Condition"],
+                                    sqs_client.audited_account,
+                                    True,
                                 ):
                                     report.status_extended = f"SQS queue {queue.id} is not public because its policy only allows access from the same account."
                                 else:
diff --git a/prowler/providers/aws/services/trustedadvisor/trustedadvisor_premium_support_plan_subscribed/trustedadvisor_premium_support_plan_subscribed.metadata.json b/prowler/providers/aws/services/trustedadvisor/trustedadvisor_premium_support_plan_subscribed/trustedadvisor_premium_support_plan_subscribed.metadata.json
index b4f7f21f337..c76338760bf 100644
--- a/prowler/providers/aws/services/trustedadvisor/trustedadvisor_premium_support_plan_subscribed/trustedadvisor_premium_support_plan_subscribed.metadata.json
+++ b/prowler/providers/aws/services/trustedadvisor/trustedadvisor_premium_support_plan_subscribed/trustedadvisor_premium_support_plan_subscribed.metadata.json
@@ -7,7 +7,7 @@
   "SubServiceName": "",
   "ResourceIdTemplate": "arn:aws:iam::AWS_ACCOUNT_NUMBER:root",
   "Severity": "low",
-  "ResourceType": "",
+  "ResourceType": "Other",
   "Description": "Check if a Premium support plan is subscribed.",
   "Risk": "Ensure that the appropriate support level is enabled for the necessary AWS accounts. For example, if an AWS account is being used to host production systems and environments, it is highly recommended that the minimum AWS Support Plan should be Business.",
   "RelatedUrl": "https://aws.amazon.com/premiumsupport/plans/",
diff --git a/prowler/providers/aws/services/trustedadvisor/trustedadvisor_service.py b/prowler/providers/aws/services/trustedadvisor/trustedadvisor_service.py
index a09acc3f0a5..61999e6cccb 100644
--- a/prowler/providers/aws/services/trustedadvisor/trustedadvisor_service.py
+++ b/prowler/providers/aws/services/trustedadvisor/trustedadvisor_service.py
@@ -34,9 +34,9 @@ def __init__(self, provider):
     def __describe_trusted_advisor_checks__(self):
         logger.info("TrustedAdvisor - Describing Checks...")
         try:
-            for check in self.client.describe_trusted_advisor_checks(language="en")[
-                "checks"
-            ]:
+            for check in self.client.describe_trusted_advisor_checks(language="en").get(
+                "checks", []
+            ):
                 self.checks.append(
                     Check(
                         id=check["id"],
diff --git a/prowler/providers/aws/services/vpc/vpc_different_regions/vpc_different_regions.py b/prowler/providers/aws/services/vpc/vpc_different_regions/vpc_different_regions.py
index 59c25dbf35d..ee7421a4275 100644
--- a/prowler/providers/aws/services/vpc/vpc_different_regions/vpc_different_regions.py
+++ b/prowler/providers/aws/services/vpc/vpc_different_regions/vpc_different_regions.py
@@ -5,22 +5,23 @@
 class vpc_different_regions(Check):
     def execute(self):
         findings = []
-        vpc_regions = set()
-        for vpc in vpc_client.vpcs.values():
-            if not vpc.default:
-                vpc_regions.add(vpc.region)
+        if len(vpc_client.vpcs) > 0:
+            vpc_regions = set()
+            for vpc in vpc_client.vpcs.values():
+                if not vpc.default:
+                    vpc_regions.add(vpc.region)
 
-        report = Check_Report_AWS(self.metadata())
-        # This is a global check under the vpc service: region, resource_id and tags are not relevant here but we keep them for consistency
-        report.region = vpc_client.region
-        report.resource_id = vpc_client.audited_account
-        report.resource_arn = vpc_client.audited_account_arn
-        report.status = "FAIL"
-        report.status_extended = "VPCs found only in one region."
-        if len(vpc_regions) > 1:
-            report.status = "PASS"
-            report.status_extended = "VPCs found in more than one region."
+            report = Check_Report_AWS(self.metadata())
+            report.region = vpc_client.region
+            report.resource_id = vpc_client.audited_account
+            report.resource_arn = vpc_client.audited_account_arn
 
-        findings.append(report)
+            report.status = "FAIL"
+            report.status_extended = "VPCs found only in one region."
+
+            if len(vpc_regions) > 1:
+                report.status = "PASS"
+                report.status_extended = "VPCs found in more than one region."
+            findings.append(report)
 
         return findings
diff --git a/prowler/providers/aws/services/vpc/vpc_endpoint_connections_trust_boundaries/vpc_endpoint_connections_trust_boundaries.py b/prowler/providers/aws/services/vpc/vpc_endpoint_connections_trust_boundaries/vpc_endpoint_connections_trust_boundaries.py
index 311a494280e..0884c2a5132 100644
--- a/prowler/providers/aws/services/vpc/vpc_endpoint_connections_trust_boundaries/vpc_endpoint_connections_trust_boundaries.py
+++ b/prowler/providers/aws/services/vpc/vpc_endpoint_connections_trust_boundaries/vpc_endpoint_connections_trust_boundaries.py
@@ -2,7 +2,7 @@
 
 from prowler.lib.check.models import Check, Check_Report_AWS
 from prowler.providers.aws.lib.policy_condition_parser.policy_condition_parser import (
-    is_account_only_allowed_in_condition,
+    is_condition_block_restrictive,
 )
 from prowler.providers.aws.services.vpc.vpc_client import vpc_client
 
@@ -35,7 +35,7 @@ def execute(self):
 
                         if "Condition" in statement:
                             for account_id in trusted_account_ids:
-                                if is_account_only_allowed_in_condition(
+                                if is_condition_block_restrictive(
                                     statement["Condition"], account_id
                                 ):
                                     access_from_trusted_accounts = True
@@ -70,7 +70,7 @@ def execute(self):
                                 access_from_trusted_accounts = False
                                 if "Condition" in statement:
                                     for account_id in trusted_account_ids:
-                                        if is_account_only_allowed_in_condition(
+                                        if is_condition_block_restrictive(
                                             statement["Condition"], account_id
                                         ):
                                             access_from_trusted_accounts = True
@@ -102,7 +102,7 @@ def execute(self):
 
                                 if "Condition" in statement:
                                     for account_id in trusted_account_ids:
-                                        if is_account_only_allowed_in_condition(
+                                        if is_condition_block_restrictive(
                                             statement["Condition"], account_id
                                         ):
                                             access_from_trusted_accounts = True
diff --git a/prowler/providers/aws/services/wellarchitected/wellarchitected_service.py b/prowler/providers/aws/services/wellarchitected/wellarchitected_service.py
index c4ad76950ad..b323a293b91 100644
--- a/prowler/providers/aws/services/wellarchitected/wellarchitected_service.py
+++ b/prowler/providers/aws/services/wellarchitected/wellarchitected_service.py
@@ -1,5 +1,6 @@
 from typing import Optional
 
+from botocore.client import ClientError
 from pydantic import BaseModel
 
 from prowler.lib.logger import logger
@@ -49,6 +50,15 @@ def __list_tags_for_resource__(self):
                     WorkloadArn=workload.arn
                 )["Tags"]
                 workload.tags = [response]
+        except ClientError as error:
+            if error.response["Error"]["Code"] == "BadRequestException":
+                logger.warning(
+                    f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
+            else:
+                logger.error(
+                    f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
         except Exception as error:
             logger.error(
                 f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
diff --git a/prowler/providers/aws/services/wellarchitected/wellarchitected_workload_no_high_or_medium_risks/wellarchitected_workload_no_high_or_medium_risks.py b/prowler/providers/aws/services/wellarchitected/wellarchitected_workload_no_high_or_medium_risks/wellarchitected_workload_no_high_or_medium_risks.py
index a0ebf431b4f..e59b8730eed 100644
--- a/prowler/providers/aws/services/wellarchitected/wellarchitected_workload_no_high_or_medium_risks/wellarchitected_workload_no_high_or_medium_risks.py
+++ b/prowler/providers/aws/services/wellarchitected/wellarchitected_workload_no_high_or_medium_risks/wellarchitected_workload_no_high_or_medium_risks.py
@@ -17,7 +17,7 @@ def execute(self):
             report.status_extended = f"Well Architected workload {workload.name} does not contain high or medium risks."
             if "HIGH" in workload.risks or "MEDIUM" in workload.risks:
                 report.status = "FAIL"
-                report.status_extended = f"Well Architected workload {workload.name} contains {workload.risks.get('HIGH',0)} high and {workload.risks.get('MEDIUM',0)} medium risks."
+                report.status_extended = f"Well Architected workload {workload.name} contains {workload.risks.get('HIGH' , 0)} high and {workload.risks.get('MEDIUM' , 0)} medium risks."
 
             findings.append(report)
         return findings
diff --git a/prowler/providers/azure/azure_provider.py b/prowler/providers/azure/azure_provider.py
index df698625a22..60fb8bf20ac 100644
--- a/prowler/providers/azure/azure_provider.py
+++ b/prowler/providers/azure/azure_provider.py
@@ -1,9 +1,11 @@
+import asyncio
 import sys
 from os import getenv
 
+import requests
 from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential
 from azure.mgmt.subscription import SubscriptionClient
-from msgraph.core import GraphClient
+from msgraph import GraphServiceClient
 
 from prowler.lib.logger import logger
 from prowler.providers.azure.lib.audit_info.models import AzureIdentityInfo
@@ -106,49 +108,52 @@ def __get_identity_info__(
         # With cli also should be possible but right now it does not work, azure python package issue is coming
         # At the time of writting this with az cli creds is not working, despite that is included
         if sp_env_auth or browser_auth or az_cli_auth:
-            # Trying to recover tenant domain info
-            try:
-                logger.info(
-                    "Trying to retrieve tenant domain from AAD to populate identity structure ..."
-                )
-                client = GraphClient(credential=credentials)
-                domain_result = client.get("/domains").json()
-                if "value" in domain_result:
-                    if "id" in domain_result["value"][0]:
-                        identity.domain = domain_result["value"][0]["id"]
-            except Exception as error:
-                logger.error(
-                    "Provided identity does not have permissions to access AAD to retrieve tenant domain"
-                )
-                logger.error(
-                    f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}] -- {error}"
-                )
-            # since that exception is not considered as critical, we keep filling another identity fields
-            if sp_env_auth:
-                # The id of the sp can be retrieved from environment variables
-                identity.identity_id = getenv("AZURE_CLIENT_ID")
-                identity.identity_type = "Service Principal"
-            # Same here, if user can access AAD, some fields are retrieved if not, default value, for az cli
-            # should work but it doesn't, pending issue
-            else:
-                identity.identity_id = "Unknown user id (Missing AAD permissions)"
-                identity.identity_type = "User"
+
+            async def get_azure_identity():
+                # Trying to recover tenant domain info
                 try:
                     logger.info(
-                        "Trying to retrieve user information from AAD to populate identity structure ..."
+                        "Trying to retrieve tenant domain from AAD to populate identity structure ..."
                     )
-                    client = GraphClient(credential=credentials)
-                    user_name = client.get("/me").json()
-                    if "userPrincipalName" in user_name:
-                        identity.identity_id = user_name
+                    client = GraphServiceClient(credentials=credentials)
+
+                    domain_result = await client.domains.get()
+                    if getattr(domain_result, "value"):
+                        if getattr(domain_result.value[0], "id"):
+                            identity.domain = domain_result.value[0].id
 
                 except Exception as error:
-                    logger.error(
-                        "Provided identity does not have permissions to access AAD to retrieve user's metadata"
-                    )
                     logger.error(
                         f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}] -- {error}"
                     )
+                # since that exception is not considered as critical, we keep filling another identity fields
+                if sp_env_auth:
+                    # The id of the sp can be retrieved from environment variables
+                    identity.identity_id = getenv("AZURE_CLIENT_ID")
+                    identity.identity_type = "Service Principal"
+                # Same here, if user can access AAD, some fields are retrieved if not, default value, for az cli
+                # should work but it doesn't, pending issue
+                else:
+                    identity.identity_id = "Unknown user id (Missing AAD permissions)"
+                    identity.identity_type = "User"
+                    try:
+                        logger.info(
+                            "Trying to retrieve user information from AAD to populate identity structure ..."
+                        )
+                        client = GraphServiceClient(credentials=credentials)
+
+                        me = await client.me.get()
+                        if me:
+                            if getattr(me, "user_principal_name"):
+                                identity.identity_id = me.user_principal_name
+
+                    except Exception as error:
+                        logger.error(
+                            f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}] -- {error}"
+                        )
+
+            asyncio.run(get_azure_identity())
+
         # Managed identities only can be assigned resource, resource group and subscription scope permissions
         elif managed_entity_auth:
             identity.identity_id = "Default Managed Identity ID"
@@ -209,3 +214,31 @@ def get_identity(self):
 
     def get_region_config(self):
         return self.region_config
+
+    def get_locations(self, credentials, region_config):
+        locations = None
+        if credentials and region_config:
+            subscriptions_client = SubscriptionClient(
+                credential=credentials,
+                base_url=region_config["base_url"],
+                credential_scopes=region_config["credential_scopes"],
+            )
+            list_subscriptions = subscriptions_client.subscriptions.list()
+            list_subscriptions_ids = [
+                subscription.subscription_id for subscription in list_subscriptions
+            ]
+            locations = {}
+            token = credentials.get_token("https://management.azure.com/.default").token
+            for subscription_id in list_subscriptions_ids:
+                locations.update({subscription_id: []})
+                url = f"https://management.azure.com/subscriptions/{subscription_id}/locations?api-version=2022-12-01"
+                headers = {
+                    "Authorization": f"Bearer {token}",
+                    "Content-Type": "application/json",
+                }
+                response = requests.get(url, headers=headers)
+                if response.status_code == 200:
+                    data = response.json()
+                    for location in data["value"]:
+                        locations[subscription_id].append(location["name"])
+        return locations
diff --git a/prowler/providers/azure/lib/arguments/arguments.py b/prowler/providers/azure/lib/arguments/arguments.py
index 30cf7a33d79..0be26292338 100644
--- a/prowler/providers/azure/lib/arguments/arguments.py
+++ b/prowler/providers/azure/lib/arguments/arguments.py
@@ -52,6 +52,17 @@ def init_parser(self):
         type=validate_azure_region,
         help="Azure region from `az cloud list --output table`, by default AzureCloud",
     )
+    # 3rd Party Integrations
+    azure_3rd_party_subparser = azure_parser.add_argument_group(
+        "3rd Party Integrations"
+    )
+    azure_3rd_party_subparser.add_argument(
+        "-N",
+        "--shodan",
+        nargs="?",
+        default=None,
+        help="Shodan API key used by check network_public_ip_shodan.",
+    )
 
 
 def validate_azure_region(region):
diff --git a/prowler/providers/azure/lib/audit_info/audit_info.py b/prowler/providers/azure/lib/audit_info/audit_info.py
index cb46d8a7b78..7f086d79844 100644
--- a/prowler/providers/azure/lib/audit_info/audit_info.py
+++ b/prowler/providers/azure/lib/audit_info/audit_info.py
@@ -11,4 +11,5 @@
     audit_metadata=None,
     audit_config=None,
     azure_region_config=AzureRegionConfig(),
+    locations=None,
 )
diff --git a/prowler/providers/azure/lib/audit_info/models.py b/prowler/providers/azure/lib/audit_info/models.py
index 2b1bb274e33..1ee60326fe2 100644
--- a/prowler/providers/azure/lib/audit_info/models.py
+++ b/prowler/providers/azure/lib/audit_info/models.py
@@ -28,6 +28,7 @@ class Azure_Audit_Info:
     audit_metadata: Optional[Any]
     audit_config: dict
     azure_region_config: AzureRegionConfig
+    locations: list[str]
 
     def __init__(
         self,
@@ -37,6 +38,7 @@ def __init__(
         audit_resources,
         audit_config,
         azure_region_config,
+        locations,
     ):
         self.credentials = credentials
         self.identity = identity
@@ -44,3 +46,4 @@ def __init__(
         self.audit_resources = audit_resources
         self.audit_config = audit_config
         self.azure_region_config = azure_region_config
+        self.locations = locations
diff --git a/prowler/providers/azure/lib/service/service.py b/prowler/providers/azure/lib/service/service.py
index 423df72694e..1dde43d75b7 100644
--- a/prowler/providers/azure/lib/service/service.py
+++ b/prowler/providers/azure/lib/service/service.py
@@ -16,6 +16,10 @@ def __init__(
         )
 
         self.subscriptions = provider.identity.subscriptions
+        # TODO: review locations
+        self.locations = provider.locations
+
+        self.audit_config = provider.audit_config
 
     def __set_clients__(self, subscriptions, session, service, region_config):
         clients = {}
diff --git a/prowler/providers/azure/services/app/__init__.py b/prowler/providers/azure/services/app/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/app/app_client.py b/prowler/providers/azure/services/app/app_client.py
new file mode 100644
index 00000000000..6b7627f9fc1
--- /dev/null
+++ b/prowler/providers/azure/services/app/app_client.py
@@ -0,0 +1,4 @@
+from prowler.providers.azure.lib.audit_info.audit_info import azure_audit_info
+from prowler.providers.azure.services.app.app_service import App
+
+app_client = App(azure_audit_info)
diff --git a/prowler/providers/azure/services/app/app_client_certificates_on/__init__.py b/prowler/providers/azure/services/app/app_client_certificates_on/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/app/app_client_certificates_on/app_client_certificates_on.metadata.json b/prowler/providers/azure/services/app/app_client_certificates_on/app_client_certificates_on.metadata.json
new file mode 100644
index 00000000000..bb1094db214
--- /dev/null
+++ b/prowler/providers/azure/services/app/app_client_certificates_on/app_client_certificates_on.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "app_client_certificates_on",
+  "CheckTitle": "Ensure the web app has 'Client Certificates (Incoming client certificates)' set to 'On'",
+  "CheckType": [],
+  "ServiceName": "app",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "Microsoft.Web/sites/config",
+  "Description": "Client certificates allow for the app to request a certificate for incoming requests. Only clients that have a valid certificate will be able to reach the app.",
+  "Risk": "The TLS mutual authentication technique in enterprise environments ensures the authenticity of clients to the server. If incoming client certificates are enabled, then only an authenticated client who has valid certificates can access the app.",
+  "RelatedUrl": "https://learn.microsoft.com/en-us/azure/app-service/app-service-web-configure-tls-mutual-auth?tabs=azurecli",
+  "Remediation": {
+    "Code": {
+      "CLI": "az webapp update --resource-group  --name  --set clientCertEnabled=true",
+      "NativeIaC": "",
+      "Other": "",
+      "Terraform": "https://docs.bridgecrew.io/docs/bc_azr_networking_7#terraform"
+    },
+    "Recommendation": {
+      "Text": "1. Login to Azure Portal using https://portal.azure.com 2. Go to App Services 3. Click on each App 4. Under the Settings section, Click on Configuration, then General settings 5. Set the option Client certificate mode located under Incoming client certificates to Require",
+      "Url": "https://learn.microsoft.com/en-us/security/benchmark/azure/security-controls-v3-identity-management#im-4-authenticate-server-and-services"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "Utilizing and maintaining client certificates will require additional work to obtain and manage replacement and key rotation."
+}
diff --git a/prowler/providers/azure/services/app/app_client_certificates_on/app_client_certificates_on.py b/prowler/providers/azure/services/app/app_client_certificates_on/app_client_certificates_on.py
new file mode 100644
index 00000000000..2ff66971a9d
--- /dev/null
+++ b/prowler/providers/azure/services/app/app_client_certificates_on/app_client_certificates_on.py
@@ -0,0 +1,27 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.app.app_client import app_client
+
+
+class app_client_certificates_on(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for (
+            subscription_name,
+            apps,
+        ) in app_client.apps.items():
+            for app_name, app in apps.items():
+                report = Check_Report_Azure(self.metadata())
+                report.status = "PASS"
+                report.subscription = subscription_name
+                report.resource_name = app_name
+                report.resource_id = app.resource_id
+                report.status_extended = f"Clients are required to present a certificate for app '{app_name}' in subscription '{subscription_name}'."
+
+                if app.client_cert_mode != "Required":
+                    report.status = "FAIL"
+                    report.status_extended = f"Clients are not required to present a certificate for app '{app_name}' in subscription '{subscription_name}'."
+
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/app/app_ensure_auth_is_set_up/__init__.py b/prowler/providers/azure/services/app/app_ensure_auth_is_set_up/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/app/app_ensure_auth_is_set_up/app_ensure_auth_is_set_up.metadata.json b/prowler/providers/azure/services/app/app_ensure_auth_is_set_up/app_ensure_auth_is_set_up.metadata.json
new file mode 100644
index 00000000000..65308f2f09a
--- /dev/null
+++ b/prowler/providers/azure/services/app/app_ensure_auth_is_set_up/app_ensure_auth_is_set_up.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "app_ensure_auth_is_set_up",
+  "CheckTitle": "Ensure App Service Authentication is set up for apps in Azure App Service",
+  "CheckType": [],
+  "ServiceName": "app",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "Microsoft.Web/sites",
+  "Description": "Azure App Service Authentication is a feature that can prevent anonymous HTTP requests from reaching a Web Application or authenticate those with tokens before they reach the app. If an anonymous request is received from a browser, App Service will redirect to a logon page. To handle the logon process, a choice from a set of identity providers can be made, or a custom authentication mechanism can be implemented.",
+  "Risk": "By Enabling App Service Authentication, every incoming HTTP request passes through it before being handled by the application code. It also handles authentication of users with the specified provider (Azure Active Directory, Facebook, Google, Microsoft Account, and Twitter), validation, storing and refreshing of tokens, managing the authenticated sessions and injecting identity information into request headers.",
+  "RelatedUrl": "https://learn.microsoft.com/en-us/azure/app-service/overview-authentication-authorization",
+  "Remediation": {
+    "Code": {
+      "CLI": "az webapp auth update --resource-group  --name  --enabled true",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/AppService/enable-app-service-authentication.html",
+      "Terraform": "https://docs.bridgecrew.io/docs/bc_azr_general_2#terraform"
+    },
+    "Recommendation": {
+      "Text": "1. Login to Azure Portal using https://portal.azure.com 2. Go to App Services 3. Click on each App 4. Under Setting section, click on Authentication 5. If no identity providers are set up, then click Add identity provider 6. Choose other parameters as per your requirements and click on Add",
+      "Url": "https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#website-contributor"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "This is only required for App Services which require authentication. Enabling on site like a marketing or support website will prevent unauthenticated access which would be undesirable. Adding Authentication requirement will increase cost of App Service and require additional security components to facilitate the authentication"
+}
diff --git a/prowler/providers/azure/services/app/app_ensure_auth_is_set_up/app_ensure_auth_is_set_up.py b/prowler/providers/azure/services/app/app_ensure_auth_is_set_up/app_ensure_auth_is_set_up.py
new file mode 100644
index 00000000000..1d8eb24328a
--- /dev/null
+++ b/prowler/providers/azure/services/app/app_ensure_auth_is_set_up/app_ensure_auth_is_set_up.py
@@ -0,0 +1,27 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.app.app_client import app_client
+
+
+class app_ensure_auth_is_set_up(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for (
+            subscription_name,
+            apps,
+        ) in app_client.apps.items():
+            for app_name, app in apps.items():
+                report = Check_Report_Azure(self.metadata())
+                report.status = "PASS"
+                report.subscription = subscription_name
+                report.resource_name = app_name
+                report.resource_id = app.resource_id
+                report.status_extended = f"Authentication is set up for app '{app_name}' in subscription '{subscription_name}'."
+
+                if not app.auth_enabled:
+                    report.status = "FAIL"
+                    report.status_extended = f"Authentication is not set up for app '{app_name}' in subscription '{subscription_name}'."
+
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/app/app_ensure_http_is_redirected_to_https/__init__.py b/prowler/providers/azure/services/app/app_ensure_http_is_redirected_to_https/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/app/app_ensure_http_is_redirected_to_https/app_ensure_http_is_redirected_to_https.metadata.json b/prowler/providers/azure/services/app/app_ensure_http_is_redirected_to_https/app_ensure_http_is_redirected_to_https.metadata.json
new file mode 100644
index 00000000000..24250f00459
--- /dev/null
+++ b/prowler/providers/azure/services/app/app_ensure_http_is_redirected_to_https/app_ensure_http_is_redirected_to_https.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "app_ensure_http_is_redirected_to_https",
+  "CheckTitle": "Ensure Web App Redirects All HTTP traffic to HTTPS in Azure App Service",
+  "CheckType": [],
+  "ServiceName": "app",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "Microsoft.Web/sites/config",
+  "Description": "Azure Web Apps allows sites to run under both HTTP and HTTPS by default. Web apps can be accessed by anyone using non-secure HTTP links by default. Non-secure HTTP requests can be restricted and all HTTP requests redirected to the secure HTTPS port. It is recommended to enforce HTTPS-only traffic.",
+  "Risk": "Enabling HTTPS-only traffic will redirect all non-secure HTTP requests to HTTPS ports. HTTPS uses the TLS/SSL protocol to provide a secure connection which is both encrypted and authenticated. It is therefore important to support HTTPS for the security benefits.",
+  "RelatedUrl": "https://learn.microsoft.com/en-us/azure/app-service/configure-ssl-bindings#enforce-https",
+  "Remediation": {
+    "Code": {
+      "CLI": "az webapp update --resource-group  --name  --set httpsOnly=true",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/AppService/enable-https-only-traffic.html#",
+      "Terraform": "https://docs.bridgecrew.io/docs/bc_azr_networking_5#terraform"
+    },
+    "Recommendation": {
+      "Text": "1. Login to Azure Portal using https://portal.azure.com 2. Go to App Services 3. Click on each App 4. Under Setting section, Click on Configuration 5. In the General Settings section, set the HTTPS Only to On 6. Click Save",
+      "Url": "https://learn.microsoft.com/en-us/security/benchmark/azure/security-controls-v3-data-protection#dp-3-encrypt-sensitive-data-in-transit"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "When it is enabled, every incoming HTTP request is redirected to the HTTPS port. This means an extra level of security will be added to the HTTP requests made to the app."
+}
diff --git a/prowler/providers/azure/services/app/app_ensure_http_is_redirected_to_https/app_ensure_http_is_redirected_to_https.py b/prowler/providers/azure/services/app/app_ensure_http_is_redirected_to_https/app_ensure_http_is_redirected_to_https.py
new file mode 100644
index 00000000000..ada2f7dbfe5
--- /dev/null
+++ b/prowler/providers/azure/services/app/app_ensure_http_is_redirected_to_https/app_ensure_http_is_redirected_to_https.py
@@ -0,0 +1,27 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.app.app_client import app_client
+
+
+class app_ensure_http_is_redirected_to_https(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for (
+            subscription_name,
+            apps,
+        ) in app_client.apps.items():
+            for app_name, app in apps.items():
+                report = Check_Report_Azure(self.metadata())
+                report.status = "PASS"
+                report.subscription = subscription_name
+                report.resource_name = app_name
+                report.resource_id = app.resource_id
+                report.status_extended = f"HTTP is redirected to HTTPS for app '{app_name}' in subscription '{subscription_name}'."
+
+                if not app.https_only:
+                    report.status = "FAIL"
+                    report.status_extended = f"HTTP is not redirected to HTTPS for app '{app_name}' in subscription '{subscription_name}'."
+
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/app/app_ensure_java_version_is_latest/__init__.py b/prowler/providers/azure/services/app/app_ensure_java_version_is_latest/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/app/app_ensure_java_version_is_latest/app_ensure_java_version_is_latest.metadata.json b/prowler/providers/azure/services/app/app_ensure_java_version_is_latest/app_ensure_java_version_is_latest.metadata.json
new file mode 100644
index 00000000000..da0990f1c21
--- /dev/null
+++ b/prowler/providers/azure/services/app/app_ensure_java_version_is_latest/app_ensure_java_version_is_latest.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "app_ensure_java_version_is_latest",
+  "CheckTitle": "Ensure that 'Java version' is the latest, if used to run the Web App",
+  "CheckType": [],
+  "ServiceName": "app",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "low",
+  "ResourceType": "Microsoft.Web/sites",
+  "Description": "Periodically, newer versions are released for Java software either due to security flaws or to include additional functionality. Using the latest Java version for web apps is recommended in order to take advantage of security fixes, if any, and/or new functionalities of the newer version.",
+  "Risk": "Newer versions may contain security enhancements and additional functionality. Using the latest software version is recommended in order to take advantage of enhancements and new capabilities. With each software installation, organizations need to determine if a given update meets their requirements. They must also verify the compatibility and support provided for any additional software against the update revision that is selected.",
+  "RelatedUrl": "https://learn.microsoft.com/en-us/azure/app-service/configure-common?tabs=portal#general-settings",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/AppService/latest-version-of-java.html",
+      "Terraform": "https://docs.bridgecrew.io/docs/ensure-that-java-version-is-the-latest-if-used-to-run-the-web-app#terraform"
+    },
+    "Recommendation": {
+      "Text": "1. Login to Azure Portal using https://portal.azure.com 2. Go to App Services 3. Click on each App 4. Under Settings section, click on Configuration 5. Click on the General settings pane and ensure that for a Stack of Java the Major Version and Minor Version reflect the latest stable and supported release, and that the Java web server version is set to the auto-update option. NOTE: No action is required if Java version is set to Off, as Java is not used by your web app.",
+      "Url": "https://learn.microsoft.com/en-us/azure/app-service/configure-language-java?pivots=platform-linux#choosing-a-java-runtime-version"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "If your app is written using version-dependent features or libraries, they may not be available on the latest version. If you wish to upgrade, research the impact thoroughly. Upgrading may have unforeseen consequences that could result in downtime."
+}
diff --git a/prowler/providers/azure/services/app/app_ensure_java_version_is_latest/app_ensure_java_version_is_latest.py b/prowler/providers/azure/services/app/app_ensure_java_version_is_latest/app_ensure_java_version_is_latest.py
new file mode 100644
index 00000000000..04919aff617
--- /dev/null
+++ b/prowler/providers/azure/services/app/app_ensure_java_version_is_latest/app_ensure_java_version_is_latest.py
@@ -0,0 +1,39 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.app.app_client import app_client
+
+
+class app_ensure_java_version_is_latest(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for (
+            subscription_name,
+            apps,
+        ) in app_client.apps.items():
+            for app_name, app in apps.items():
+                linux_framework = getattr(app.configurations, "linux_fx_version", "")
+                windows_framework_version = getattr(
+                    app.configurations, "java_version", None
+                )
+
+                if "java" in linux_framework.lower() or windows_framework_version:
+                    report = Check_Report_Azure(self.metadata())
+                    report.status = "FAIL"
+                    report.subscription = subscription_name
+                    report.resource_name = app_name
+                    report.resource_id = app.resource_id
+                    java_latest_version = app_client.audit_config.get(
+                        "java_latest_version", "17"
+                    )
+                    report.status_extended = f"Java version is set to '{f'java{windows_framework_version}' if windows_framework_version else linux_framework}', but should be set to 'java {java_latest_version}' for app '{app_name}' in subscription '{subscription_name}'."
+
+                    if (
+                        f"java{java_latest_version}" in linux_framework
+                        or java_latest_version == windows_framework_version
+                    ):
+                        report.status = "PASS"
+                        report.status_extended = f"Java version is set to 'java {java_latest_version}' for app '{app_name}' in subscription '{subscription_name}'."
+
+                    findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/app/app_ensure_php_version_is_latest/__init__.py b/prowler/providers/azure/services/app/app_ensure_php_version_is_latest/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/app/app_ensure_php_version_is_latest/app_ensure_php_version_is_latest.metadata.json b/prowler/providers/azure/services/app/app_ensure_php_version_is_latest/app_ensure_php_version_is_latest.metadata.json
new file mode 100644
index 00000000000..5b370e506d7
--- /dev/null
+++ b/prowler/providers/azure/services/app/app_ensure_php_version_is_latest/app_ensure_php_version_is_latest.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "app_ensure_php_version_is_latest",
+  "CheckTitle": "Ensure That 'PHP version' is the Latest, If Used to Run the Web App",
+  "CheckType": [],
+  "ServiceName": "app",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "low",
+  "ResourceType": "Microsoft.Web/sites",
+  "Description": "Periodically newer versions are released for PHP software either due to security flaws or to include additional functionality. Using the latest PHP version for web apps is recommended in order to take advantage of security fixes, if any, and/or additional functionalities of the newer version.",
+  "Risk": "Newer versions may contain security enhancements and additional functionality. Using the latest software version is recommended in order to take advantage of enhancements and new capabilities. With each software installation, organizations need to determine if a given update meets their requirements. They must also verify the compatibility and support provided for any additional software against the update revision that is selected.",
+  "RelatedUrl": "https://learn.microsoft.com/en-us/azure/app-service/configure-common?tabs=portal#general-settings",
+  "Remediation": {
+    "Code": {
+      "CLI": "az webapp config set --resource-group  --name  [--linux-fx-version ][--php-version ]",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/AppService/latest-version-of-php.html",
+      "Terraform": "https://docs.bridgecrew.io/docs/ensure-that-php-version-is-the-latest-if-used-to-run-the-web-app#terraform"
+    },
+    "Recommendation": {
+      "Text": "1. From Azure Home open the Portal Menu in the top left 2. Go to App Services 3. Click on each App 4. Under Settings section, click on Configuration 5. Click on the General settings pane, ensure that for a Stack of PHP the Major Version and Minor Version reflect the latest stable and supported release. NOTE: No action is required If PHP version is set to Off or is set with an empty value as PHP is not used by your web app",
+      "Url": "https://learn.microsoft.com/en-us/azure/app-service/configure-language-php?pivots=platform-linux#set-php-version"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "If your app is written using version-dependent features or libraries, they may not be available on the latest version. If you wish to upgrade, research the impact thoroughly. Upgrading may have unforeseen consequences that could result in downtime"
+}
diff --git a/prowler/providers/azure/services/app/app_ensure_php_version_is_latest/app_ensure_php_version_is_latest.py b/prowler/providers/azure/services/app/app_ensure_php_version_is_latest/app_ensure_php_version_is_latest.py
new file mode 100644
index 00000000000..5e9f4f4e57b
--- /dev/null
+++ b/prowler/providers/azure/services/app/app_ensure_php_version_is_latest/app_ensure_php_version_is_latest.py
@@ -0,0 +1,41 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.app.app_client import app_client
+
+
+class app_ensure_php_version_is_latest(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for (
+            subscription_name,
+            apps,
+        ) in app_client.apps.items():
+            for app_name, app in apps.items():
+                framework = getattr(app.configurations, "linux_fx_version", "")
+
+                if "php" in framework.lower() or getattr(
+                    app.configurations, "php_version", ""
+                ):
+                    report = Check_Report_Azure(self.metadata())
+                    report.status = "FAIL"
+                    report.subscription = subscription_name
+                    report.resource_name = app_name
+                    report.resource_id = app.resource_id
+
+                    php_latest_version = app_client.audit_config.get(
+                        "php_latest_version", "8.2"
+                    )
+
+                    report.status_extended = f"PHP version is set to '{framework}', the latest version that you could use is the '{php_latest_version}' version, for app '{app_name}' in subscription '{subscription_name}'."
+
+                    if (
+                        php_latest_version in framework
+                        or getattr(app.configurations, "php_version", None)
+                        == php_latest_version
+                    ):
+                        report.status = "PASS"
+                        report.status_extended = f"PHP version is set to '{php_latest_version}' for app '{app_name}' in subscription '{subscription_name}'."
+
+                    findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/app/app_ensure_python_version_is_latest/__init__.py b/prowler/providers/azure/services/app/app_ensure_python_version_is_latest/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/app/app_ensure_python_version_is_latest/app_ensure_python_version_is_latest.metadata.json b/prowler/providers/azure/services/app/app_ensure_python_version_is_latest/app_ensure_python_version_is_latest.metadata.json
new file mode 100644
index 00000000000..b7a7430ceb8
--- /dev/null
+++ b/prowler/providers/azure/services/app/app_ensure_python_version_is_latest/app_ensure_python_version_is_latest.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "app_ensure_python_version_is_latest",
+  "CheckTitle": "Ensure that 'Python version' is the Latest Stable Version, if Used to Run the Web App",
+  "CheckType": [],
+  "ServiceName": "app",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "low",
+  "ResourceType": "Microsoft.Web/sites",
+  "Description": "Periodically, newer versions are released for Python software either due to security flaws or to include additional functionality. Using the latest full Python version for web apps is recommended in order to take advantage of security fixes, if any, and/or additional functionalities of the newer version.",
+  "Risk": "Newer versions may contain security enhancements and additional functionality. Using the latest software version is recommended in order to take advantage of enhancements and new capabilities. With each software installation, organizations need to determine if a given update meets their requirements. They must also verify the compatibility and support provided for any additional software against the update revision that is selected. Using the latest full version will keep your stack secure to vulnerabilities and exploits.",
+  "RelatedUrl": "https://learn.microsoft.com/en-us/azure/app-service/configure-common?tabs=portal#general-settings",
+  "Remediation": {
+    "Code": {
+      "CLI": "az webapp config set --resource-group  --name  [--linux-fx-version 'PYTHON|3.12']",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/AppService/latest-version-of-python.html",
+      "Terraform": "https://docs.bridgecrew.io/docs/ensure-that-python-version-is-the-latest-if-used-to-run-the-web-app"
+    },
+    "Recommendation": {
+      "Text": "From Azure Portal 1. From Azure Home open the Portal Menu in the top left 2. Go to App Services 3. Click on each App 4. Under Settings section, click on Configuration 5. Click on the General settings pane and ensure that the Major Version and the Minor Version is set to the latest stable version available (Python 3.11, at the time of writing) NOTE: No action is required if Python version is set to Off, as Python is not used by your web app.",
+      "Url": "https://learn.microsoft.com/en-us/azure/app-service/configure-language-python#configure-python-version"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "If your app is written using version-dependent features or libraries, they may not be available on the latest version. If you wish to upgrade, research the impact thoroughly. Upgrading may have unforeseen consequences that could result in downtime."
+}
diff --git a/prowler/providers/azure/services/app/app_ensure_python_version_is_latest/app_ensure_python_version_is_latest.py b/prowler/providers/azure/services/app/app_ensure_python_version_is_latest/app_ensure_python_version_is_latest.py
new file mode 100644
index 00000000000..852a761b6ac
--- /dev/null
+++ b/prowler/providers/azure/services/app/app_ensure_python_version_is_latest/app_ensure_python_version_is_latest.py
@@ -0,0 +1,39 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.app.app_client import app_client
+
+
+class app_ensure_python_version_is_latest(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for (
+            subscription_name,
+            apps,
+        ) in app_client.apps.items():
+            for app_name, app in apps.items():
+                framework = getattr(app.configurations, "linux_fx_version", "")
+
+                if "python" in framework.lower() or getattr(
+                    app.configurations, "python_version", ""
+                ):
+                    report = Check_Report_Azure(self.metadata())
+                    report.status = "FAIL"
+                    report.subscription = subscription_name
+                    report.resource_name = app_name
+                    report.resource_id = app.resource_id
+                    python_latest_version = app_client.audit_config.get(
+                        "python_latest_version", "3.12"
+                    )
+                    report.status_extended = f"Python version is '{framework}', the latest version that you could use is the '{python_latest_version}' version, for app '{app_name}' in subscription '{subscription_name}'."
+
+                    if (
+                        python_latest_version in framework
+                        or getattr(app.configurations, "python_version", None)
+                        == python_latest_version
+                    ):
+                        report.status = "PASS"
+                        report.status_extended = f"Python version is set to '{python_latest_version}' for app '{app_name}' in subscription '{subscription_name}'."
+
+                    findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/app/app_ensure_using_http20/__init__.py b/prowler/providers/azure/services/app/app_ensure_using_http20/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/app/app_ensure_using_http20/app_ensure_using_http20.metadata.json b/prowler/providers/azure/services/app/app_ensure_using_http20/app_ensure_using_http20.metadata.json
new file mode 100644
index 00000000000..2289a3a5ad8
--- /dev/null
+++ b/prowler/providers/azure/services/app/app_ensure_using_http20/app_ensure_using_http20.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "app_ensure_using_http20",
+  "CheckTitle": "Ensure that 'HTTP Version' is the Latest, if Used to Run the Web App",
+  "CheckType": [],
+  "ServiceName": "app",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "low",
+  "ResourceType": "Microsoft.Web/sites",
+  "Description": "Periodically, newer versions are released for HTTP either due to security flaws or to include additional functionality. Using the latest HTTP version for web apps to take advantage of security fixes, if any, and/or new functionalities of the newer version.",
+  "Risk": "Newer versions may contain security enhancements and additional functionality. Using the latest version is recommended in order to take advantage of enhancements and new capabilities. With each software installation, organizations need to determine if a given update meets their requirements. They must also verify the compatibility and support provided for any additional software against the update revision that is selected. HTTP 2.0 has additional performance improvements on the head-of-line blocking problem of old HTTP version, header compression, and prioritization of requests. HTTP 2.0 no longer supports HTTP 1.1's chunked transfer encoding mechanism, as it provides its own, more efficient, mechanisms for data streaming.",
+  "RelatedUrl": "https://learn.microsoft.com/en-us/azure/app-service/configure-common?tabs=portal#general-settings",
+  "Remediation": {
+    "Code": {
+      "CLI": "az webapp config set --resource-group  --name  --http20-enabled true",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/AppService/enable-http-2-for-app-service-web-applications.html",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "1. Login to Azure Portal using https://portal.azure.com 2. Go to App Services 3. Click on each App 4. Under Setting section, Click on Configuration 5. Set HTTP version to 2.0 under General settings",
+      "Url": "https://azure.microsoft.com/en-us/blog/announcing-http-2-support-in-azure-app-service/"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "https://learn.microsoft.com/en-us/security/benchmark/azure/security-controls-v3-posture-vulnerability-management#pv-7-rapidly-and-automatically-remediate-software-vulnerabilities"
+}
diff --git a/prowler/providers/azure/services/app/app_ensure_using_http20/app_ensure_using_http20.py b/prowler/providers/azure/services/app/app_ensure_using_http20/app_ensure_using_http20.py
new file mode 100644
index 00000000000..7f6e7e8d406
--- /dev/null
+++ b/prowler/providers/azure/services/app/app_ensure_using_http20/app_ensure_using_http20.py
@@ -0,0 +1,29 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.app.app_client import app_client
+
+
+class app_ensure_using_http20(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for (
+            subscription_name,
+            apps,
+        ) in app_client.apps.items():
+            for app_name, app in apps.items():
+                report = Check_Report_Azure(self.metadata())
+                report.status = "FAIL"
+                report.subscription = subscription_name
+                report.resource_name = app_name
+                report.resource_id = app.resource_id
+                report.status_extended = f"HTTP/2.0 is not enabled for app '{app_name}' in subscription '{subscription_name}'."
+
+                if app.configurations and getattr(
+                    app.configurations, "http20_enabled", False
+                ):
+                    report.status = "PASS"
+                    report.status_extended = f"HTTP/2.0 is enabled for app '{app_name}' in subscription '{subscription_name}'."
+
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/app/app_ftp_deployment_disabled/__init__.py b/prowler/providers/azure/services/app/app_ftp_deployment_disabled/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/app/app_ftp_deployment_disabled/app_ftp_deployment_disabled.metadata.json b/prowler/providers/azure/services/app/app_ftp_deployment_disabled/app_ftp_deployment_disabled.metadata.json
new file mode 100644
index 00000000000..93c5a0c2d68
--- /dev/null
+++ b/prowler/providers/azure/services/app/app_ftp_deployment_disabled/app_ftp_deployment_disabled.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "app_ftp_deployment_disabled",
+  "CheckTitle": "Ensure FTP deployments are Disabled",
+  "CheckType": [],
+  "ServiceName": "app",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "Microsoft.Web/sites/config",
+  "Description": "By default, Azure Functions, Web, and API Services can be deployed over FTP. If FTP is required for an essential deployment workflow, FTPS should be required for FTP login for all App Service Apps and Functions.",
+  "Risk": "Azure FTP deployment endpoints are public. An attacker listening to traffic on a wifi network used by a remote employee or a corporate network could see login traffic in clear-text which would then grant them full control of the code base of the app or service. This finding is more severe if User Credentials for deployment are set at the subscription level rather than using the default Application Credentials which are unique per App.",
+  "RelatedUrl": "https://learn.microsoft.com/en-us/azure/app-service/deploy-ftp?tabs=portal",
+  "Remediation": {
+    "Code": {
+      "CLI": "az webapp config set --resource-group  --name  --ftps-state [disabled|FtpsOnly]",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/AppService/ftp-access-disabled.html",
+      "Terraform": "https://docs.bridgecrew.io/docs/ensure-ftp-deployments-are-disabled#terraform"
+    },
+    "Recommendation": {
+      "Text": "1. Go to the Azure Portal 2. Select App Services 3. Click on an app 4. Select Settings and then Configuration 5. Under General Settings, for the Platform Settings, the FTP state should be set to Disabled or FTPS Only",
+      "Url": ""
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "Any deployment workflows that rely on FTP or FTPs rather than the WebDeploy or HTTPs endpoints may be affected."
+}
diff --git a/prowler/providers/azure/services/app/app_ftp_deployment_disabled/app_ftp_deployment_disabled.py b/prowler/providers/azure/services/app/app_ftp_deployment_disabled/app_ftp_deployment_disabled.py
new file mode 100644
index 00000000000..ef5a3036ba0
--- /dev/null
+++ b/prowler/providers/azure/services/app/app_ftp_deployment_disabled/app_ftp_deployment_disabled.py
@@ -0,0 +1,31 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.app.app_client import app_client
+
+
+class app_ftp_deployment_disabled(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for (
+            subscription_name,
+            apps,
+        ) in app_client.apps.items():
+            for app_name, app in apps.items():
+                report = Check_Report_Azure(self.metadata())
+                report.status = "FAIL"
+                report.subscription = subscription_name
+                report.resource_name = app_name
+                report.resource_id = app.resource_id
+                report.status_extended = f"FTP is enabled for app '{app_name}' in subscription '{subscription_name}'."
+
+                if (
+                    app.configurations
+                    and getattr(app.configurations, "ftps_state", "AllAllowed")
+                    != "AllAllowed"
+                ):
+                    report.status = "PASS"
+                    report.status_extended = f"FTP is disabled for app '{app_name}' in subscription '{subscription_name}'."
+
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/app/app_minimum_tls_version_12/__init__.py b/prowler/providers/azure/services/app/app_minimum_tls_version_12/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/app/app_minimum_tls_version_12/app_minimum_tls_version_12.metadata.json b/prowler/providers/azure/services/app/app_minimum_tls_version_12/app_minimum_tls_version_12.metadata.json
new file mode 100644
index 00000000000..0e4f567905a
--- /dev/null
+++ b/prowler/providers/azure/services/app/app_minimum_tls_version_12/app_minimum_tls_version_12.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "app_minimum_tls_version_12",
+  "CheckTitle": "Ensure Web App is using the latest version of TLS encryption",
+  "CheckType": [],
+  "ServiceName": "app",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "high",
+  "ResourceType": "Microsoft.Web/sites/config",
+  "Description": "The TLS (Transport Layer Security) protocol secures transmission of data over the internet using standard encryption technology. Encryption should be set with the latest version of TLS. App service allows TLS 1.2 by default, which is the recommended TLS level by industry standards such as PCI DSS.",
+  "Risk": "App service currently allows the web app to set TLS versions 1.0, 1.1 and 1.2. It is highly recommended to use the latest TLS 1.2 version for web app secure connections.",
+  "RelatedUrl": "https://learn.microsoft.com/en-us/azure/app-service/configure-ssl-bindings#enforce-tls-versions",
+  "Remediation": {
+    "Code": {
+      "CLI": "az webapp config set --resource-group  --name  --min-tls-version 1.2",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/AppService/latest-version-of-tls-encryption-in-use.html",
+      "Terraform": "https://docs.bridgecrew.io/docs/bc_azr_networking_6#terraform"
+    },
+    "Recommendation": {
+      "Text": "1. Login to Azure Portal using https://portal.azure.com 2. Go to App Services 3. Click on each App 4. Under Setting section, Click on TLS/SSL settings 5. Under the Bindings pane, ensure that Minimum TLS Version set to 1.2 under Protocol Settings",
+      "Url": "https://docs.microsoft.com/en-us/security/benchmark/azure/security-controls-v3-data-protection#dp-3-encrypt-sensitive-data-in-transit"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "By default, TLS Version feature will be set to 1.2 when a new app is created using the command-line tool or Azure Portal console."
+}
diff --git a/prowler/providers/azure/services/app/app_minimum_tls_version_12/app_minimum_tls_version_12.py b/prowler/providers/azure/services/app/app_minimum_tls_version_12/app_minimum_tls_version_12.py
new file mode 100644
index 00000000000..f83187d27bd
--- /dev/null
+++ b/prowler/providers/azure/services/app/app_minimum_tls_version_12/app_minimum_tls_version_12.py
@@ -0,0 +1,30 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.app.app_client import app_client
+
+
+class app_minimum_tls_version_12(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for (
+            subscription_name,
+            apps,
+        ) in app_client.apps.items():
+            for app_name, app in apps.items():
+                report = Check_Report_Azure(self.metadata())
+                report.status = "FAIL"
+                report.subscription = subscription_name
+                report.resource_name = app_name
+                report.resource_id = app.resource_id
+                report.status_extended = f"Minimum TLS version is not set to 1.2 for app '{app_name}' in subscription '{subscription_name}'."
+
+                if (
+                    app.configurations
+                    and getattr(app.configurations, "min_tls_version", "") == "1.2"
+                ):
+                    report.status = "PASS"
+                    report.status_extended = f"Minimum TLS version is set to 1.2 for app '{app_name}' in subscription '{subscription_name}'."
+
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/app/app_register_with_identity/__init__.py b/prowler/providers/azure/services/app/app_register_with_identity/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/app/app_register_with_identity/app_register_with_identity.metadata.json b/prowler/providers/azure/services/app/app_register_with_identity/app_register_with_identity.metadata.json
new file mode 100644
index 00000000000..5f367634871
--- /dev/null
+++ b/prowler/providers/azure/services/app/app_register_with_identity/app_register_with_identity.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "app_register_with_identity",
+  "CheckTitle": "Ensure that Register with Azure Active Directory is enabled on App Service",
+  "CheckType": [],
+  "ServiceName": "app",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "Microsoft.Web/sites",
+  "Description": "Managed service identity in App Service provides more security by eliminating secrets from the app, such as credentials in the connection strings. When registering with Azure Active Directory in App Service, the app will connect to other Azure services securely without the need for usernames and passwords.",
+  "Risk": "App Service provides a highly scalable, self-patching web hosting service in Azure. It also provides a managed identity for apps, which is a turn-key solution for securing access to Azure SQL Database and other Azure services.",
+  "RelatedUrl": "https://learn.microsoft.com/en-us/azure/app-service/configure-authentication-provider-aad?tabs=workforce-tenant",
+  "Remediation": {
+    "Code": {
+      "CLI": "az webapp identity assign --resource-group  --name ",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/AppService/enable-registration-with-microsoft-entra-id.html",
+      "Terraform": "https://docs.bridgecrew.io/docs/bc_azr_iam_1#terraform"
+    },
+    "Recommendation": {
+      "Text": "1. Login to Azure Portal using https://portal.azure.com 2. Go to App Services 3. Click on each App 4. Under Setting section, Click on Identity 5. Under the System assigned pane, set Status to On",
+      "Url": "https://learn.microsoft.com/en-us/azure/app-service/scenario-secure-app-authentication-app-service"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "By default, Managed service identity via Azure AD is disabled."
+}
diff --git a/prowler/providers/azure/services/app/app_register_with_identity/app_register_with_identity.py b/prowler/providers/azure/services/app/app_register_with_identity/app_register_with_identity.py
new file mode 100644
index 00000000000..fa5fda09e97
--- /dev/null
+++ b/prowler/providers/azure/services/app/app_register_with_identity/app_register_with_identity.py
@@ -0,0 +1,27 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.app.app_client import app_client
+
+
+class app_register_with_identity(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for (
+            subscription_name,
+            apps,
+        ) in app_client.apps.items():
+            for app_name, app in apps.items():
+                report = Check_Report_Azure(self.metadata())
+                report.status = "PASS"
+                report.subscription = subscription_name
+                report.resource_name = app_name
+                report.resource_id = app.resource_id
+                report.status_extended = f"App '{app_name}' in subscription '{subscription_name}' has an identity configured."
+
+                if not app.identity:
+                    report.status = "FAIL"
+                    report.status_extended = f"App '{app_name}' in subscription '{subscription_name}' does not have an identity configured."
+
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/app/app_service.py b/prowler/providers/azure/services/app/app_service.py
new file mode 100644
index 00000000000..b11d906bff1
--- /dev/null
+++ b/prowler/providers/azure/services/app/app_service.py
@@ -0,0 +1,89 @@
+from dataclasses import dataclass
+
+from azure.mgmt.web import WebSiteManagementClient
+from azure.mgmt.web.models import ManagedServiceIdentity, SiteConfigResource
+
+from prowler.lib.logger import logger
+from prowler.providers.azure.lib.audit_info.models import Azure_Audit_Info
+from prowler.providers.azure.lib.service.service import AzureService
+
+
+########################## App
+class App(AzureService):
+    def __init__(self, audit_info: Azure_Audit_Info):
+        super().__init__(WebSiteManagementClient, audit_info)
+        self.apps = self.__get_apps__()
+
+    def __get_apps__(self):
+        logger.info("App - Getting apps...")
+        apps = {}
+
+        for subscription_name, client in self.clients.items():
+            try:
+                apps_list = client.web_apps.list()
+                apps.update({subscription_name: {}})
+
+                for app in apps_list:
+                    platform_auth = getattr(
+                        client.web_apps.get_auth_settings_v2(
+                            resource_group_name=app.resource_group, name=app.name
+                        ),
+                        "platform",
+                        None,
+                    )
+
+                    apps[subscription_name].update(
+                        {
+                            app.name: WebApp(
+                                resource_id=app.id,
+                                auth_enabled=(
+                                    getattr(platform_auth, "enabled", False)
+                                    if platform_auth
+                                    else False
+                                ),
+                                configurations=client.web_apps.get_configuration(
+                                    resource_group_name=app.resource_group,
+                                    name=app.name,
+                                ),
+                                client_cert_mode=self.__get_client_cert_mode__(
+                                    getattr(app, "client_cert_enabled", False),
+                                    getattr(app, "client_cert_mode", "Ignore"),
+                                ),
+                                https_only=getattr(app, "https_only", False),
+                                identity=getattr(app, "identity", None),
+                            )
+                        }
+                    )
+            except Exception as error:
+                logger.error(
+                    f"Subscription name: {subscription_name} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
+
+        return apps
+
+    def __get_client_cert_mode__(
+        self, client_cert_enabled: bool, client_cert_mode: str
+    ):
+        cert_mode = "Ignore"
+        if not client_cert_enabled and client_cert_mode == "OptionalInteractiveUser":
+            cert_mode = "Ignore"
+        elif client_cert_enabled and client_cert_mode == "OptionalInteractiveUser":
+            cert_mode = "Optional"
+        elif client_cert_enabled and client_cert_mode == "Optional":
+            cert_mode = "Allow"
+        elif client_cert_enabled and client_cert_mode == "Required":
+            cert_mode = "Required"
+        else:
+            cert_mode = "Ignore"
+
+        return cert_mode
+
+
+@dataclass
+class WebApp:
+    resource_id: str
+    configurations: SiteConfigResource
+    identity: ManagedServiceIdentity
+    client_cert_mode: str = "Ignore"
+    auth_enabled: bool = False
+    https_only: bool = False
diff --git a/prowler/providers/azure/services/appinsights/__init__.py b/prowler/providers/azure/services/appinsights/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/appinsights/appinsights_client.py b/prowler/providers/azure/services/appinsights/appinsights_client.py
new file mode 100644
index 00000000000..ed3cc15d438
--- /dev/null
+++ b/prowler/providers/azure/services/appinsights/appinsights_client.py
@@ -0,0 +1,4 @@
+from prowler.providers.azure.lib.audit_info.audit_info import azure_audit_info
+from prowler.providers.azure.services.appinsights.appinsights_service import AppInsights
+
+appinsights_client = AppInsights(azure_audit_info)
diff --git a/prowler/providers/azure/services/appinsights/appinsights_ensure_is_configured/__init__.py b/prowler/providers/azure/services/appinsights/appinsights_ensure_is_configured/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/appinsights/appinsights_ensure_is_configured/appinsights_ensure_is_configured.metadata.json b/prowler/providers/azure/services/appinsights/appinsights_ensure_is_configured/appinsights_ensure_is_configured.metadata.json
new file mode 100644
index 00000000000..badc97a65a7
--- /dev/null
+++ b/prowler/providers/azure/services/appinsights/appinsights_ensure_is_configured/appinsights_ensure_is_configured.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "appinsights_ensure_is_configured",
+  "CheckTitle": "Ensure Application Insights are Configured.",
+  "CheckType": [],
+  "ServiceName": "appinsights",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "low",
+  "ResourceType": "Microsoft.Insights/components",
+  "Description": "Application Insights within Azure act as an Application Performance Monitoring solution providing valuable data into how well an application performs and additional information when performing incident response. The types of log data collected include application metrics, telemetry data, and application trace logging data providing organizations with detailed information about application activity and application transactions. Both data sets help organizations adopt a proactive and retroactive means to handle security and performance related metrics within their modern applications.",
+  "Risk": "Configuring Application Insights provides additional data not found elsewhere within Azure as part of a much larger logging and monitoring program within an organization's Information Security practice. The types and contents of these logs will act as both a potential cost saving measure (application performance) and a means to potentially confirm the source of a potential incident (trace logging). Metrics and Telemetry data provide organizations with a proactive approach to cost savings by monitoring an application's performance, while the trace logging data provides necessary details in a reactive incident response scenario by helping organizations identify the potential source of an incident within their application.",
+  "RelatedUrl": "https://learn.microsoft.com/en-us/azure/azure-monitor/app/app-insights-overview",
+  "Remediation": {
+    "Code": {
+      "CLI": "az monitor app-insights component create --app  --resource-group  --location  --kind 'web' --retention-time  --workspace  -- subscription ",
+      "NativeIaC": "",
+      "Other": "https://www.tenable.com/audits/items/CIS_Microsoft_Azure_Foundations_v2.0.0_L2.audit:8a7a608d180042689ad9d3f16aa359f1",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "1. Navigate to Application Insights 2. Under the Basics tab within the PROJECT DETAILS section, select the Subscription 3. Select the Resource group 4. Within the INSTANCE DETAILS, enter a Name 5. Select a Region 6. Next to Resource Mode, select Workspace-based 7. Within the WORKSPACE DETAILS, select the Subscription for the log analytics workspace 8. Select the appropriate Log Analytics Workspace 9. Click Next:Tags > 10. Enter the appropriate Tags as Name, Value pairs. 11. Click Next:Review+Create 12. Click Create.",
+      "Url": ""
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "Because Application Insights relies on a Log Analytics Workspace, an organization will incur additional expenses when using this service."
+}
diff --git a/prowler/providers/azure/services/appinsights/appinsights_ensure_is_configured/appinsights_ensure_is_configured.py b/prowler/providers/azure/services/appinsights/appinsights_ensure_is_configured/appinsights_ensure_is_configured.py
new file mode 100644
index 00000000000..10b6ca0c9c1
--- /dev/null
+++ b/prowler/providers/azure/services/appinsights/appinsights_ensure_is_configured/appinsights_ensure_is_configured.py
@@ -0,0 +1,25 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.appinsights.appinsights_client import (
+    appinsights_client,
+)
+
+
+class appinsights_ensure_is_configured(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for subscription_name, components in appinsights_client.components.items():
+            report = Check_Report_Azure(self.metadata())
+            report.status = "PASS"
+            report.subscription = subscription_name
+            report.resource_name = "AppInsights"
+            report.resource_id = "AppInsights"
+            report.status_extended = f"There is at least one AppInsight configured in susbscription {subscription_name}."
+
+            if len(components) < 1:
+                report.status = "FAIL"
+                report.status_extended = f"There are no AppInsight configured in susbscription {subscription_name}."
+
+            findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/appinsights/appinsights_service.py b/prowler/providers/azure/services/appinsights/appinsights_service.py
new file mode 100644
index 00000000000..dc3140b0b65
--- /dev/null
+++ b/prowler/providers/azure/services/appinsights/appinsights_service.py
@@ -0,0 +1,44 @@
+from dataclasses import dataclass
+
+from azure.mgmt.applicationinsights import ApplicationInsightsManagementClient
+
+from prowler.lib.logger import logger
+from prowler.providers.azure.lib.audit_info.models import Azure_Audit_Info
+from prowler.providers.azure.lib.service.service import AzureService
+
+
+########################## AppInsights
+class AppInsights(AzureService):
+    def __init__(self, audit_info: Azure_Audit_Info):
+        super().__init__(ApplicationInsightsManagementClient, audit_info)
+        self.components = self.__get_components__()
+
+    def __get_components__(self):
+        logger.info("AppInsights - Getting components...")
+        components = {}
+
+        for subscription_name, client in self.clients.items():
+            try:
+                components_list = client.components.list()
+                components.update({subscription_name: {}})
+
+                for component in components_list:
+                    components[subscription_name].update(
+                        {
+                            component.app_id: Component(
+                                resource_id=component.id, resource_name=component.name
+                            )
+                        }
+                    )
+            except Exception as error:
+                logger.error(
+                    f"Subscription name: {subscription_name} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
+
+        return components
+
+
+@dataclass
+class Component:
+    resource_id: str
+    resource_name: str
diff --git a/prowler/providers/azure/services/cosmosdb/__init__.py b/prowler/providers/azure/services/cosmosdb/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/cosmosdb/cosmosdb_account_firewall_use_selected_networks/__init__.py b/prowler/providers/azure/services/cosmosdb/cosmosdb_account_firewall_use_selected_networks/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/cosmosdb/cosmosdb_account_firewall_use_selected_networks/cosmosdb_account_firewall_use_selected_networks.metadata.json b/prowler/providers/azure/services/cosmosdb/cosmosdb_account_firewall_use_selected_networks/cosmosdb_account_firewall_use_selected_networks.metadata.json
new file mode 100644
index 00000000000..57298ea92dc
--- /dev/null
+++ b/prowler/providers/azure/services/cosmosdb/cosmosdb_account_firewall_use_selected_networks/cosmosdb_account_firewall_use_selected_networks.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "cosmosdb_account_firewall_use_selected_networks",
+  "CheckTitle": "Ensure That 'Firewalls & Networks' Is Limited to Use Selected Networks Instead of All Networks",
+  "CheckType": [],
+  "ServiceName": "cosmosdb",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "CosmosDB",
+  "Description": "Limiting your Cosmos DB to only communicate on whitelisted networks lowers its attack footprint.",
+  "Risk": "Selecting certain networks for your Cosmos DB to communicate restricts the number of networks including the internet that can interact with what is stored within the database.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/azure/cosmos-db/how-to-configure-private-endpoints",
+  "Remediation": {
+    "Code": {
+      "CLI": "az cosmosdb database list / az cosmosdb show  **isVirtualNetworkFilterEnabled should be set to true**",
+      "NativeIaC": "",
+      "Other": "",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "1. Open the portal menu. 2. Select the Azure Cosmos DB blade. 3. Select a Cosmos DB account to audit. 4. Select Networking. 5. Under Public network access, select Selected networks. 6. Under Virtual networks, select + Add existing virtual network or + Add a new virtual network. 7. For existing networks, select subscription, virtual network, subnet and click Add. For new networks, provide a name, update the default values if required, and click Create. 8. Click Save.",
+      "Url": "https://learn.microsoft.com/en-us/azure/storage/common/storage-network-security?tabs=azure-portal"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "Failure to whitelist the correct networks will result in a connection loss."
+}
diff --git a/prowler/providers/azure/services/cosmosdb/cosmosdb_account_firewall_use_selected_networks/cosmosdb_account_firewall_use_selected_networks.py b/prowler/providers/azure/services/cosmosdb/cosmosdb_account_firewall_use_selected_networks/cosmosdb_account_firewall_use_selected_networks.py
new file mode 100644
index 00000000000..ed7d5a42209
--- /dev/null
+++ b/prowler/providers/azure/services/cosmosdb/cosmosdb_account_firewall_use_selected_networks/cosmosdb_account_firewall_use_selected_networks.py
@@ -0,0 +1,21 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.cosmosdb.cosmosdb_client import cosmosdb_client
+
+
+class cosmosdb_account_firewall_use_selected_networks(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for subscription, accounts in cosmosdb_client.accounts.items():
+            for account in accounts:
+                report = Check_Report_Azure(self.metadata())
+                report.subscription = subscription
+                report.resource_name = account.name
+                report.resource_id = account.id
+                report.status = "FAIL"
+                report.status_extended = f"CosmosDB account {account.name} from subscription {subscription} has firewall rules that allow access from all networks."
+                if account.is_virtual_network_filter_enabled:
+                    report.status = "PASS"
+                    report.status_extended = f"CosmosDB account {account.name} from subscription {subscription} has firewall rules that allow access only from selected networks."
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/cosmosdb/cosmosdb_account_use_aad_and_rbac/cosmosdb_account_use_aad_and_rbac.metadata.json b/prowler/providers/azure/services/cosmosdb/cosmosdb_account_use_aad_and_rbac/cosmosdb_account_use_aad_and_rbac.metadata.json
new file mode 100644
index 00000000000..a81188f8dcc
--- /dev/null
+++ b/prowler/providers/azure/services/cosmosdb/cosmosdb_account_use_aad_and_rbac/cosmosdb_account_use_aad_and_rbac.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "cosmosdb_account_use_aad_and_rbac",
+  "CheckTitle": "Use Azure Active Directory (AAD) Client Authentication and Azure RBAC where possible.",
+  "CheckType": [],
+  "ServiceName": "cosmosdb",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "CosmosDB",
+  "Description": "Cosmos DB can use tokens or AAD for client authentication which in turn will use Azure RBAC for authorization. Using AAD is significantly more secure because AAD handles the credentials and allows for MFA and centralized management, and the Azure RBAC better integrated with the rest of Azure.",
+  "Risk": "AAD client authentication is considerably more secure than token-based authentication because the tokens must be persistent at the client. AAD does not require this.",
+  "RelatedUrl": "https://learn.microsoft.com/en-us/azure/cosmos-db/role-based-access-control",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "Map all the resources that currently access to the Azure Cosmos DB account with keys or access tokens. Create an Azure Active Directory (AAD) identity for each of these resources: For Azure resources, you can create a managed identity . You may choose between system-assigned and user-assigned managed identities. For non-Azure resources, create an AAD identity. Grant each AAD identity the minimum permission it requires. When possible, we recommend you use one of the 2 built-in role definitions: Cosmos DB Built-in Data Reader or Cosmos DB Built-in Data Contributor. Validate that the new resource is functioning correctly. After new permissions are granted to identities, it may take a few hours until they propagate. When all resources are working correctly with the new identities, continue to the next step. You can use the az resource update powershell command: $cosmosdbname = 'cosmos-db-account-name' $resourcegroup = 'resource-group-name' $cosmosdb = az cosmosdb show --name $cosmosdbname --resource-group $resourcegroup | ConvertFrom-Json az resource update --ids $cosmosdb.id --set properties.disableLocalAuth=true --latest- include-preview",
+      "Url": "https://learn.microsoft.com/en-us/azure/cosmos-db/role-based-access-control"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": ""
+}
diff --git a/prowler/providers/azure/services/cosmosdb/cosmosdb_account_use_aad_and_rbac/cosmosdb_account_use_aad_and_rbac.py b/prowler/providers/azure/services/cosmosdb/cosmosdb_account_use_aad_and_rbac/cosmosdb_account_use_aad_and_rbac.py
new file mode 100644
index 00000000000..954cb5672dc
--- /dev/null
+++ b/prowler/providers/azure/services/cosmosdb/cosmosdb_account_use_aad_and_rbac/cosmosdb_account_use_aad_and_rbac.py
@@ -0,0 +1,21 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.cosmosdb.cosmosdb_client import cosmosdb_client
+
+
+class cosmosdb_account_use_aad_and_rbac(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for subscription, accounts in cosmosdb_client.accounts.items():
+            for account in accounts:
+                report = Check_Report_Azure(self.metadata())
+                report.subscription = subscription
+                report.resource_name = account.name
+                report.resource_id = account.id
+                report.status = "FAIL"
+                report.status_extended = f"CosmosDB account {account.name} from subscription {subscription} is not using AAD and RBAC"
+                if account.disable_local_auth:
+                    report.status = "PASS"
+                    report.status_extended = f"CosmosDB account {account.name} from subscription {subscription} is using AAD and RBAC"
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/cosmosdb/cosmosdb_account_use_private_endpoints/__init__.py b/prowler/providers/azure/services/cosmosdb/cosmosdb_account_use_private_endpoints/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/cosmosdb/cosmosdb_account_use_private_endpoints/cosmosdb_account_use_private_endpoints.metadata.json b/prowler/providers/azure/services/cosmosdb/cosmosdb_account_use_private_endpoints/cosmosdb_account_use_private_endpoints.metadata.json
new file mode 100644
index 00000000000..cece2160e2d
--- /dev/null
+++ b/prowler/providers/azure/services/cosmosdb/cosmosdb_account_use_private_endpoints/cosmosdb_account_use_private_endpoints.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "cosmosdb_account_use_private_endpoints",
+  "CheckTitle": "Ensure That Private Endpoints Are Used Where Possible",
+  "CheckType": [],
+  "ServiceName": "cosmosdb",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "CosmosDB",
+  "Description": "Private endpoints limit network traffic to approved sources.",
+  "Risk": "For sensitive data, private endpoints allow granular control of which services can communicate with Cosmos DB and ensure that this network traffic is private. You set this up on a case by case basis for each service you wish to be connected.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/azure/cosmos-db/how-to-configure-private-endpoints",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "1. Open the portal menu. 2. Select the Azure Cosmos DB blade. 3. Select the Azure Cosmos DB account. 4. Select Networking. 5. Select Private access. 6. Click + Private Endpoint. 7. Provide a Name. 8. Click Next. 9. From the Resource type drop down, select Microsoft.AzureCosmosDB/databaseAccounts. 10. From the Resource drop down, select the Cosmos DB account. 11. Click Next. 12. Provide appropriate Virtual Network details. 13. Click Next. 14. Provide appropriate DNS details. 15. Click Next. 16. Optionally provide Tags. 17. Click Next : Review + create. 18. Click Create.",
+      "Url": "https://docs.microsoft.com/en-us/azure/private-link/tutorial-private-endpoint-cosmosdb-portal"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "Only whitelisted services will have access to communicate with the Cosmos DB."
+}
diff --git a/prowler/providers/azure/services/cosmosdb/cosmosdb_account_use_private_endpoints/cosmosdb_account_use_private_endpoints.py b/prowler/providers/azure/services/cosmosdb/cosmosdb_account_use_private_endpoints/cosmosdb_account_use_private_endpoints.py
new file mode 100644
index 00000000000..22bad479bc5
--- /dev/null
+++ b/prowler/providers/azure/services/cosmosdb/cosmosdb_account_use_private_endpoints/cosmosdb_account_use_private_endpoints.py
@@ -0,0 +1,21 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.cosmosdb.cosmosdb_client import cosmosdb_client
+
+
+class cosmosdb_account_use_private_endpoints(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for subscription, accounts in cosmosdb_client.accounts.items():
+            for account in accounts:
+                report = Check_Report_Azure(self.metadata())
+                report.subscription = subscription
+                report.resource_name = account.name
+                report.resource_id = account.id
+                report.status = "FAIL"
+                report.status_extended = f"CosmosDB account {account.name} from subscription {subscription} is not using private endpoints connections"
+                if account.private_endpoint_connections:
+                    report.status = "PASS"
+                    report.status_extended = f"CosmosDB account {account.name} from subscription {subscription} is using private endpoints connections"
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/cosmosdb/cosmosdb_client.py b/prowler/providers/azure/services/cosmosdb/cosmosdb_client.py
new file mode 100644
index 00000000000..8fb122669b6
--- /dev/null
+++ b/prowler/providers/azure/services/cosmosdb/cosmosdb_client.py
@@ -0,0 +1,4 @@
+from prowler.providers.azure.lib.audit_info.audit_info import azure_audit_info
+from prowler.providers.azure.services.cosmosdb.cosmosdb_service import CosmosDB
+
+cosmosdb_client = CosmosDB(azure_audit_info)
diff --git a/prowler/providers/azure/services/cosmosdb/cosmosdb_service.py b/prowler/providers/azure/services/cosmosdb/cosmosdb_service.py
new file mode 100644
index 00000000000..a4e3229d05d
--- /dev/null
+++ b/prowler/providers/azure/services/cosmosdb/cosmosdb_service.py
@@ -0,0 +1,53 @@
+from dataclasses import dataclass
+
+from azure.mgmt.cosmosdb import CosmosDBManagementClient
+from azure.mgmt.cosmosdb.models import PrivateEndpointConnection
+
+from prowler.lib.logger import logger
+from prowler.providers.azure.lib.service.service import AzureService
+
+
+class CosmosDB(AzureService):
+    def __init__(self, audit_info):
+        super().__init__(CosmosDBManagementClient, audit_info)
+        self.accounts = self.__get_accounts__()
+
+    def __get_accounts__(self):
+        logger.info("CosmosDB - Getting accounts...")
+        accounts = {}
+        for subscription, client in self.clients.items():
+            try:
+                accounts_list = client.database_accounts.list()
+                accounts.update({subscription: []})
+                for account in accounts_list:
+                    accounts[subscription].append(
+                        Account(
+                            id=account.id,
+                            name=account.name,
+                            kind=account.kind,
+                            location=account.location,
+                            type=account.type,
+                            tags=account.tags,
+                            is_virtual_network_filter_enabled=account.is_virtual_network_filter_enabled,
+                            private_endpoint_connections=account.private_endpoint_connections,
+                            disable_local_auth=account.disable_local_auth,
+                        )
+                    )
+            except Exception as error:
+                logger.error(
+                    f"Subscription name: {subscription} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
+        return accounts
+
+
+@dataclass
+class Account:
+    id: str
+    name: str
+    kind: str
+    location: str
+    type: str
+    tags: dict
+    is_virtual_network_filter_enabled: bool
+    private_endpoint_connections: list[PrivateEndpointConnection] = None
+    disable_local_auth: bool = False
diff --git a/prowler/providers/azure/services/defender/defender_additional_email_configured_with_a_security_contact/__init__.py b/prowler/providers/azure/services/defender/defender_additional_email_configured_with_a_security_contact/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/defender/defender_additional_email_configured_with_a_security_contact/defender_additional_email_configured_with_a_security_contact.metadata.json b/prowler/providers/azure/services/defender/defender_additional_email_configured_with_a_security_contact/defender_additional_email_configured_with_a_security_contact.metadata.json
new file mode 100644
index 00000000000..4e018433c9f
--- /dev/null
+++ b/prowler/providers/azure/services/defender/defender_additional_email_configured_with_a_security_contact/defender_additional_email_configured_with_a_security_contact.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "defender_additional_email_configured_with_a_security_contact",
+  "CheckTitle": "Ensure 'Additional email addresses' is Configured with a Security Contact Email",
+  "CheckType": [],
+  "ServiceName": "defender",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "AzureEmailNotifications",
+  "Description": "Microsoft Defender for Cloud emails the subscription owners whenever a high-severity alert is triggered for their subscription. You should provide a security contact email address as an additional email address.",
+  "Risk": "Microsoft Defender for Cloud emails the Subscription Owner to notify them about security alerts. Adding your Security Contact's email address to the 'Additional email addresses' field ensures that your organization's Security Team is included in these alerts. This ensures that the proper people are aware of any potential compromise in order to mitigate the risk in a timely fashion.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/azure/security-center/security-center-provide-security-contact-details",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/SecurityCenter/security-contact-email.html",
+      "Terraform": "https://docs.bridgecrew.io/docs/ensure-that-security-contact-emails-is-set#terraform"
+    },
+    "Recommendation": {
+      "Text": "1. From Azure Home select the Portal Menu 2. Select Microsoft Defender for Cloud 3. Click on Environment Settings 4. Click on the appropriate Management Group, Subscription, or Workspace 5. Click on Email notifications 6. Enter a valid security contact email address (or multiple addresses separated by commas) in the Additional email addresses field 7. Click Save",
+      "Url": "https://learn.microsoft.com/en-us/rest/api/defenderforcloud/security-contacts/list?view=rest-defenderforcloud-2020-01-01-preview&tabs=HTTP"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": ""
+}
diff --git a/prowler/providers/azure/services/defender/defender_additional_email_configured_with_a_security_contact/defender_additional_email_configured_with_a_security_contact.py b/prowler/providers/azure/services/defender/defender_additional_email_configured_with_a_security_contact/defender_additional_email_configured_with_a_security_contact.py
new file mode 100644
index 00000000000..98bcbb801a6
--- /dev/null
+++ b/prowler/providers/azure/services/defender/defender_additional_email_configured_with_a_security_contact/defender_additional_email_configured_with_a_security_contact.py
@@ -0,0 +1,36 @@
+import re
+
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.defender.defender_client import defender_client
+
+
+class defender_additional_email_configured_with_a_security_contact(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for (
+            subscription_name,
+            security_contacts,
+        ) in defender_client.security_contacts.items():
+            for contact_name, contact_info in security_contacts.items():
+                report = Check_Report_Azure(self.metadata())
+                report.status = "PASS"
+                report.subscription = subscription_name
+                report.resource_name = contact_name
+                report.resource_id = contact_info.resource_id
+                report.status_extended = f"There is another correct email configured for susbscription {subscription_name}."
+
+                emails = contact_info.emails.split(";")
+
+                for email in emails:
+                    if re.fullmatch(
+                        r"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b", email
+                    ):
+                        break
+                else:
+                    report.status = "FAIL"
+                    report.status_extended = f"There is not another correct email configured for susbscription {subscription_name}."
+
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/defender/defender_assessments_vm_endpoint_protection_installed/__init__.py b/prowler/providers/azure/services/defender/defender_assessments_vm_endpoint_protection_installed/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/defender/defender_assessments_vm_endpoint_protection_installed/defender_assessments_vm_endpoint_protection_installed.metadata.json b/prowler/providers/azure/services/defender/defender_assessments_vm_endpoint_protection_installed/defender_assessments_vm_endpoint_protection_installed.metadata.json
new file mode 100644
index 00000000000..943c62b6545
--- /dev/null
+++ b/prowler/providers/azure/services/defender/defender_assessments_vm_endpoint_protection_installed/defender_assessments_vm_endpoint_protection_installed.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "defender_assessments_vm_endpoint_protection_installed",
+  "CheckTitle": "Ensure that Endpoint Protection for all Virtual Machines is installed",
+  "CheckType": [],
+  "ServiceName": "defender",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "high",
+  "ResourceType": "Microsoft.Security/assessments",
+  "Description": "Install endpoint protection for all virtual machines.",
+  "Risk": "Installing endpoint protection systems (like anti-malware for Azure) provides for real-time protection capability that helps identify and remove viruses, spyware, and other malicious software. These also offer configurable alerts when known-malicious or unwanted software attempts to install itself or run on Azure systems.",
+  "RelatedUrl": "https://learn.microsoft.com/en-us/azure/security/fundamentals/antimalware",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/VirtualMachines/install-endpoint-protection.html#",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "Follow Microsoft Azure documentation to install endpoint protection from the security center. Alternatively, you can employ your own endpoint protection tool for your OS.",
+      "Url": ""
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "Endpoint protection will incur an additional cost to you."
+}
diff --git a/prowler/providers/azure/services/defender/defender_assessments_vm_endpoint_protection_installed/defender_assessments_vm_endpoint_protection_installed.py b/prowler/providers/azure/services/defender/defender_assessments_vm_endpoint_protection_installed/defender_assessments_vm_endpoint_protection_installed.py
new file mode 100644
index 00000000000..29e649cb837
--- /dev/null
+++ b/prowler/providers/azure/services/defender/defender_assessments_vm_endpoint_protection_installed/defender_assessments_vm_endpoint_protection_installed.py
@@ -0,0 +1,41 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.defender.defender_client import defender_client
+
+
+class defender_assessments_vm_endpoint_protection_installed(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for (
+            subscription_name,
+            assessments,
+        ) in defender_client.assessments.items():
+            pass
+
+            if (
+                "Install endpoint protection solution on virtual machines"
+                in assessments
+            ):
+                report = Check_Report_Azure(self.metadata())
+                report.status = "PASS"
+                report.subscription = subscription_name
+                report.resource_name = assessments[
+                    "Install endpoint protection solution on virtual machines"
+                ].resource_name
+                report.resource_id = assessments[
+                    "Install endpoint protection solution on virtual machines"
+                ].resource_id
+                report.status_extended = f"Endpoint protection is set up in all VMs in subscription {subscription_name}."
+
+                if (
+                    assessments[
+                        "Install endpoint protection solution on virtual machines"
+                    ].status
+                    == "Unhealthy"
+                ):
+                    report.status = "FAIL"
+                    report.status_extended = f"Endpoint protection is not set up in all VMs in subscription {subscription_name}."
+
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/defender/defender_auto_provisioning_log_analytics_agent_vms_on/__init__.py b/prowler/providers/azure/services/defender/defender_auto_provisioning_log_analytics_agent_vms_on/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/defender/defender_auto_provisioning_log_analytics_agent_vms_on/defender_auto_provisioning_log_analytics_agent_vms_on.metadata.json b/prowler/providers/azure/services/defender/defender_auto_provisioning_log_analytics_agent_vms_on/defender_auto_provisioning_log_analytics_agent_vms_on.metadata.json
new file mode 100644
index 00000000000..ec571bf45c3
--- /dev/null
+++ b/prowler/providers/azure/services/defender/defender_auto_provisioning_log_analytics_agent_vms_on/defender_auto_provisioning_log_analytics_agent_vms_on.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "defender_auto_provisioning_log_analytics_agent_vms_on",
+  "CheckTitle": "Ensure that Auto provisioning of 'Log Analytics agent for Azure VMs' is Set to 'On'",
+  "CheckType": [],
+  "ServiceName": "defender",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "AzureDefenderPlan",
+  "Description": "Ensure that Auto provisioning of 'Log Analytics agent for Azure VMs' is Set to 'On'. The Microsoft Monitoring Agent scans for various security-related configurations and events such as system updates, OS vulnerabilities, endpoint protection, and provides alerts.",
+  "Risk": "Missing critical security information about your Azure VMs, such as security alerts, security recommendations, and change tracking.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/azure/security-center/security-center-data-security",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity-staging/knowledge-base/azure/SecurityCenter/automatic-provisioning-of-monitoring-agent.html",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "Ensure comprehensive visibility into possible security vulnerabilities, including missing updates, misconfigured operating system security settings, and active threats, allowing for timely mitigation and improved overall security posture",
+      "Url": "https://learn.microsoft.com/en-us/azure/defender-for-cloud/monitoring-components"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": ""
+}
diff --git a/prowler/providers/azure/services/defender/defender_auto_provisioning_log_analytics_agent_vms_on/defender_auto_provisioning_log_analytics_agent_vms_on.py b/prowler/providers/azure/services/defender/defender_auto_provisioning_log_analytics_agent_vms_on/defender_auto_provisioning_log_analytics_agent_vms_on.py
new file mode 100644
index 00000000000..ff14bd51e18
--- /dev/null
+++ b/prowler/providers/azure/services/defender/defender_auto_provisioning_log_analytics_agent_vms_on/defender_auto_provisioning_log_analytics_agent_vms_on.py
@@ -0,0 +1,29 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.defender.defender_client import defender_client
+
+
+class defender_auto_provisioning_log_analytics_agent_vms_on(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for (
+            subscription_name,
+            auto_provisioning_settings,
+        ) in defender_client.auto_provisioning_settings.items():
+
+            for auto_provisioning_setting in auto_provisioning_settings.values():
+
+                report = Check_Report_Azure(self.metadata())
+                report.status = "PASS"
+                report.subscription = subscription_name
+                report.resource_name = auto_provisioning_setting.resource_name
+                report.resource_id = auto_provisioning_setting.resource_id
+                report.status_extended = f"Defender Auto Provisioning Log Analytics Agents from subscription {subscription_name} is set to ON."
+
+                if auto_provisioning_setting.auto_provision != "On":
+                    report.status = "FAIL"
+                    report.status_extended = f"Defender Auto Provisioning Log Analytics Agents from subscription {subscription_name} is set to OFF."
+
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/defender/defender_auto_provisioning_vulnerabilty_assessments_machines_on/__init__.py b/prowler/providers/azure/services/defender/defender_auto_provisioning_vulnerabilty_assessments_machines_on/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/defender/defender_auto_provisioning_vulnerabilty_assessments_machines_on/defender_auto_provisioning_vulnerabilty_assessments_machines_on.metadata.json b/prowler/providers/azure/services/defender/defender_auto_provisioning_vulnerabilty_assessments_machines_on/defender_auto_provisioning_vulnerabilty_assessments_machines_on.metadata.json
new file mode 100644
index 00000000000..fb01fa9b248
--- /dev/null
+++ b/prowler/providers/azure/services/defender/defender_auto_provisioning_vulnerabilty_assessments_machines_on/defender_auto_provisioning_vulnerabilty_assessments_machines_on.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "defender_auto_provisioning_vulnerabilty_assessments_machines_on",
+  "CheckTitle": "Ensure that Auto provisioning of 'Vulnerability assessment for machines' is Set to 'On'",
+  "CheckType": [],
+  "ServiceName": "defender",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "AzureDefenderPlan",
+  "Description": "Enable automatic provisioning of vulnerability assessment for machines on both Azure and hybrid (Arc enabled) machines.",
+  "Risk": "Vulnerability assessment for machines scans for various security-related configurations and events such as system updates, OS vulnerabilities, and endpoint protection, then produces alerts on threat and vulnerability findings.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/azure/defender-for-cloud/enable-data-collection?tabs=autoprovision-va",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/SecurityCenter/automatic-provisioning-vulnerability-assessment-machines.html",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "1. From Azure Home select the Portal Menu. 2. Select Microsoft Defender for Cloud. 3. Then Environment Settings. 4. Select a subscription. 5. Click on Settings & Monitoring. 6. Ensure that Vulnerability assessment for machines is set to On. Repeat this for any additional subscriptions.",
+      "Url": ""
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "Additional licensing is required and configuration of Azure Arc introduces complexity beyond this recommendation."
+}
diff --git a/prowler/providers/azure/services/defender/defender_auto_provisioning_vulnerabilty_assessments_machines_on/defender_auto_provisioning_vulnerabilty_assessments_machines_on.py b/prowler/providers/azure/services/defender/defender_auto_provisioning_vulnerabilty_assessments_machines_on/defender_auto_provisioning_vulnerabilty_assessments_machines_on.py
new file mode 100644
index 00000000000..5c9b701ee78
--- /dev/null
+++ b/prowler/providers/azure/services/defender/defender_auto_provisioning_vulnerabilty_assessments_machines_on/defender_auto_provisioning_vulnerabilty_assessments_machines_on.py
@@ -0,0 +1,39 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.defender.defender_client import defender_client
+
+
+class defender_auto_provisioning_vulnerabilty_assessments_machines_on(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for (
+            subscription_name,
+            assessments,
+        ) in defender_client.assessments.items():
+            if (
+                "Machines should have a vulnerability assessment solution"
+                in assessments
+            ):
+                report = Check_Report_Azure(self.metadata())
+                report.status = "PASS"
+                report.subscription = subscription_name
+                report.resource_name = assessments[
+                    "Machines should have a vulnerability assessment solution"
+                ].resource_name
+                report.resource_id = assessments[
+                    "Machines should have a vulnerability assessment solution"
+                ].resource_id
+                report.status_extended = f"Vulnerability assessment is set up in all VMs in subscription {subscription_name}."
+
+                if (
+                    assessments[
+                        "Machines should have a vulnerability assessment solution"
+                    ].status
+                    == "Unhealthy"
+                ):
+                    report.status = "FAIL"
+                    report.status_extended = f"Vulnerability assessment is not set up in all VMs in subscription {subscription_name}."
+
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/defender/defender_ensure_iot_hub_defender_is_on/__init__.py b/prowler/providers/azure/services/defender/defender_ensure_iot_hub_defender_is_on/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/defender/defender_ensure_iot_hub_defender_is_on/defender_ensure_iot_hub_defender_is_on.metadata.json b/prowler/providers/azure/services/defender/defender_ensure_iot_hub_defender_is_on/defender_ensure_iot_hub_defender_is_on.metadata.json
new file mode 100644
index 00000000000..9f4d1f43500
--- /dev/null
+++ b/prowler/providers/azure/services/defender/defender_ensure_iot_hub_defender_is_on/defender_ensure_iot_hub_defender_is_on.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "defender_ensure_iot_hub_defender_is_on",
+  "CheckTitle": "Ensure That Microsoft Defender for IoT Hub Is Set To 'On'",
+  "CheckType": [],
+  "ServiceName": "defender",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "high",
+  "ResourceType": "DefenderIoT",
+  "Description": "Microsoft Defender for IoT acts as a central security hub for IoT devices within your organization.",
+  "Risk": "IoT devices are very rarely patched and can be potential attack vectors for enterprise networks. Updating their network configuration to use a central security hub allows for detection of these breaches.",
+  "RelatedUrl": "https://azure.microsoft.com/en-us/services/iot-defender/#overview",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "1. Go to IoT Hub. 2. Select a IoT Hub to validate. 3. Select Overview in Defender for IoT. 4. Click on Secure your IoT solution, and complete the onboarding.",
+      "Url": "https://learn.microsoft.com/en-us/azure/defender-for-iot/device-builders/quickstart-onboard-iot-hub"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "Enabling Microsoft Defender for IoT will incur additional charges dependent on the level of usage."
+}
diff --git a/prowler/providers/azure/services/defender/defender_ensure_iot_hub_defender_is_on/defender_ensure_iot_hub_defender_is_on.py b/prowler/providers/azure/services/defender/defender_ensure_iot_hub_defender_is_on/defender_ensure_iot_hub_defender_is_on.py
new file mode 100644
index 00000000000..96efa542166
--- /dev/null
+++ b/prowler/providers/azure/services/defender/defender_ensure_iot_hub_defender_is_on/defender_ensure_iot_hub_defender_is_on.py
@@ -0,0 +1,41 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.defender.defender_client import defender_client
+
+
+class defender_ensure_iot_hub_defender_is_on(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for (
+            subscription_name,
+            iot_security_solutions,
+        ) in defender_client.iot_security_solutions.items():
+
+            if not iot_security_solutions:
+                report = Check_Report_Azure(self.metadata())
+                report.status = "FAIL"
+                report.subscription = subscription_name
+                report.resource_name = "IoT Hub Defender"
+                report.resource_id = "IoT Hub Defender"
+                report.status_extended = f"No IoT Security Solutions found in the subscription {subscription_name}."
+                findings.append(report)
+                continue
+
+            for (
+                iot_security_solution_name,
+                iot_security_solution,
+            ) in iot_security_solutions.items():
+                report = Check_Report_Azure(self.metadata())
+                report.status = "PASS"
+                report.subscription = subscription_name
+                report.resource_name = iot_security_solution_name
+                report.resource_id = iot_security_solution.resource_id
+                report.status_extended = f"The security solution {iot_security_solution_name} is enabled in susbscription {subscription_name}."
+
+                if iot_security_solution.status != "Enabled":
+                    report.status = "FAIL"
+                    report.status_extended = f"The security solution {iot_security_solution_name} is disabled in susbscription {subscription_name}"
+
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/defender/defender_ensure_mcas_is_enabled/__init__.py b/prowler/providers/azure/services/defender/defender_ensure_mcas_is_enabled/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/defender/defender_ensure_mcas_is_enabled/defender_ensure_mcas_is_enabled.metadata.json b/prowler/providers/azure/services/defender/defender_ensure_mcas_is_enabled/defender_ensure_mcas_is_enabled.metadata.json
new file mode 100644
index 00000000000..913f8f90447
--- /dev/null
+++ b/prowler/providers/azure/services/defender/defender_ensure_mcas_is_enabled/defender_ensure_mcas_is_enabled.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "defender_ensure_mcas_is_enabled",
+  "CheckTitle": "Ensure that Microsoft Defender for Cloud Apps integration with Microsoft Defender for Cloud is Selected",
+  "CheckType": [],
+  "ServiceName": "defender",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "DefenderSettings",
+  "Description": "This integration setting enables Microsoft Defender for Cloud Apps (formerly 'Microsoft Cloud App Security' or 'MCAS' - see additional info) to communicate with Microsoft Defender for Cloud.",
+  "Risk": "Microsoft Defender for Cloud offers an additional layer of protection by using Azure Resource Manager events, which is considered to be the control plane for Azure. By analyzing the Azure Resource Manager records, Microsoft Defender for Cloud detects unusual or potentially harmful operations in the Azure subscription environment. Several of the preceding analytics are powered by Microsoft Defender for Cloud Apps. To benefit from these analytics, subscription must have a Cloud App Security license. Microsoft Defender for Cloud Apps works only with Standard Tier subscriptions.",
+  "RelatedUrl": "https://learn.microsoft.com/en-in/azure/defender-for-cloud/defender-for-cloud-introduction#secure-cloud-applications",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/SecurityCenter/defender-cloud-apps-integration.html#",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "1. From Azure Home select the Portal Menu. 2. Select Microsoft Defender for Cloud. 3. Select Environment Settings blade. 4. Select the subscription. 5. Check App Service Defender Plan to On. 6. Select Save.",
+      "Url": "https://docs.microsoft.com/en-us/rest/api/securitycenter/settings/list"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "Microsoft Defender for Cloud Apps works with Standard pricing tier Subscription. Choosing the Standard pricing tier of Microsoft Defender for Cloud incurs an additional cost per resource."
+}
diff --git a/prowler/providers/azure/services/defender/defender_ensure_mcas_is_enabled/defender_ensure_mcas_is_enabled.py b/prowler/providers/azure/services/defender/defender_ensure_mcas_is_enabled/defender_ensure_mcas_is_enabled.py
new file mode 100644
index 00000000000..aa1ca35bdb5
--- /dev/null
+++ b/prowler/providers/azure/services/defender/defender_ensure_mcas_is_enabled/defender_ensure_mcas_is_enabled.py
@@ -0,0 +1,28 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.defender.defender_client import defender_client
+
+
+class defender_ensure_mcas_is_enabled(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for (
+            subscription_name,
+            settings,
+        ) in defender_client.settings.items():
+            report = Check_Report_Azure(self.metadata())
+            report.status = "FAIL"
+            report.subscription = subscription_name
+            report.resource_name = "MCAS"
+            report.resource_id = "MCAS"
+            report.status_extended = f"Microsoft Defender for Cloud Apps not exists for subscription {subscription_name}."
+            if "MCAS" in settings:
+                report.resource_id = settings["MCAS"].resource_id
+                report.status_extended = f"Microsoft Defender for Cloud Apps is disabeld for subscription {subscription_name}."
+                if settings["MCAS"].enabled:
+                    report.status = "PASS"
+                    report.status_extended = f"Microsoft Defender for Cloud Apps is enabled for subscription {subscription_name}."
+
+            findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/defender/defender_ensure_notify_alerts_severity_is_high/__init__.py b/prowler/providers/azure/services/defender/defender_ensure_notify_alerts_severity_is_high/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/defender/defender_ensure_notify_alerts_severity_is_high/defender_ensure_notify_alerts_severity_is_high.metadata.json b/prowler/providers/azure/services/defender/defender_ensure_notify_alerts_severity_is_high/defender_ensure_notify_alerts_severity_is_high.metadata.json
new file mode 100644
index 00000000000..2a3fe081094
--- /dev/null
+++ b/prowler/providers/azure/services/defender/defender_ensure_notify_alerts_severity_is_high/defender_ensure_notify_alerts_severity_is_high.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "defender_ensure_notify_alerts_severity_is_high",
+  "CheckTitle": "Ensure That 'Notify about alerts with the following severity' is Set to 'High'",
+  "CheckType": [],
+  "ServiceName": "defender",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "high",
+  "ResourceType": "AzureEmailNotifications",
+  "Description": "Microsoft Defender for Cloud emails the subscription owners whenever a high-severity alert is triggered for their subscription. You should provide a security contact email address as an additional email address.",
+  "Risk": "Microsoft Defender for Cloud emails the Subscription Owner to notify them about security alerts. Adding your Security Contact's email address to the 'Additional email addresses' field ensures that your organization's Security Team is included in these alerts. This ensures that the proper people are aware of any potential compromise in order to mitigate the risk in a timely fashion.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/azure/security-center/security-center-provide-security-contact-details",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/SecurityCenter/enable-high-severity-email-notifications.html",
+      "Terraform": "https://docs.bridgecrew.io/docs/bc_azr_general_4#terraform"
+    },
+    "Recommendation": {
+      "Text": "1. From Azure Home select the Portal Menu 2. Select Microsoft Defender for Cloud 3. Click on Environment Settings 4. Click on the appropriate Management Group, Subscription, or Workspace 5. Click on Email notifications 6. Enter a valid security contact email address (or multiple addresses separated by commas) in the Additional email addresses field 7. Click Save",
+      "Url": "https://docs.microsoft.com/en-us/rest/api/securitycenter/securitycontacts/list"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": ""
+}
diff --git a/prowler/providers/azure/services/defender/defender_ensure_notify_alerts_severity_is_high/defender_ensure_notify_alerts_severity_is_high.py b/prowler/providers/azure/services/defender/defender_ensure_notify_alerts_severity_is_high/defender_ensure_notify_alerts_severity_is_high.py
new file mode 100644
index 00000000000..ca793906372
--- /dev/null
+++ b/prowler/providers/azure/services/defender/defender_ensure_notify_alerts_severity_is_high/defender_ensure_notify_alerts_severity_is_high.py
@@ -0,0 +1,27 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.defender.defender_client import defender_client
+
+
+class defender_ensure_notify_alerts_severity_is_high(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for (
+            subscription_name,
+            security_contacts,
+        ) in defender_client.security_contacts.items():
+            for contact_name, contact_info in security_contacts.items():
+                report = Check_Report_Azure(self.metadata())
+                report.status = "PASS"
+                report.subscription = subscription_name
+                report.resource_name = contact_name
+                report.resource_id = contact_info.resource_id
+                report.status_extended = f"Notifiy alerts are enabled for severity high in susbscription {subscription_name}."
+
+                if contact_info.alert_notifications_minimal_severity != "High":
+                    report.status = "FAIL"
+                    report.status_extended = f"Notifiy alerts are not enabled for severity high in susbscription {subscription_name}."
+
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/defender/defender_ensure_notify_emails_to_owners/__init__.py b/prowler/providers/azure/services/defender/defender_ensure_notify_emails_to_owners/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/defender/defender_ensure_notify_emails_to_owners/defender_ensure_notify_emails_to_owners.metadata.json b/prowler/providers/azure/services/defender/defender_ensure_notify_emails_to_owners/defender_ensure_notify_emails_to_owners.metadata.json
new file mode 100644
index 00000000000..a0375f9e930
--- /dev/null
+++ b/prowler/providers/azure/services/defender/defender_ensure_notify_emails_to_owners/defender_ensure_notify_emails_to_owners.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "defender_ensure_notify_emails_to_owners",
+  "CheckTitle": "Ensure That 'All users with the following roles' is set to 'Owner'",
+  "CheckType": [],
+  "ServiceName": "defender",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "AzureEmailNotifications",
+  "Description": "Enable security alert emails to subscription owners.",
+  "Risk": "Enabling security alert emails to subscription owners ensures that they receive security alert emails from Microsoft. This ensures that they are aware of any potential security issues and can mitigate the risk in a timely fashion.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/azure/security-center/security-center-provide-security-contact-details",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/SecurityCenter/email-to-subscription-owners.html",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "1. From Azure Home select the Portal Menu 2. Select Microsoft Defender for Cloud 3. Click on Environment Settings 4. Click on the appropriate Management Group, Subscription, or Workspace 5. Click on Email notifications 6. In the drop down of the All users with the following roles field select Owner 7. Click Save",
+      "Url": "https://docs.microsoft.com/en-us/rest/api/securitycenter/securitycontacts/list"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": ""
+}
diff --git a/prowler/providers/azure/services/defender/defender_ensure_notify_emails_to_owners/defender_ensure_notify_emails_to_owners.py b/prowler/providers/azure/services/defender/defender_ensure_notify_emails_to_owners/defender_ensure_notify_emails_to_owners.py
new file mode 100644
index 00000000000..c689b652d1b
--- /dev/null
+++ b/prowler/providers/azure/services/defender/defender_ensure_notify_emails_to_owners/defender_ensure_notify_emails_to_owners.py
@@ -0,0 +1,34 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.defender.defender_client import defender_client
+
+
+class defender_ensure_notify_emails_to_owners(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for (
+            subscription_name,
+            security_contacts,
+        ) in defender_client.security_contacts.items():
+
+            for contact_name, contact_info in security_contacts.items():
+
+                report = Check_Report_Azure(self.metadata())
+                report.status = "PASS"
+                report.subscription = subscription_name
+                report.resource_name = contact_name
+                report.resource_id = contact_info.resource_id
+                report.status_extended = (
+                    f"The Owner role is notified for subscription {subscription_name}."
+                )
+
+                if (
+                    contact_info.notified_roles_state != "On"
+                    or "Owner" not in contact_info.notified_roles
+                ):
+                    report.status = "FAIL"
+                    report.status_extended = f"The Owner role is not notified for subscription {subscription_name}."
+
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/defender/defender_ensure_system_updates_are_applied/__init__.py b/prowler/providers/azure/services/defender/defender_ensure_system_updates_are_applied/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/defender/defender_ensure_system_updates_are_applied/defender_ensure_system_updates_are_applied.metadata.json b/prowler/providers/azure/services/defender/defender_ensure_system_updates_are_applied/defender_ensure_system_updates_are_applied.metadata.json
new file mode 100644
index 00000000000..787220adb1e
--- /dev/null
+++ b/prowler/providers/azure/services/defender/defender_ensure_system_updates_are_applied/defender_ensure_system_updates_are_applied.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "defender_ensure_system_updates_are_applied",
+  "CheckTitle": "Ensure that Microsoft Defender Recommendation for 'Apply system updates' status is 'Completed'",
+  "CheckType": [],
+  "ServiceName": "defender",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "high",
+  "ResourceType": "AzureDefenderRecommendation",
+  "Description": "Ensure that the latest OS patches for all virtual machines are applied.",
+  "Risk": "The Azure Security Center retrieves a list of available security and critical updates from Windows Update or Windows Server Update Services (WSUS), depending on which service is configured on a Windows VM. The security center also checks for the latest updates in Linux systems. If a VM is missing a system update, the security center will recommend system updates be applied.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/security/benchmark/azure/security-controls-v3-posture-vulnerability-management#pv-7-rapidly-and-automatically-remediate-software-vulnerabilities",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/VirtualMachines/apply-latest-os-patches.html",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "Follow Microsoft Azure documentation to apply security patches from the security center. Alternatively, you can employ your own patch assessment and management tool to periodically assess, report, and install the required security patches for your OS.",
+      "Url": "https://learn.microsoft.com/en-us/azure/virtual-machines/updates-maintenance-overview"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "Running Microsoft Defender for Cloud incurs additional charges for each resource monitored. Please see attached reference for exact charges per hour."
+}
diff --git a/prowler/providers/azure/services/defender/defender_ensure_system_updates_are_applied/defender_ensure_system_updates_are_applied.py b/prowler/providers/azure/services/defender/defender_ensure_system_updates_are_applied/defender_ensure_system_updates_are_applied.py
new file mode 100644
index 00000000000..9155c107b77
--- /dev/null
+++ b/prowler/providers/azure/services/defender/defender_ensure_system_updates_are_applied/defender_ensure_system_updates_are_applied.py
@@ -0,0 +1,50 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.defender.defender_client import defender_client
+
+
+class defender_ensure_system_updates_are_applied(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for (
+            subscription_name,
+            assessments,
+        ) in defender_client.assessments.items():
+            if (
+                "Log Analytics agent should be installed on virtual machines"
+                in assessments
+                and "Machines should be configured to periodically check for missing system updates"
+                in assessments
+                and "System updates should be installed on your machines" in assessments
+            ):
+                report = Check_Report_Azure(self.metadata())
+                report.status = "PASS"
+                report.subscription = subscription_name
+                report.resource_name = assessments[
+                    "System updates should be installed on your machines"
+                ].resource_name
+                report.resource_id = assessments[
+                    "System updates should be installed on your machines"
+                ].resource_id
+                report.status_extended = f"System updates are applied for all the VMs in the subscription {subscription_name}."
+
+                if (
+                    assessments[
+                        "Log Analytics agent should be installed on virtual machines"
+                    ].status
+                    == "Unhealthy"
+                    or assessments[
+                        "Machines should be configured to periodically check for missing system updates"
+                    ].status
+                    == "Unhealthy"
+                    or assessments[
+                        "System updates should be installed on your machines"
+                    ].status
+                    == "Unhealthy"
+                ):
+                    report.status = "FAIL"
+                    report.status_extended = f"System updates are not applied for all the VMs in the subscription {subscription_name}."
+
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/defender/defender_ensure_wdatp_is_enabled/__init__.py b/prowler/providers/azure/services/defender/defender_ensure_wdatp_is_enabled/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/defender/defender_ensure_wdatp_is_enabled/defender_ensure_wdatp_is_enabled.metadata.json b/prowler/providers/azure/services/defender/defender_ensure_wdatp_is_enabled/defender_ensure_wdatp_is_enabled.metadata.json
new file mode 100644
index 00000000000..e1241c0933b
--- /dev/null
+++ b/prowler/providers/azure/services/defender/defender_ensure_wdatp_is_enabled/defender_ensure_wdatp_is_enabled.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "defender_ensure_wdatp_is_enabled",
+  "CheckTitle": "Ensure that Microsoft Defender for Endpoint integration with Microsoft Defender for Cloud is selected",
+  "CheckType": [],
+  "ServiceName": "defender",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "DefenderSettings",
+  "Description": "This integration setting enables Microsoft Defender for Endpoint (formerly 'Advanced Threat Protection' or 'ATP' or 'WDATP' - see additional info) to communicate with Microsoft Defender for Cloud.",
+  "Risk": "Microsoft Defender for Endpoint integration brings comprehensive Endpoint Detection and Response (EDR) capabilities within Microsoft Defender for Cloud. This integration helps to spot abnormalities, as well as detect and respond to advanced attacks on endpoints monitored by Microsoft Defender for Cloud. MDE works only with Standard Tier subscriptions.",
+  "RelatedUrl": "https://learn.microsoft.com/en-in/azure/defender-for-cloud/integration-defender-for-endpoint?tabs=windows",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/SecurityCenter/defender-endpoint-integration.html",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "",
+      "Url": "https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/azure-server-integration?view=o365-worldwide"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "Microsoft Defender for Endpoint works with Standard pricing tier Subscription. Choosing the Standard pricing tier of Microsoft Defender for Cloud incurs an additional cost per resource."
+}
diff --git a/prowler/providers/azure/services/defender/defender_ensure_wdatp_is_enabled/defender_ensure_wdatp_is_enabled.py b/prowler/providers/azure/services/defender/defender_ensure_wdatp_is_enabled/defender_ensure_wdatp_is_enabled.py
new file mode 100644
index 00000000000..2a121211ed7
--- /dev/null
+++ b/prowler/providers/azure/services/defender/defender_ensure_wdatp_is_enabled/defender_ensure_wdatp_is_enabled.py
@@ -0,0 +1,28 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.defender.defender_client import defender_client
+
+
+class defender_ensure_wdatp_is_enabled(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for (
+            subscription_name,
+            settings,
+        ) in defender_client.settings.items():
+            report = Check_Report_Azure(self.metadata())
+            report.status = "FAIL"
+            report.subscription = subscription_name
+            report.resource_name = "WDATP"
+            report.resource_id = "WDATP"
+            report.status_extended = f"Microsoft Defender for Endpoint integration not exists for subscription {subscription_name}."
+            if "WDATP" in settings:
+                report.status_extended = f"Microsoft Defender for Endpoint integration is disabeld for subscription {subscription_name}."
+                report.resource_id = settings["WDATP"].resource_id
+                if settings["WDATP"].enabled:
+                    report.status = "PASS"
+                    report.status_extended = f"Microsoft Defender for Endpoint integration is enabled for subscription {subscription_name}."
+
+            findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/defender/defender_service.py b/prowler/providers/azure/services/defender/defender_service.py
index 0609ec599d8..deea4c50f4c 100644
--- a/prowler/providers/azure/services/defender/defender_service.py
+++ b/prowler/providers/azure/services/defender/defender_service.py
@@ -1,5 +1,6 @@
 from datetime import timedelta
 
+from azure.core.exceptions import HttpResponseError
 from azure.mgmt.security import SecurityCenter
 from pydantic import BaseModel
 
@@ -13,18 +14,23 @@ def __init__(self, provider):
         super().__init__(SecurityCenter, provider)
 
         self.pricings = self.__get_pricings__()
+        self.auto_provisioning_settings = self.__get_auto_provisioning_settings__()
+        self.assessments = self.__get_assessments__()
+        self.settings = self.__get_settings__()
+        self.security_contacts = self.__get_security_contacts__()
+        self.iot_security_solutions = self.__get_iot_security_solutions__()
 
     def __get_pricings__(self):
         logger.info("Defender - Getting pricings...")
         pricings = {}
-        for subscription, client in self.clients.items():
+        for subscription_name, client in self.clients.items():
             try:
                 pricings_list = client.pricings.list()
-                pricings.update({subscription: {}})
+                pricings.update({subscription_name: {}})
                 for pricing in pricings_list.value:
-                    pricings[subscription].update(
+                    pricings[subscription_name].update(
                         {
-                            pricing.name: Defender_Pricing(
+                            pricing.name: Pricing(
                                 resource_id=pricing.id,
                                 pricing_tier=pricing.pricing_tier,
                                 free_trial_remaining_time=pricing.free_trial_remaining_time,
@@ -32,14 +38,192 @@ def __get_pricings__(self):
                         }
                     )
             except Exception as error:
-                logger.error(f"Subscription name: {subscription}")
                 logger.error(
-                    f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                    f"Subscription name: {subscription_name} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
                 )
         return pricings
 
+    def __get_auto_provisioning_settings__(self):
+        logger.info("Defender - Getting auto provisioning settings...")
+        auto_provisioning = {}
+        for subscription_name, client in self.clients.items():
+            try:
+                auto_provisioning_settings = client.auto_provisioning_settings.list()
+                auto_provisioning.update({subscription_name: {}})
+                for ap in auto_provisioning_settings:
+                    auto_provisioning[subscription_name].update(
+                        {
+                            ap.name: AutoProvisioningSetting(
+                                resource_id=ap.id,
+                                resource_name=ap.name,
+                                resource_type=ap.type,
+                                auto_provision=ap.auto_provision,
+                            )
+                        }
+                    )
+            except Exception as error:
+                logger.error(f"Subscription name: {subscription_name}")
+                logger.error(
+                    f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
+        return auto_provisioning
+
+    def __get_assessments__(self):
+        logger.info("Defender - Getting assessments...")
+        assessments = {}
+        for subscription_name, client in self.clients.items():
+            try:
+                assessments_list = client.assessments.list(
+                    f"subscriptions/{self.subscriptions[subscription_name]}"
+                )
+                assessments.update({subscription_name: {}})
+                for assessment in assessments_list:
+                    assessments[subscription_name].update(
+                        {
+                            assessment.display_name: Assesment(
+                                resource_id=assessment.id,
+                                resource_name=assessment.name,
+                                status=assessment.status.code,
+                            )
+                        }
+                    )
+            except Exception as error:
+                logger.error(
+                    f"Subscription name: {subscription_name} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
+        return assessments
+
+    def __get_settings__(self):
+        logger.info("Defender - Getting settings...")
+        settings = {}
+        for subscription_name, client in self.clients.items():
+            try:
+                settings_list = client.settings.list()
+                settings.update({subscription_name: {}})
+                for setting in settings_list:
+                    settings[subscription_name].update(
+                        {
+                            setting.name: Setting(
+                                resource_id=setting.id,
+                                resource_type=setting.type,
+                                kind=setting.kind,
+                                enabled=setting.enabled,
+                            )
+                        }
+                    )
+            except Exception as error:
+                logger.error(
+                    f"Subscription name: {subscription_name} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
+        return settings
+
+    def __get_security_contacts__(self):
+        logger.info("Defender - Getting security contacts...")
+        security_contacts = {}
+        for subscription_name, client in self.clients.items():
+            try:
+                security_contacts.update({subscription_name: {}})
+                # TODO: List all security contacts. For now, the list method is not working.
+                security_contact_default = client.security_contacts.get("default")
+                security_contacts[subscription_name].update(
+                    {
+                        security_contact_default.name: SecurityContacts(
+                            resource_id=security_contact_default.id,
+                            emails=security_contact_default.emails,
+                            phone=security_contact_default.phone,
+                            alert_notifications_minimal_severity=security_contact_default.alert_notifications.minimal_severity,
+                            alert_notifications_state=security_contact_default.alert_notifications.state,
+                            notified_roles=security_contact_default.notifications_by_role.roles,
+                            notified_roles_state=security_contact_default.notifications_by_role.state,
+                        )
+                    }
+                )
+            except HttpResponseError as error:
+                if error.status_code == 404:
+                    security_contacts[subscription_name].update(
+                        {
+                            "default": SecurityContacts(
+                                resource_id=f"/subscriptions/{self.subscriptions[subscription_name]}/providers/Microsoft.Security/securityContacts/default",
+                                emails="",
+                                phone="",
+                                alert_notifications_minimal_severity="",
+                                alert_notifications_state="",
+                                notified_roles=[""],
+                                notified_roles_state="",
+                            )
+                        }
+                    )
+                else:
+                    logger.error(
+                        f"Subscription name: {subscription_name} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                    )
+            except Exception as error:
+                logger.error(
+                    f"Subscription name: {subscription_name} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
+        return security_contacts
+
+    def __get_iot_security_solutions__(self):
+        logger.info("Defender - Getting IoT Security Solutions...")
+        iot_security_solutions = {}
+        for subscription_name, client in self.clients.items():
+            try:
+                iot_security_solutions_list = (
+                    client.iot_security_solution.list_by_subscription()
+                )
+                iot_security_solutions.update({subscription_name: {}})
+                for iot_security_solution in iot_security_solutions_list:
+                    iot_security_solutions[subscription_name].update(
+                        {
+                            iot_security_solution.name: IoTSecuritySolution(
+                                resource_id=iot_security_solution.id,
+                                status=iot_security_solution.status,
+                            )
+                        }
+                    )
+            except Exception as error:
+                logger.error(
+                    f"Subscription name: {subscription_name} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
+        return iot_security_solutions
 
-class Defender_Pricing(BaseModel):
+
+class Pricing(BaseModel):
     resource_id: str
     pricing_tier: str
     free_trial_remaining_time: timedelta
+
+
+class AutoProvisioningSetting(BaseModel):
+    resource_id: str
+    resource_name: str
+    resource_type: str
+    auto_provision: str
+
+
+class Assesment(BaseModel):
+    resource_id: str
+    resource_name: str
+    status: str
+
+
+class Setting(BaseModel):
+    resource_id: str
+    resource_type: str
+    kind: str
+    enabled: bool
+
+
+class SecurityContacts(BaseModel):
+    resource_id: str
+    emails: str
+    phone: str
+    alert_notifications_minimal_severity: str
+    alert_notifications_state: str
+    notified_roles: list[str]
+    notified_roles_state: str
+
+
+class IoTSecuritySolution(BaseModel):
+    resource_id: str
+    status: str
diff --git a/prowler/providers/azure/services/iam/iam_custom_role_has_permissions_to_administer_resource_locks/__init__.py b/prowler/providers/azure/services/iam/iam_custom_role_has_permissions_to_administer_resource_locks/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/iam/iam_custom_role_has_permissions_to_administer_resource_locks/iam_custom_role_has_permissions_to_administer_resource_locks.metadata.json b/prowler/providers/azure/services/iam/iam_custom_role_has_permissions_to_administer_resource_locks/iam_custom_role_has_permissions_to_administer_resource_locks.metadata.json
new file mode 100644
index 00000000000..ba0b057d84b
--- /dev/null
+++ b/prowler/providers/azure/services/iam/iam_custom_role_has_permissions_to_administer_resource_locks/iam_custom_role_has_permissions_to_administer_resource_locks.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "iam_custom_role_has_permissions_to_administer_resource_locks",
+  "CheckTitle": "Ensure an IAM custom role has permissions to administer resource locks",
+  "CheckType": [],
+  "ServiceName": "iam",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "high",
+  "ResourceType": "AzureRole",
+  "Description": "Ensure a Custom Role is Assigned Permissions for Administering Resource Locks",
+  "Risk": "In Azure, resource locks are a way to prevent accidental deletion or modification of critical resources. These locks can be set at the resource group level or the individual resource level. Resource locks administration is a critical task that should be preformed from a custom role with the appropriate permissions. This ensures that only authorized users can administer resource locks.",
+  "RelatedUrl": "https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/lock-resources?tabs=json",
+  "Remediation": {
+    "Code": {
+      "CLI": "https://www.trendmicro.com/cloudoneconformity-staging/knowledge-base/azure/AccessControl/resource-lock-custom-role.html",
+      "NativeIaC": "",
+      "Other": "",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "Resouce locks are needed to prevent accidental deletion or modification of critical Azure resources. The administration of resource locks should be performed from a custom role with the appropriate permissions.",
+      "Url": "https://www.trendmicro.com/cloudoneconformity-staging/knowledge-base/azure/AccessControl/resource-lock-custom-role.html"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": ""
+}
diff --git a/prowler/providers/azure/services/iam/iam_custom_role_has_permissions_to_administer_resource_locks/iam_custom_role_has_permissions_to_administer_resource_locks.py b/prowler/providers/azure/services/iam/iam_custom_role_has_permissions_to_administer_resource_locks/iam_custom_role_has_permissions_to_administer_resource_locks.py
new file mode 100644
index 00000000000..a903d7c3967
--- /dev/null
+++ b/prowler/providers/azure/services/iam/iam_custom_role_has_permissions_to_administer_resource_locks/iam_custom_role_has_permissions_to_administer_resource_locks.py
@@ -0,0 +1,33 @@
+from re import search
+
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.iam.iam_client import iam_client
+
+
+class iam_custom_role_has_permissions_to_administer_resource_locks(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for subscription, roles in iam_client.custom_roles.items():
+            for role in roles:
+                report = Check_Report_Azure(self.metadata())
+                report.subscription = subscription
+                report.resource_id = role.id
+                report.resource_name = role.name
+                has_lock_permission = False
+                for permission_item in role.permissions:
+                    if has_lock_permission:
+                        break
+                    for action in permission_item.actions:
+                        if has_lock_permission:
+                            break
+                        if search("^Microsoft.Authorization/locks/.*", action):
+                            report.status = "PASS"
+                            report.status_extended = f"Role {role.name} from subscription {subscription} has permission to administer resource locks."
+                            has_lock_permission = True
+                            break
+                        else:
+                            report.status = "FAIL"
+                            report.status_extended = f"Role {role.name} from subscription {subscription} has no permission to administer resource locks."
+                            break
+                findings.append(report)
+        return findings
diff --git a/prowler/providers/azure/services/iam/iam_service.py b/prowler/providers/azure/services/iam/iam_service.py
index abae5e99704..1c6cfc54e89 100644
--- a/prowler/providers/azure/services/iam/iam_service.py
+++ b/prowler/providers/azure/services/iam/iam_service.py
@@ -11,33 +11,46 @@
 class IAM(AzureService):
     def __init__(self, provider):
         super().__init__(AuthorizationManagementClient, provider)
-        self.roles = self.__get_roles__()
+        self.roles, self.custom_roles = self.__get_roles__()
 
     def __get_roles__(self):
         logger.info("IAM - Getting roles...")
-        roles = {}
+        builtin_roles = {}
+        custom_roles = {}
         for subscription, client in self.clients.items():
             try:
-                roles.update({subscription: []})
-                for role in client.role_definitions.list(
+                builtin_roles.update({subscription: []})
+                custom_roles.update({subscription: []})
+                all_roles = client.role_definitions.list(
                     scope=f"/subscriptions/{self.subscriptions[subscription]}",
-                    filter="type eq 'CustomRole'",
-                ):
-                    roles[subscription].append(
-                        Role(
-                            id=role.id,
-                            name=role.role_name,
-                            type=role.role_type,
-                            assignable_scopes=role.assignable_scopes,
-                            permissions=role.permissions,
+                )
+                for role in all_roles:
+                    if role.role_type == "CustomRole":
+                        custom_roles[subscription].append(
+                            Role(
+                                id=role.id,
+                                name=role.role_name,
+                                type=role.role_type,
+                                assignable_scopes=role.assignable_scopes,
+                                permissions=role.permissions,
+                            )
+                        )
+                    else:
+                        builtin_roles[subscription].append(
+                            Role(
+                                id=role.id,
+                                name=role.role_name,
+                                type=role.role_type,
+                                assignable_scopes=role.assignable_scopes,
+                                permissions=role.permissions,
+                            )
                         )
-                    )
             except Exception as error:
                 logger.error(f"Subscription name: {subscription}")
                 logger.error(
                     f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
                 )
-        return roles
+        return builtin_roles, custom_roles
 
 
 @dataclass
@@ -47,10 +60,3 @@ class Role:
     type: str
     assignable_scopes: list[str]
     permissions: list[Permission]
-
-    def __init__(self, id, name, type, assignable_scopes, permissions):
-        self.id = id
-        self.name = name
-        self.type = type
-        self.assignable_scopes = assignable_scopes
-        self.permissions = permissions
diff --git a/prowler/providers/azure/services/iam/iam_subscription_roles_owner_custom_not_created/iam_subscription_roles_owner_custom_not_created.metadata.json b/prowler/providers/azure/services/iam/iam_subscription_roles_owner_custom_not_created/iam_subscription_roles_owner_custom_not_created.metadata.json
index 0f2aa1d17ba..d1b25286e9c 100644
--- a/prowler/providers/azure/services/iam/iam_subscription_roles_owner_custom_not_created/iam_subscription_roles_owner_custom_not_created.metadata.json
+++ b/prowler/providers/azure/services/iam/iam_subscription_roles_owner_custom_not_created/iam_subscription_roles_owner_custom_not_created.metadata.json
@@ -10,17 +10,17 @@
   "ResourceType": "AzureRole",
   "Description": "Ensure that no custom subscription owner roles are created",
   "Risk": "Subscription ownership should not include permission to create custom owner roles. The principle of least privilege should be followed and only necessary privileges should be assigned instead of allowing full administrative access.",
-  "RelatedUrl": "",
+  "RelatedUrl": "https://learn.microsoft.com/en-us/azure/role-based-access-control/custom-roles",
   "Remediation": {
     "Code": {
-      "CLI": "",
+      "CLI": "https://www.trendmicro.com/cloudoneconformity-staging/knowledge-base/azure/AccessControl/remove-custom-owner-roles.html",
       "NativeIaC": "",
       "Other": "",
       "Terraform": ""
     },
     "Recommendation": {
-      "Text": "Subscriptions will need to be handled by Administrators with permissions.",
-      "Url": ""
+      "Text": "Custom subscription owner roles should not be created. This is because the principle of least privilege should be followed and only necessary privileges should be assigned instead of allowing full administrative access",
+      "Url": "https://www.trendmicro.com/cloudoneconformity-staging/knowledge-base/azure/AccessControl/remove-custom-owner-roles.html"
     }
   },
   "Categories": [],
diff --git a/prowler/providers/azure/services/iam/iam_subscription_roles_owner_custom_not_created/iam_subscription_roles_owner_custom_not_created.py b/prowler/providers/azure/services/iam/iam_subscription_roles_owner_custom_not_created/iam_subscription_roles_owner_custom_not_created.py
index 07fae3276f5..85bea3b4922 100644
--- a/prowler/providers/azure/services/iam/iam_subscription_roles_owner_custom_not_created/iam_subscription_roles_owner_custom_not_created.py
+++ b/prowler/providers/azure/services/iam/iam_subscription_roles_owner_custom_not_created/iam_subscription_roles_owner_custom_not_created.py
@@ -7,7 +7,7 @@
 class iam_subscription_roles_owner_custom_not_created(Check):
     def execute(self) -> Check_Report_Azure:
         findings = []
-        for subscription, roles in iam_client.roles.items():
+        for subscription, roles in iam_client.custom_roles.items():
             for role in roles:
                 report = Check_Report_Azure(self.metadata())
                 report.subscription = subscription
diff --git a/prowler/providers/azure/services/keyvault/__init__.py b/prowler/providers/azure/services/keyvault/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/keyvault/keyvault_client.py b/prowler/providers/azure/services/keyvault/keyvault_client.py
new file mode 100644
index 00000000000..ecb0af426d7
--- /dev/null
+++ b/prowler/providers/azure/services/keyvault/keyvault_client.py
@@ -0,0 +1,4 @@
+from prowler.providers.azure.lib.audit_info.audit_info import azure_audit_info
+from prowler.providers.azure.services.keyvault.keyvault_service import KeyVault
+
+keyvault_client = KeyVault(azure_audit_info)
diff --git a/prowler/providers/azure/services/keyvault/keyvault_key_expiration_set_in_non_rbac/__init__.py b/prowler/providers/azure/services/keyvault/keyvault_key_expiration_set_in_non_rbac/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/keyvault/keyvault_key_expiration_set_in_non_rbac/keyvault_key_expiration_set_in_non_rbac.metadata.json b/prowler/providers/azure/services/keyvault/keyvault_key_expiration_set_in_non_rbac/keyvault_key_expiration_set_in_non_rbac.metadata.json
new file mode 100644
index 00000000000..55857ab4be4
--- /dev/null
+++ b/prowler/providers/azure/services/keyvault/keyvault_key_expiration_set_in_non_rbac/keyvault_key_expiration_set_in_non_rbac.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "keyvault_key_expiration_set_in_non_rbac",
+  "CheckTitle": "Ensure that the Expiration Date is set for all Keys in Non-RBAC Key Vaults.",
+  "CheckType": [],
+  "ServiceName": "keyvault",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "high",
+  "ResourceType": "KeyVault",
+  "Description": "Ensure that all Keys in Non Role Based Access Control (RBAC) Azure Key Vaults have an expiration date set.",
+  "Risk": "Azure Key Vault enables users to store and use cryptographic keys within the Microsoft Azure environment. The exp (expiration date) attribute identifies the expiration date on or after which the key MUST NOT be used for a cryptographic operation. By default, keys never expire. It is thus recommended that keys be rotated in the key vault and set an explicit expiration date for all keys. This ensures that the keys cannot be used beyond their assigned lifetimes.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/azure/key-vault/key-vault-whatis",
+  "Remediation": {
+    "Code": {
+      "CLI": "az keyvault key set-attributes --name  --vault-name  --expires Y-m-d'T'H:M:S'Z'",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/KeyVault/key-expiration-check.html#",
+      "Terraform": "https://docs.bridgecrew.io/docs/set-an-expiration-date-on-all-keys#terraform"
+    },
+    "Recommendation": {
+      "Text": "From Azure Portal: 1. Go to Key vaults. 2. For each Key vault, click on Keys. 3. In the main pane, ensure that an appropriate Expiration date is set for any keys that are Enabled. From Azure CLI: Update the Expiration date for the key using the below command: az keyvault key set-attributes --name  --vault-name  -- expires Y-m-d'T'H:M:S'Z' Note: To view the expiration date on all keys in a Key Vault using Microsoft API, the 'List' Key permission is required. To update the expiration date for the keys: 1. Go to the Key vault, click on Access Control (IAM). 2. Click on Add role assignment and assign the role of Key Vault Crypto Officer to the appropriate user. From PowerShell: Set-AzKeyVaultKeyAttribute -VaultName  -Name  -Expires ",
+      "Url": "https://docs.microsoft.com/en-us/rest/api/keyvault/about-keys--secrets-and-certificates#key-vault-keys"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "Keys cannot be used beyond their assigned expiration dates respectively. Keys need to be rotated periodically wherever they are used."
+}
diff --git a/prowler/providers/azure/services/keyvault/keyvault_key_expiration_set_in_non_rbac/keyvault_key_expiration_set_in_non_rbac.py b/prowler/providers/azure/services/keyvault/keyvault_key_expiration_set_in_non_rbac/keyvault_key_expiration_set_in_non_rbac.py
new file mode 100644
index 00000000000..b69ee56b15f
--- /dev/null
+++ b/prowler/providers/azure/services/keyvault/keyvault_key_expiration_set_in_non_rbac/keyvault_key_expiration_set_in_non_rbac.py
@@ -0,0 +1,30 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.keyvault.keyvault_client import keyvault_client
+
+
+class keyvault_key_expiration_set_in_non_rbac(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for subscription, key_vaults in keyvault_client.key_vaults.items():
+            for keyvault in key_vaults:
+                if not keyvault.properties.enable_rbac_authorization and keyvault.keys:
+                    report = Check_Report_Azure(self.metadata())
+                    report.subscription = subscription
+                    report.resource_name = keyvault.name
+                    report.resource_id = keyvault.id
+                    report.status = "PASS"
+                    report.status_extended = f"Keyvault {keyvault.name} from subscription {subscription} has all the keys with expiration date set."
+                    has_key_without_expiration = False
+                    for key in keyvault.keys:
+                        if (
+                            key.attributes
+                            and not key.attributes.expires
+                            and key.enabled
+                        ):
+                            report.status = "FAIL"
+                            report.status_extended = f"Keyvault {keyvault.name} from subscription {subscription} has the key {key.name} without expiration date set."
+                            has_key_without_expiration = True
+                            findings.append(report)
+                    if not has_key_without_expiration:
+                        findings.append(report)
+        return findings
diff --git a/prowler/providers/azure/services/keyvault/keyvault_key_rotation_enabled/keyvault_key_rotation_enabled.metadata.json b/prowler/providers/azure/services/keyvault/keyvault_key_rotation_enabled/keyvault_key_rotation_enabled.metadata.json
new file mode 100644
index 00000000000..a7aacb5526c
--- /dev/null
+++ b/prowler/providers/azure/services/keyvault/keyvault_key_rotation_enabled/keyvault_key_rotation_enabled.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "keyvault_key_rotation_enabled",
+  "CheckTitle": "Ensure Automatic Key Rotation is Enabled Within Azure Key Vault for the Supported Services",
+  "CheckType": [],
+  "ServiceName": "keyvault",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "high",
+  "ResourceType": "KeyVault",
+  "Description": "Automatic Key Rotation is available in Public Preview. The currently supported applications are Key Vault, Managed Disks, and Storage accounts accessing keys within Key Vault. The number of supported applications will incrementally increased.",
+  "Risk": "Once set up, Automatic Private Key Rotation removes the need for manual administration when keys expire at intervals determined by your organization's policy. The recommended key lifetime is 2 years. Your organization should determine its own key expiration policy.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/azure/key-vault/keys/how-to-configure-key-rotation",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "Note: Azure CLI and Powershell use ISO8601 flags to input timespans. Every timespan input will be in the format P(Y,M,D). The leading P is required with it denoting period. The (Y,M,D) are for the duration of Year, Month,and Day respectively. A time frame of 2 years, 2 months, 2 days would be (P2Y2M2D). From Azure Portal 1. From Azure Portal select the Portal Menu in the top left. 2. Select Key Vaults. 3. Select a Key Vault to audit. 4. Under Objects select Keys. 5. Select a key to audit. 6. In the top row select Rotation policy. 7. Select an Expiry time. 8. Set Enable auto rotation to Enabled. 9. Set an appropriate Rotation option and Rotation time. 10. Optionally set the Notification time. 11. Select Save. 12. Repeat steps 3-11 for each Key Vault and Key. From PowerShell Run the following command for each key to update its policy: Set-AzKeyVaultKeyRotationPolicy -VaultName test-kv -Name test-key -PolicyPath rotation_policy.json",
+      "Url": "https://docs.microsoft.com/en-us/azure/storage/common/customer-managed-keys-overview#update-the-key-version"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "There are an additional costs per operation in running the needed applications."
+}
diff --git a/prowler/providers/azure/services/keyvault/keyvault_key_rotation_enabled/keyvault_key_rotation_enabled.py b/prowler/providers/azure/services/keyvault/keyvault_key_rotation_enabled/keyvault_key_rotation_enabled.py
new file mode 100644
index 00000000000..e98dc198714
--- /dev/null
+++ b/prowler/providers/azure/services/keyvault/keyvault_key_rotation_enabled/keyvault_key_rotation_enabled.py
@@ -0,0 +1,29 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.keyvault.keyvault_client import keyvault_client
+
+
+class keyvault_key_rotation_enabled(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for subscription, key_vaults in keyvault_client.key_vaults.items():
+            for keyvault in key_vaults:
+                if keyvault.keys:
+                    report = Check_Report_Azure(self.metadata())
+                    report.subscription = subscription
+                    report.resource_name = keyvault.name
+                    report.resource_id = keyvault.id
+                    for key in keyvault.keys:
+                        if (
+                            key.rotation_policy
+                            and key.rotation_policy.lifetime_actions
+                            and key.rotation_policy.lifetime_actions[0].action
+                            == "Rotate"
+                        ):
+                            report.status = "PASS"
+                            report.status_extended = f"Keyvault {keyvault.name} from subscription {subscription} has the key {key.name} with rotation policy set."
+                        else:
+                            report.status = "FAIL"
+                            report.status_extended = f"Keyvault {keyvault.name} from subscription {subscription} has the key {key.name} without rotation policy set."
+
+                        findings.append(report)
+        return findings
diff --git a/prowler/providers/azure/services/keyvault/keyvault_non_rbac_secret_expiration_set/__init__.py b/prowler/providers/azure/services/keyvault/keyvault_non_rbac_secret_expiration_set/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/keyvault/keyvault_non_rbac_secret_expiration_set/keyvault_non_rbac_secret_expiration_set.metadata.json b/prowler/providers/azure/services/keyvault/keyvault_non_rbac_secret_expiration_set/keyvault_non_rbac_secret_expiration_set.metadata.json
new file mode 100644
index 00000000000..828d5fd27b1
--- /dev/null
+++ b/prowler/providers/azure/services/keyvault/keyvault_non_rbac_secret_expiration_set/keyvault_non_rbac_secret_expiration_set.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "keyvault_non_rbac_secret_expiration_set",
+  "CheckTitle": "Ensure that the Expiration Date is set for all Secrets in Non-RBAC Key Vaults",
+  "CheckType": [],
+  "ServiceName": "keyvault",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "high",
+  "ResourceType": "KeyVault",
+  "Description": "Ensure that all Secrets in Non Role Based Access Control (RBAC) Azure Key Vaults have an expiration date set.",
+  "Risk": "The Azure Key Vault enables users to store and keep secrets within the Microsoft Azure environment. Secrets in the Azure Key Vault are octet sequences with a maximum size of 25k bytes each. The exp (expiration date) attribute identifies the expiration date on or after which the secret MUST NOT be used. By default, secrets never expire. It is thus recommended to rotate secrets in the key vault and set an explicit expiration date for all secrets. This ensures that the secrets cannot be used beyond their assigned lifetimes.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/azure/key-vault/key-vault-whatis",
+  "Remediation": {
+    "Code": {
+      "CLI": "az keyvault secret set-attributes --name  --vault-name  --expires Y-m-d'T'H:M:S'Z'",
+      "NativeIaC": "",
+      "Other": "",
+      "Terraform": "https://docs.bridgecrew.io/docs/set-an-expiration-date-on-all-secrets#terraform"
+    },
+    "Recommendation": {
+      "Text": "From Azure Portal: 1. Go to Key vaults. 2. For each Key vault, click on Secrets. 3. In the main pane, ensure that the status of the secret is Enabled. 4. Set an appropriate Expiration date on all secrets. From Azure CLI: Update the Expiration date for the secret using the below command: az keyvault secret set-attributes --name  --vault-name  --expires Y-m-d'T'H:M:S'Z' Note: To view the expiration date on all secrets in a Key Vault using Microsoft API, the List Key permission is required. To update the expiration date for the secrets: 1. Go to Key vault, click on Access policies. 2. Click on Create and add an access policy with the Update permission (in the Secret Permissions - Secret Management Operations section). From PowerShell: For each Key vault with the EnableRbacAuthorization setting set to False or empty, run the following command. Set-AzKeyVaultSecret -VaultName  -Name  -Expires ",
+      "Url": "https://docs.microsoft.com/en-us/rest/api/keyvault/about-keys--secrets-and-certificates#key-vault-secrets"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "Secrets cannot be used beyond their assigned expiry date respectively. Secrets need to be rotated periodically wherever they are used."
+}
diff --git a/prowler/providers/azure/services/keyvault/keyvault_non_rbac_secret_expiration_set/keyvault_non_rbac_secret_expiration_set.py b/prowler/providers/azure/services/keyvault/keyvault_non_rbac_secret_expiration_set/keyvault_non_rbac_secret_expiration_set.py
new file mode 100644
index 00000000000..18606afdfe0
--- /dev/null
+++ b/prowler/providers/azure/services/keyvault/keyvault_non_rbac_secret_expiration_set/keyvault_non_rbac_secret_expiration_set.py
@@ -0,0 +1,33 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.keyvault.keyvault_client import keyvault_client
+
+
+class keyvault_non_rbac_secret_expiration_set(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for subscription, key_vaults in keyvault_client.key_vaults.items():
+            for keyvault in key_vaults:
+                if (
+                    not keyvault.properties.enable_rbac_authorization
+                    and keyvault.secrets
+                ):
+                    report = Check_Report_Azure(self.metadata())
+                    report.subscription = subscription
+                    report.resource_name = keyvault.name
+                    report.resource_id = keyvault.id
+                    report.status = "PASS"
+                    report.status_extended = f"Keyvault {keyvault.name} from subscription {subscription} has all the secrets with expiration date set."
+                    has_secret_without_expiration = False
+                    for secret in keyvault.secrets:
+                        if (
+                            secret.attributes
+                            and not secret.attributes.expires
+                            and secret.enabled
+                        ):
+                            report.status = "FAIL"
+                            report.status_extended = f"Keyvault {keyvault.name} from subscription {subscription} has the secret {secret.name} without expiration date set."
+                            has_secret_without_expiration = True
+                            findings.append(report)
+                    if not has_secret_without_expiration:
+                        findings.append(report)
+        return findings
diff --git a/prowler/providers/azure/services/keyvault/keyvault_private_endpoints/__init__.py b/prowler/providers/azure/services/keyvault/keyvault_private_endpoints/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/keyvault/keyvault_private_endpoints/keyvault_private_endpoints.metadata.json b/prowler/providers/azure/services/keyvault/keyvault_private_endpoints/keyvault_private_endpoints.metadata.json
new file mode 100644
index 00000000000..aeda78de280
--- /dev/null
+++ b/prowler/providers/azure/services/keyvault/keyvault_private_endpoints/keyvault_private_endpoints.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "keyvault_private_endpoints",
+  "CheckTitle": "Ensure that Private Endpoints are Used for Azure Key Vault",
+  "CheckType": [],
+  "ServiceName": "keyvault",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "high",
+  "ResourceType": "KeyVault",
+  "Description": "Private endpoints will secure network traffic from Azure Key Vault to the resources requesting secrets and keys.",
+  "Risk": "Private endpoints will keep network requests to Azure Key Vault limited to the endpoints attached to the resources that are whitelisted to communicate with each other. Assigning the Key Vault to a network without an endpoint will allow other resources on that network to view all traffic from the Key Vault to its destination. In spite of the complexity in configuration, this is recommended for high security secrets.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/azure/private-link/private-endpoint-overview",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "Please see the additional information about the requirements needed before starting this remediation procedure. From Azure Portal 1. From Azure Home open the Portal Menu in the top left. 2. Select Key Vaults. 3. Select a Key Vault to audit. 4. Select Networking in the left column. 5. Select Private endpoint connections from the top row. 6. Select + Create. 7. Select the subscription the Key Vault is within, and other desired configuration. 8. Select Next. 9. For resource type select Microsoft.KeyVault/vaults. 10. Select the Key Vault to associate the Private Endpoint with. 11. Select Next. 12. In the Virtual Networking field, select the network to assign the Endpoint. 13. Select other configuration options as desired, including an existing or new application security group. 14. Select Next. 15. Select the private DNS the Private Endpoints will use. 16. Select Next. 17. Optionally add Tags. 18. Select Next : Review + Create. 19. Review the information and select Create. Follow the Audit Procedure to determine if it has successfully applied. 20. Repeat steps 3-19 for each Key Vault. From Azure CLI 1. To create an endpoint, run the following command: az network private-endpoint create --resource-group  --subnet  --name  -- private-connection-resource-id '/subscriptions//resourceGroups//providers/Microsoft.KeyVault/vaults/' --group-ids vault --connection-name  -- location  --manual-request 2. To manually approve the endpoint request, run the following command: az keyvault private-endpoint-connection approve --resource-group  --vault-name  –name  4. Determine the Private Endpoint's IP address to connect the Key Vault to the Private DNS you have previously created: 5. Look for the property networkInterfaces then id; the value must be placed in the variable  within step 7. az network private-endpoint show -g  -n  6. Look for the property networkInterfaces then id; the value must be placed on  in step 7. az network nic show --ids  7. Create a Private DNS record within the DNS Zone you created for the Private Endpoint: az network private-dns record-set a add-record -g  -z 'privatelink.vaultcore.azure.net' -n  -a  8. nslookup the private endpoint to determine if the DNS record is correct: nslookup .vault.azure.net nslookup .privatelink.vaultcore.azure.n",
+      "Url": "https://docs.microsoft.com/en-us/azure/storage/common/storage-private-endpoints"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "Incorrect or poorly-timed changing of network configuration could result in service interruption. There are also additional costs tiers for running a private endpoint perpetabyte or more of networking traffic."
+}
diff --git a/prowler/providers/azure/services/keyvault/keyvault_private_endpoints/keyvault_private_endpoints.py b/prowler/providers/azure/services/keyvault/keyvault_private_endpoints/keyvault_private_endpoints.py
new file mode 100644
index 00000000000..febf3cf4bf1
--- /dev/null
+++ b/prowler/providers/azure/services/keyvault/keyvault_private_endpoints/keyvault_private_endpoints.py
@@ -0,0 +1,23 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.keyvault.keyvault_client import keyvault_client
+
+
+class keyvault_private_endpoints(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for subscription, key_vaults in keyvault_client.key_vaults.items():
+            for keyvault in key_vaults:
+                report = Check_Report_Azure(self.metadata())
+                report.subscription = subscription
+                report.resource_name = keyvault.name
+                report.resource_id = keyvault.id
+                report.status = "FAIL"
+                report.status_extended = f"Keyvault {keyvault.name} from subscription {subscription} is not using private endpoints."
+                if (
+                    keyvault.properties
+                    and keyvault.properties.private_endpoint_connections
+                ):
+                    report.status = "PASS"
+                    report.status_extended = f"Keyvault {keyvault.name} from subscription {subscription} is using private endpoints."
+                findings.append(report)
+        return findings
diff --git a/prowler/providers/azure/services/keyvault/keyvault_rbac_enabled/__init__.py b/prowler/providers/azure/services/keyvault/keyvault_rbac_enabled/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/keyvault/keyvault_rbac_enabled/keyvault_rbac_enabled.metadata.json b/prowler/providers/azure/services/keyvault/keyvault_rbac_enabled/keyvault_rbac_enabled.metadata.json
new file mode 100644
index 00000000000..bc9b171ad07
--- /dev/null
+++ b/prowler/providers/azure/services/keyvault/keyvault_rbac_enabled/keyvault_rbac_enabled.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "keyvault_rbac_enabled",
+  "CheckTitle": "Enable Role Based Access Control for Azure Key Vault",
+  "CheckType": [],
+  "ServiceName": "keyvault",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "high",
+  "ResourceType": "KeyVault",
+  "Description": "WARNING: Role assignments disappear when a Key Vault has been deleted (soft-delete) and recovered. Afterwards it will be required to recreate all role assignments. This is a limitation of the soft-delete feature across all Azure services.",
+  "Risk": "The new RBAC permissions model for Key Vaults enables a much finer grained access control for key vault secrets, keys, certificates, etc., than the vault access policy. This in turn will permit the use of privileged identity management over these roles, thus securing the key vaults with JIT Access management.",
+  "RelatedUrl": "https://docs.microsoft.com/en-gb/azure/key-vault/general/rbac-migration#vault-access-policy-to-azure-rbac-migration-steps",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "From Azure Portal Key Vaults can be configured to use Azure role-based access control on creation. For existing Key Vaults: 1. From Azure Home open the Portal Menu in the top left corner 2. Select Key Vaults 3. Select a Key Vault to audit 4. Select Access configuration 5. Set the Permission model radio button to Azure role-based access control, taking note of the warning message 6. Click Save 7. Select Access Control (IAM) 8. Select the Role Assignments tab 9. Reapply permissions as needed to groups or users",
+      "Url": "https://docs.microsoft.com/en-gb/azure/role-based-access-control/role-assignments-portal?tabs=current"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "Implementation needs to be properly designed from the ground up, as this is a fundamental change to the way key vaults are accessed/managed. Changing permissions to key vaults will result in loss of service as permissions are re-applied. For the least amount of downtime, map your current groups and users to their corresponding permission needs."
+}
diff --git a/prowler/providers/azure/services/keyvault/keyvault_rbac_enabled/keyvault_rbac_enabled.py b/prowler/providers/azure/services/keyvault/keyvault_rbac_enabled/keyvault_rbac_enabled.py
new file mode 100644
index 00000000000..a18b85d4c26
--- /dev/null
+++ b/prowler/providers/azure/services/keyvault/keyvault_rbac_enabled/keyvault_rbac_enabled.py
@@ -0,0 +1,23 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.keyvault.keyvault_client import keyvault_client
+
+
+class keyvault_rbac_enabled(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for subscription, key_vaults in keyvault_client.key_vaults.items():
+            for keyvault in key_vaults:
+                report = Check_Report_Azure(self.metadata())
+                report.subscription = subscription
+                report.resource_name = keyvault.name
+                report.resource_id = keyvault.id
+                report.status = "FAIL"
+                report.status_extended = f"Keyvault {keyvault.name} from subscription {subscription} is not using RBAC for access control."
+                if (
+                    keyvault.properties
+                    and keyvault.properties.enable_rbac_authorization
+                ):
+                    report.status = "PASS"
+                    report.status_extended = f"Keyvault {keyvault.name} from subscription {subscription} is using RBAC for access control."
+                findings.append(report)
+        return findings
diff --git a/prowler/providers/azure/services/keyvault/keyvault_rbac_key_expiration_set/__init__.py b/prowler/providers/azure/services/keyvault/keyvault_rbac_key_expiration_set/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/keyvault/keyvault_rbac_key_expiration_set/keyvault_rbac_key_expiration_set.metadata.json b/prowler/providers/azure/services/keyvault/keyvault_rbac_key_expiration_set/keyvault_rbac_key_expiration_set.metadata.json
new file mode 100644
index 00000000000..25747cf091c
--- /dev/null
+++ b/prowler/providers/azure/services/keyvault/keyvault_rbac_key_expiration_set/keyvault_rbac_key_expiration_set.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "keyvault_rbac_key_expiration_set",
+  "CheckTitle": "Ensure that the Expiration Date is set for all Keys in RBAC Key Vaults",
+  "CheckType": [],
+  "ServiceName": "keyvault",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "high",
+  "ResourceType": "KeyVault",
+  "Description": "Ensure that all Keys in Role Based Access Control (RBAC) Azure Key Vaults have an expiration date set",
+  "Risk": "Azure Key Vault enables users to store and use cryptographic keys within the Microsoft Azure environment. The exp (expiration date) attribute identifies the expiration date on or after which the key MUST NOT be used for encryption of new data, wrapping of new keys, and signing. By default, keys never expire. It is thus recommended that keys be rotated in the key vault and set an explicit expiration date for all keys to help enforce the key rotation. This ensures that the keys cannot be used beyond their assigned lifetimes.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/azure/key-vault/key-vault-whatis",
+  "Remediation": {
+    "Code": {
+      "CLI": "az keyvault key set-attributes --name  --vault-name  --expires Y-m-d'T'H:M:S'Z'",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/KeyVault/key-expiration-check.html#",
+      "Terraform": "https://docs.bridgecrew.io/docs/set-an-expiration-date-on-all-keys#terraform"
+    },
+    "Recommendation": {
+      "Text": "From Azure Portal: 1. Go to Key vaults. 2. For each Key vault, click on Keys. 3. In the main pane, ensure that an appropriate Expiration date is set for any keys that are Enabled. From Azure CLI: Update the Expiration date for the key using the below command: az keyvault key set-attributes --name  --vault-name  -- expires Y-m-d'T'H:M:S'Z' Note: To view the expiration date on all keys in a Key Vault using Microsoft API, the 'List' Key permission is required. To update the expiration date for the keys: 1. Go to the Key vault, click on Access Control (IAM). 2. Click on Add role assignment and assign the role of Key Vault Crypto Officer to the appropriate user. From PowerShell: Set-AzKeyVaultKeyAttribute -VaultName  -Name  -Expires ",
+      "Url": "https://docs.microsoft.com/en-us/rest/api/keyvault/about-keys--secrets-and-certificates#key-vault-keys"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "Keys cannot be used beyond their assigned expiration dates respectively. Keys need to be rotated periodically wherever they are used."
+}
diff --git a/prowler/providers/azure/services/keyvault/keyvault_rbac_key_expiration_set/keyvault_rbac_key_expiration_set.py b/prowler/providers/azure/services/keyvault/keyvault_rbac_key_expiration_set/keyvault_rbac_key_expiration_set.py
new file mode 100644
index 00000000000..ae68e0dd343
--- /dev/null
+++ b/prowler/providers/azure/services/keyvault/keyvault_rbac_key_expiration_set/keyvault_rbac_key_expiration_set.py
@@ -0,0 +1,30 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.keyvault.keyvault_client import keyvault_client
+
+
+class keyvault_rbac_key_expiration_set(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for subscription, key_vaults in keyvault_client.key_vaults.items():
+            for keyvault in key_vaults:
+                if keyvault.properties.enable_rbac_authorization and keyvault.keys:
+                    report = Check_Report_Azure(self.metadata())
+                    report.subscription = subscription
+                    report.resource_name = keyvault.name
+                    report.resource_id = keyvault.id
+                    report.status = "PASS"
+                    report.status_extended = f"Keyvault {keyvault.name} from subscription {subscription} has all the keys with expiration date set."
+                    has_key_without_expiration = False
+                    for key in keyvault.keys:
+                        if (
+                            key.attributes
+                            and not key.attributes.expires
+                            and key.enabled
+                        ):
+                            report.status = "FAIL"
+                            report.status_extended = f"Keyvault {keyvault.name} from subscription {subscription} has the key {key.name} without expiration date set."
+                            has_key_without_expiration = True
+                            findings.append(report)
+                    if not has_key_without_expiration:
+                        findings.append(report)
+        return findings
diff --git a/prowler/providers/azure/services/keyvault/keyvault_rbac_secret_expiration_set/__init__.py b/prowler/providers/azure/services/keyvault/keyvault_rbac_secret_expiration_set/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/keyvault/keyvault_rbac_secret_expiration_set/keyvault_rbac_secret_expiration_set.metadata.json b/prowler/providers/azure/services/keyvault/keyvault_rbac_secret_expiration_set/keyvault_rbac_secret_expiration_set.metadata.json
new file mode 100644
index 00000000000..65dbb39632a
--- /dev/null
+++ b/prowler/providers/azure/services/keyvault/keyvault_rbac_secret_expiration_set/keyvault_rbac_secret_expiration_set.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "keyvault_rbac_secret_expiration_set",
+  "CheckTitle": "Ensure that the Expiration Date is set for all Secrets in RBAC Key Vaults",
+  "CheckType": [],
+  "ServiceName": "keyvault",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "high",
+  "ResourceType": "KeyVault",
+  "Description": "Ensure that all Secrets in Role Based Access Control (RBAC) Azure Key Vaults have an expiration date set.",
+  "Risk": "The Azure Key Vault enables users to store and keep secrets within the Microsoft Azure environment. Secrets in the Azure Key Vault are octet sequences with a maximum size of 25k bytes each. The exp (expiration date) attribute identifies the expiration date on or after which the secret MUST NOT be used. By default, secrets never expire. It is thus recommended to rotate secrets in the key vault and set an explicit expiration date for all secrets. This ensures that the secrets cannot be used beyond their assigned lifetimes.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/azure/key-vault/key-vault-whatis",
+  "Remediation": {
+    "Code": {
+      "CLI": "az keyvault secret set-attributes --name  --vault-name  --expires Y-m-d'T'H:M:S'Z'",
+      "NativeIaC": "",
+      "Other": "",
+      "Terraform": "https://docs.bridgecrew.io/docs/set-an-expiration-date-on-all-secrets#terraform"
+    },
+    "Recommendation": {
+      "Text": "From Azure Portal: 1. Go to Key vaults. 2. For each Key vault, click on Secrets. 3. In the main pane, ensure that the status of the secret is Enabled. 4. For each enabled secret, ensure that an appropriate Expiration date is set. From Azure CLI: Update the Expiration date for the secret using the below command: az keyvault secret set-attributes --name  --vault-name  --expires Y-m-d'T'H:M:S'Z' Note: To view the expiration date on all secrets in a Key Vault using Microsoft API, the List Key permission is required. To update the expiration date for the secrets: 1. Go to the Key vault, click on Access Control (IAM). 2. Click on Add role assignment and assign the role of Key Vault Secrets Officer to the appropriate user. From PowerShell: Set-AzKeyVaultSecretAttribute -VaultName  -Name  - Expires ",
+      "Url": "https://docs.microsoft.com/en-us/rest/api/keyvault/about-keys--secrets-and-certificates#key-vault-secrets"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "Secrets cannot be used beyond their assigned expiry date respectively. Secrets need to be rotated periodically wherever they are used."
+}
diff --git a/prowler/providers/azure/services/keyvault/keyvault_rbac_secret_expiration_set/keyvault_rbac_secret_expiration_set.py b/prowler/providers/azure/services/keyvault/keyvault_rbac_secret_expiration_set/keyvault_rbac_secret_expiration_set.py
new file mode 100644
index 00000000000..03c0bd3e838
--- /dev/null
+++ b/prowler/providers/azure/services/keyvault/keyvault_rbac_secret_expiration_set/keyvault_rbac_secret_expiration_set.py
@@ -0,0 +1,30 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.keyvault.keyvault_client import keyvault_client
+
+
+class keyvault_rbac_secret_expiration_set(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for subscription, key_vaults in keyvault_client.key_vaults.items():
+            for keyvault in key_vaults:
+                if keyvault.properties.enable_rbac_authorization and keyvault.secrets:
+                    report = Check_Report_Azure(self.metadata())
+                    report.subscription = subscription
+                    report.resource_name = keyvault.name
+                    report.resource_id = keyvault.id
+                    report.status = "PASS"
+                    report.status_extended = f"Keyvault {keyvault.name} from subscription {subscription} has all the secrets with expiration date set."
+                    has_secret_without_expiration = False
+                    for secret in keyvault.secrets:
+                        if (
+                            secret.attributes
+                            and not secret.attributes.expires
+                            and secret.enabled
+                        ):
+                            report.status = "FAIL"
+                            report.status_extended = f"Keyvault {keyvault.name} from subscription {subscription} has the secret {secret.name} without expiration date set."
+                            has_secret_without_expiration = True
+                            findings.append(report)
+                    if not has_secret_without_expiration:
+                        findings.append(report)
+        return findings
diff --git a/prowler/providers/azure/services/keyvault/keyvault_recoverable/__init__.py b/prowler/providers/azure/services/keyvault/keyvault_recoverable/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/keyvault/keyvault_recoverable/keyvault_recoverable.metadata.json b/prowler/providers/azure/services/keyvault/keyvault_recoverable/keyvault_recoverable.metadata.json
new file mode 100644
index 00000000000..e9af6c043bd
--- /dev/null
+++ b/prowler/providers/azure/services/keyvault/keyvault_recoverable/keyvault_recoverable.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "keyvault_recoverable",
+  "CheckTitle": "Ensure the Key Vault is Recoverable",
+  "CheckType": [],
+  "ServiceName": "keyvault",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "high",
+  "ResourceType": "KeyVault",
+  "Description": "The Key Vault contains object keys, secrets, and certificates. Accidental unavailability of a Key Vault can cause immediate data loss or loss of security functions (authentication, validation, verification, non-repudiation, etc.) supported by the Key Vault objects. It is recommended the Key Vault be made recoverable by enabling the 'Do Not Purge' and 'Soft Delete' functions. This is in order to prevent loss of encrypted data, including storage accounts, SQL databases, and/or dependent services provided by Key Vault objects (Keys, Secrets, Certificates) etc. This may happen in the case of accidental deletion by a user or from disruptive activity by a malicious user. WARNING: A current limitation of the soft-delete feature across all Azure services is role assignments disappearing when Key Vault is deleted. All role assignments will need to be recreated after recovery.",
+  "Risk": "There could be scenarios where users accidentally run delete/purge commands on Key Vault or an attacker/malicious user deliberately does so in order to cause disruption. Deleting or purging a Key Vault leads to immediate data loss, as keys encrypting data and secrets/certificates allowing access/services will become non-accessible. There are 2 Key Vault properties that play a role in permanent unavailability of a Key Vault: 1. enableSoftDelete: Setting this parameter to 'true' for a Key Vault ensures that even if Key Vault is deleted, Key Vault itself or its objects remain recoverable for the next 90 days. Key Vault/objects can either be recovered or purged (permanent deletion) during those 90 days. If no action is taken, key vault and its objects will subsequently be purged. 2. enablePurgeProtection: enableSoftDelete only ensures that Key Vault is not deleted permanently and will be recoverable for 90 days from date of deletion. However, there are scenarios in which the Key Vault and/or its objects are accidentally purged and hence will not be recoverable. Setting enablePurgeProtection to 'true' ensures that the Key Vault and its objects cannot be purged. Enabling both the parameters on Key Vaults ensures that Key Vaults and their objects cannot be deleted/purged permanently.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/azure/key-vault/key-vault-soft-delete-cli",
+  "Remediation": {
+    "Code": {
+      "CLI": "az resource update --id /subscriptions/xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups//providers/Microsoft.KeyVault/vaults/ --set properties.enablePurgeProtection=trueproperties.enableSoftDelete=true",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/KeyVault/enable-key-vault-recoverability.html#",
+      "Terraform": "https://docs.bridgecrew.io/docs/ensure-the-key-vault-is-recoverable#terraform"
+    },
+    "Recommendation": {
+      "Text": "To enable 'Do Not Purge' and 'Soft Delete' for a Key Vault: From Azure Portal 1. Go to Key Vaults 2. For each Key Vault 3. Click Properties 4. Ensure the status of soft-delete reads Soft delete has been enabled on this key vault. 5. At the bottom of the page, click 'Enable Purge Protection' Note, once enabled you cannot disable it. From Azure CLI az resource update --id /subscriptions/xxxxxx-xxxx-xxxx-xxxx- xxxxxxxxxxxx/resourceGroups//providers/Microsoft.KeyVault /vaults/ --set properties.enablePurgeProtection=true properties.enableSoftDelete=true From PowerShell Update-AzKeyVault -VaultName  Check_Report_Azure:
+        findings = []
+        for subscription, key_vaults in keyvault_client.key_vaults.items():
+            for keyvault in key_vaults:
+                report = Check_Report_Azure(self.metadata())
+                report.subscription = subscription
+                report.resource_name = keyvault.name
+                report.resource_id = keyvault.id
+                report.status = "FAIL"
+                report.status_extended = f"Keyvault {keyvault.name} from subscription {subscription} is not recoverable."
+                if (
+                    keyvault.properties.enable_soft_delete
+                    and keyvault.properties.enable_purge_protection
+                ):
+                    report.status = "PASS"
+                    report.status_extended = f"Keyvault {keyvault.name} from subscription {subscription} is recoverable."
+                findings.append(report)
+        return findings
diff --git a/prowler/providers/azure/services/keyvault/keyvault_service.py b/prowler/providers/azure/services/keyvault/keyvault_service.py
new file mode 100644
index 00000000000..209a5fb8adb
--- /dev/null
+++ b/prowler/providers/azure/services/keyvault/keyvault_service.py
@@ -0,0 +1,147 @@
+from dataclasses import dataclass
+
+from azure.core.exceptions import HttpResponseError
+from azure.keyvault.keys import KeyClient
+from azure.mgmt.keyvault import KeyVaultManagementClient
+from azure.mgmt.keyvault.v2023_07_01.models import (
+    KeyAttributes,
+    SecretAttributes,
+    VaultProperties,
+)
+
+from prowler.lib.logger import logger
+from prowler.providers.azure.lib.service.service import AzureService
+
+
+########################## Storage
+class KeyVault(AzureService):
+    def __init__(self, audit_info):
+        super().__init__(KeyVaultManagementClient, audit_info)
+        self.key_vaults = self.__get_key_vaults__(audit_info)
+
+    def __get_key_vaults__(self, audit_info):
+        logger.info("KeyVault - Getting key_vaults...")
+        key_vaults = {}
+        for subscription, client in self.clients.items():
+            try:
+                key_vaults.update({subscription: []})
+                key_vaults_list = client.vaults.list()
+                for keyvault in key_vaults_list:
+                    resource_group = keyvault.id.split("/")[4]
+                    keyvault_name = keyvault.name
+                    keyvault_properties = client.vaults.get(
+                        resource_group, keyvault_name
+                    ).properties
+                    keys = self.__get_keys__(
+                        subscription, resource_group, keyvault_name, audit_info
+                    )
+                    secrets = self.__get_secrets__(
+                        subscription, resource_group, keyvault_name
+                    )
+                    key_vaults[subscription].append(
+                        KeyVaultInfo(
+                            id=getattr(keyvault, "id", ""),
+                            name=getattr(keyvault, "name", ""),
+                            location=getattr(keyvault, "location", ""),
+                            resource_group=resource_group,
+                            properties=keyvault_properties,
+                            keys=keys,
+                            secrets=secrets,
+                        )
+                    )
+            except Exception as error:
+                logger.error(
+                    f"Subscription name: {subscription} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
+        return key_vaults
+
+    def __get_keys__(self, subscription, resource_group, keyvault_name, audit_info):
+        logger.info(f"KeyVault - Getting keys for {keyvault_name}...")
+        keys = []
+        try:
+            client = self.clients[subscription]
+            keys_list = client.keys.list(resource_group, keyvault_name)
+            for key in keys_list:
+                keys.append(
+                    Key(
+                        id=getattr(key, "id", ""),
+                        name=getattr(key, "name", ""),
+                        enabled=getattr(key.attributes, "enabled", False),
+                        location=getattr(key, "location", ""),
+                        attributes=getattr(key, "attributes", None),
+                    )
+                )
+        except Exception as error:
+            logger.error(
+                f"Subscription name: {subscription} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+            )
+
+        try:
+            key_client = KeyClient(
+                vault_url=f"https://{keyvault_name}.vault.azure.net/",
+                credential=audit_info.credentials,
+            )
+            properties = key_client.list_properties_of_keys()
+            for prop in properties:
+                policy = key_client.get_key_rotation_policy(prop.name)
+                for key in keys:
+                    if key.name == prop.name:
+                        key.rotation_policy = policy
+
+        except HttpResponseError:
+            logger.error(
+                f"Subscription name: {subscription} -- has no access policy configured for keyvault {keyvault_name}"
+            )
+        return keys
+
+    def __get_secrets__(self, subscription, resource_group, keyvault_name):
+        logger.info(f"KeyVault - Getting secrets for {keyvault_name}...")
+        secrets = []
+        try:
+            client = self.clients[subscription]
+            secrets_list = client.secrets.list(resource_group, keyvault_name)
+            for secret in secrets_list:
+                secrets.append(
+                    Secret(
+                        id=getattr(secret, "id", ""),
+                        name=getattr(secret, "name", ""),
+                        enabled=getattr(secret.properties.attributes, "enabled", False),
+                        location=getattr(secret, "location", ""),
+                        attributes=getattr(secret.properties, "attributes", None),
+                    )
+                )
+        except Exception as error:
+            logger.error(
+                f"Subscription name: {subscription} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+            )
+        return secrets
+
+
+@dataclass
+class Key:
+    id: str
+    name: str
+    enabled: bool
+    location: str
+    attributes: KeyAttributes
+    rotation_policy: str = None
+
+
+@dataclass
+class Secret:
+    id: str
+    name: str
+    enabled: bool
+    location: str
+    attributes: SecretAttributes
+
+
+@dataclass
+class KeyVaultInfo:
+    id: str
+    name: str
+    location: str
+    resource_group: str
+    properties: VaultProperties
+    keys: list[Key] = None
+    secrets: list[Secret] = None
diff --git a/prowler/providers/azure/services/monitor/__init__.py b/prowler/providers/azure/services/monitor/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/monitor/monitor_client.py b/prowler/providers/azure/services/monitor/monitor_client.py
new file mode 100644
index 00000000000..92759620d01
--- /dev/null
+++ b/prowler/providers/azure/services/monitor/monitor_client.py
@@ -0,0 +1,4 @@
+from prowler.providers.azure.lib.audit_info.audit_info import azure_audit_info
+from prowler.providers.azure.services.monitor.monitor_service import Monitor
+
+monitor_client = Monitor(azure_audit_info)
diff --git a/prowler/providers/azure/services/monitor/monitor_diagnostic_setting_with_appropriate_categories/__init__.py b/prowler/providers/azure/services/monitor/monitor_diagnostic_setting_with_appropriate_categories/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/monitor/monitor_diagnostic_setting_with_appropriate_categories/monitor_diagnostic_setting_with_appropriate_categories.metadata.json b/prowler/providers/azure/services/monitor/monitor_diagnostic_setting_with_appropriate_categories/monitor_diagnostic_setting_with_appropriate_categories.metadata.json
new file mode 100644
index 00000000000..3e3e125bd92
--- /dev/null
+++ b/prowler/providers/azure/services/monitor/monitor_diagnostic_setting_with_appropriate_categories/monitor_diagnostic_setting_with_appropriate_categories.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "monitor_diagnostic_setting_with_appropriate_categories",
+  "CheckTitle": "Ensure Diagnostic Setting captures appropriate categories",
+  "CheckType": [],
+  "ServiceName": "monitor",
+  "SubServiceName": "Configuring Diagnostic Settings",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "Monitor",
+  "Description": "Prerequisite: A Diagnostic Setting must exist. If a Diagnostic Setting does not exist, the navigation and options within this recommendation will not be available. Please review the recommendation at the beginning of this subsection titled: 'Ensure that a 'Diagnostic Setting' exists.' The diagnostic setting should be configured to log the appropriate activities from the control/management plane.",
+  "Risk": "A diagnostic setting controls how the diagnostic log is exported. Capturing the diagnostic setting categories for appropriate control/management plane activities allows proper alerting.",
+  "RelatedUrl": "https://learn.microsoft.com/en-us/azure/azure-monitor/essentials/diagnostic-settings",
+  "Remediation": {
+    "Code": {
+      "CLI": "az monitor diagnostic-settings subscription create --subscription  --name  --location  <[- -event-hub  --event-hub-auth-rule ] [-- storage-account ] [--workspace ] --logs '[{category:Security,enabled:true},{category:Administrative,enabled:true},{ca tegory:Alert,enabled:true},{category:Policy,enabled:true}]'>",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/Monitor/diagnostic-setting-categories.html",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "1. Go to Azure Monitor 2. Click Activity log 3. Click on Export Activity Logs 4. Select the Subscription from the drop down menu 5. Click on Add diagnostic setting 6. Enter a name for your new Diagnostic Setting 7. Check the following categories: Administrative, Alert, Policy, and Security 8. Choose the destination details according to your organization's needs.",
+      "Url": "https://learn.microsoft.com/en-us/azure/storage/common/manage-storage-analytics-logs?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json&tabs=azure-portal"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "When the diagnostic setting is created using Azure Portal, by default no categories are selected."
+}
diff --git a/prowler/providers/azure/services/monitor/monitor_diagnostic_setting_with_appropriate_categories/monitor_diagnostic_setting_with_appropriate_categories.py b/prowler/providers/azure/services/monitor/monitor_diagnostic_setting_with_appropriate_categories/monitor_diagnostic_setting_with_appropriate_categories.py
new file mode 100644
index 00000000000..980026b4901
--- /dev/null
+++ b/prowler/providers/azure/services/monitor/monitor_diagnostic_setting_with_appropriate_categories/monitor_diagnostic_setting_with_appropriate_categories.py
@@ -0,0 +1,53 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.monitor.monitor_client import monitor_client
+
+
+class monitor_diagnostic_setting_with_appropriate_categories(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for (
+            subscription_name,
+            diagnostic_settings,
+        ) in monitor_client.diagnostics_settings.items():
+            report = Check_Report_Azure(self.metadata())
+            report.status = "FAIL"
+            report.subscription = subscription_name
+            report.resource_name = "Monitor"
+            report.resource_id = "Monitor"
+            report.status_extended = f"There are no diagnostic settings capturing appropiate categories in subscription {subscription_name}."
+            administrative_enabled = False
+            security_enabled = False
+            service_health_enabled = False
+            alert_enabled = False
+            for diagnostic_setting in diagnostic_settings:
+                for log in diagnostic_setting.logs:
+                    if log.category == "Administrative" and log.enabled:
+                        administrative_enabled = True
+                    if log.category == "Security" and log.enabled:
+                        security_enabled = True
+                    if log.category == "Alert" and log.enabled:
+                        service_health_enabled = True
+                    if log.category == "Policy" and log.enabled:
+                        alert_enabled = True
+
+                    if (
+                        administrative_enabled
+                        and security_enabled
+                        and service_health_enabled
+                        and alert_enabled
+                    ):
+                        report.status = "PASS"
+                        report.status_extended = f"There is at least one diagnostic setting capturing appropiate categories in subscription {subscription_name}."
+                        break
+                if (
+                    administrative_enabled
+                    and security_enabled
+                    and service_health_enabled
+                    and alert_enabled
+                ):
+                    break
+
+            findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/monitor/monitor_service.py b/prowler/providers/azure/services/monitor/monitor_service.py
new file mode 100644
index 00000000000..4359ed53fad
--- /dev/null
+++ b/prowler/providers/azure/services/monitor/monitor_service.py
@@ -0,0 +1,46 @@
+from dataclasses import dataclass
+
+from azure.mgmt.monitor import MonitorManagementClient
+from azure.mgmt.monitor.models import LogSettings
+
+from prowler.lib.logger import logger
+from prowler.providers.azure.lib.service.service import AzureService
+
+
+########################## Monitor
+class Monitor(AzureService):
+    def __init__(self, audit_info):
+        super().__init__(MonitorManagementClient, audit_info)
+
+        self.diagnostics_settings = self.__get_diagnostics_settings__()
+
+    def __get_diagnostics_settings__(self):
+        logger.info("Monitor - Getting diagnostics settings...")
+        diagnostics_settings = {}
+        for subscription, client in self.clients.items():
+            try:
+                diagnostics_settings.update({subscription: []})
+                settings = client.diagnostic_settings.list(
+                    resource_uri=f"subscriptions/{self.subscriptions[subscription]}/"
+                )
+                for setting in settings:
+                    diagnostics_settings[subscription].append(
+                        DiagnosticSetting(
+                            id=setting.id,
+                            logs=setting.logs,
+                            storage_account_id=setting.storage_account_id,
+                        )
+                    )
+
+            except Exception as error:
+                logger.error(
+                    f"Subscription name: {subscription} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
+        return diagnostics_settings
+
+
+@dataclass
+class DiagnosticSetting:
+    id: str
+    storage_account_id: str
+    logs: LogSettings
diff --git a/prowler/providers/azure/services/mysql/__init__.py b/prowler/providers/azure/services/mysql/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/mysql/mysql_client.py b/prowler/providers/azure/services/mysql/mysql_client.py
new file mode 100644
index 00000000000..df48ca35690
--- /dev/null
+++ b/prowler/providers/azure/services/mysql/mysql_client.py
@@ -0,0 +1,4 @@
+from prowler.providers.azure.lib.audit_info.audit_info import azure_audit_info
+from prowler.providers.azure.services.mysql.mysql_service import MySQL
+
+mysql_client = MySQL(azure_audit_info)
diff --git a/prowler/providers/azure/services/mysql/mysql_flexible_server_audit_log_connection_activated/__init__.py b/prowler/providers/azure/services/mysql/mysql_flexible_server_audit_log_connection_activated/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/mysql/mysql_flexible_server_audit_log_connection_activated/mysql_flexible_server_audit_log_connection_activated.metadata.json b/prowler/providers/azure/services/mysql/mysql_flexible_server_audit_log_connection_activated/mysql_flexible_server_audit_log_connection_activated.metadata.json
new file mode 100644
index 00000000000..665bfbfab43
--- /dev/null
+++ b/prowler/providers/azure/services/mysql/mysql_flexible_server_audit_log_connection_activated/mysql_flexible_server_audit_log_connection_activated.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "mysql_flexible_server_audit_log_connection_activated",
+  "CheckTitle": "Ensure server parameter 'audit_log_events' has 'CONNECTION' set for MySQL Database Server",
+  "CheckType": [],
+  "ServiceName": "mysql",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "Microsoft.DBforMySQL/flexibleServers",
+  "Description": "Set audit_log_enabled to include CONNECTION on MySQL Servers.",
+  "Risk": "Enabling CONNECTION helps MySQL Database to log items such as successful and failed connection attempts to the server. Log data can be used to identify, troubleshoot, and repair configuration errors and suboptimal performance.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/azure/mysql/single-server/how-to-configure-audit-logs-portal",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "https://www.tenable.com/audits/items/CIS_Microsoft_Azure_Foundations_v2.0.0_L2.audit:06ec721d4c0ea9169db2b0c6876c5f38",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "1. From Azure Home select the Portal Menu. 2. Select Azure Database for MySQL servers. 3. Select a database. 4. Under Settings, select Server parameters. 5. Update audit_log_enabled parameter to ON. 6. Update audit_log_events parameter to have at least CONNECTION checked. 7. Click Save. 8. Under Monitoring, select Diagnostic settings. 9. Select + Add diagnostic setting. 10. Provide a diagnostic setting name. 11. Under Categories, select MySQL Audit Logs. 12. Specify destination details. 13. Click Save.",
+      "Url": "https://docs.microsoft.com/en-us/security/benchmark/azure/security-controls-v3-logging-threat-detection#lt-3-enable-logging-for-security-investigation"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "There are further costs incurred for storage of logs. For high traffic databases these logs will be significant. Determine your organization's needs before enabling."
+}
diff --git a/prowler/providers/azure/services/mysql/mysql_flexible_server_audit_log_connection_activated/mysql_flexible_server_audit_log_connection_activated.py b/prowler/providers/azure/services/mysql/mysql_flexible_server_audit_log_connection_activated/mysql_flexible_server_audit_log_connection_activated.py
new file mode 100644
index 00000000000..475c816c073
--- /dev/null
+++ b/prowler/providers/azure/services/mysql/mysql_flexible_server_audit_log_connection_activated/mysql_flexible_server_audit_log_connection_activated.py
@@ -0,0 +1,37 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.mysql.mysql_client import mysql_client
+
+
+class mysql_flexible_server_audit_log_connection_activated(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for (
+            subscription_name,
+            servers,
+        ) in mysql_client.flexible_servers.items():
+            for (
+                server_name,
+                server,
+            ) in servers.items():
+                report = Check_Report_Azure(self.metadata())
+                report.status = "FAIL"
+                report.subscription = subscription_name
+                report.resource_name = server_name
+                report.resource_id = server_name
+                report.status_extended = f"Audit log is disabled for server {server_name} in subscription {subscription_name}."
+
+                if "audit_log_events" in server.configurations:
+                    report.resource_id = server.configurations[
+                        "audit_log_events"
+                    ].resource_id
+
+                    if "CONNECTION" in server.configurations[
+                        "audit_log_events"
+                    ].value.split(","):
+                        report.status = "PASS"
+                        report.status_extended = f"Audit log is enabled for server {server_name} in subscription {subscription_name}."
+
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/mysql/mysql_flexible_server_audit_log_enabled/__init__.py b/prowler/providers/azure/services/mysql/mysql_flexible_server_audit_log_enabled/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/mysql/mysql_flexible_server_audit_log_enabled/mysql_flexible_server_audit_log_enabled.metadata.json b/prowler/providers/azure/services/mysql/mysql_flexible_server_audit_log_enabled/mysql_flexible_server_audit_log_enabled.metadata.json
new file mode 100644
index 00000000000..d018e38092d
--- /dev/null
+++ b/prowler/providers/azure/services/mysql/mysql_flexible_server_audit_log_enabled/mysql_flexible_server_audit_log_enabled.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "mysql_flexible_server_audit_log_enabled",
+  "CheckTitle": "Ensure server parameter 'audit_log_enabled' is set to 'ON' for MySQL Database Server",
+  "CheckType": [],
+  "ServiceName": "mysql",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "Microsoft.DBforMySQL/flexibleServers",
+  "Description": "Enable audit_log_enabled on MySQL Servers.",
+  "Risk": "Enabling audit_log_enabled helps MySQL Database to log items such as connection attempts to the server, DDL/DML access, and more. Log data can be used to identify, troubleshoot, and repair configuration errors and suboptimal performance.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/azure/mysql/single-server/how-to-configure-audit-logs-portal",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "https://www.tenable.com/audits/items/CIS_Microsoft_Azure_Foundations_v1.5.0_L2.audit:c073639a1ce546b535ba73afbf6542aa",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "1. Login to Azure Portal using https://portal.azure.com. 2. Select Azure Database for MySQL Servers. 3. Select a database. 4. Under Settings, select Server parameters. 5. Update audit_log_enabled parameter to ON 6. Under Monitoring, select Diagnostic settings. 7. Select + Add diagnostic setting. 8. Provide a diagnostic setting name. 9. Under Categories, select MySQL Audit Logs. 10. Specify destination details. 11. Click Save.",
+      "Url": "https://docs.microsoft.com/en-us/security/benchmark/azure/security-controls-v3-logging-threat-detection#lt-3-enable-logging-for-security-investigation"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": ""
+}
diff --git a/prowler/providers/azure/services/mysql/mysql_flexible_server_audit_log_enabled/mysql_flexible_server_audit_log_enabled.py b/prowler/providers/azure/services/mysql/mysql_flexible_server_audit_log_enabled/mysql_flexible_server_audit_log_enabled.py
new file mode 100644
index 00000000000..0ee742ff41b
--- /dev/null
+++ b/prowler/providers/azure/services/mysql/mysql_flexible_server_audit_log_enabled/mysql_flexible_server_audit_log_enabled.py
@@ -0,0 +1,35 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.mysql.mysql_client import mysql_client
+
+
+class mysql_flexible_server_audit_log_enabled(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for (
+            subscription_name,
+            servers,
+        ) in mysql_client.flexible_servers.items():
+            for (
+                server_name,
+                server,
+            ) in servers.items():
+                report = Check_Report_Azure(self.metadata())
+                report.status = "FAIL"
+                report.subscription = subscription_name
+                report.resource_name = server_name
+                report.resource_id = server_name
+                report.status_extended = f"Audit log is disabled for server {server_name} in subscription {subscription_name}."
+
+                if "audit_log_enabled" in server.configurations:
+                    report.resource_id = server.configurations[
+                        "audit_log_enabled"
+                    ].resource_id
+
+                    if server.configurations["audit_log_enabled"].value == "ON":
+                        report.status = "PASS"
+                        report.status_extended = f"Audit log is enabled for server {server_name} in subscription {subscription_name}."
+
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/mysql/mysql_flexible_server_minimum_tls_version_12/__init__.py b/prowler/providers/azure/services/mysql/mysql_flexible_server_minimum_tls_version_12/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/mysql/mysql_flexible_server_minimum_tls_version_12/mysql_flexible_server_minimum_tls_version_12.metadata.json b/prowler/providers/azure/services/mysql/mysql_flexible_server_minimum_tls_version_12/mysql_flexible_server_minimum_tls_version_12.metadata.json
new file mode 100644
index 00000000000..5ce7f839e66
--- /dev/null
+++ b/prowler/providers/azure/services/mysql/mysql_flexible_server_minimum_tls_version_12/mysql_flexible_server_minimum_tls_version_12.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "mysql_flexible_server_minimum_tls_version_12",
+  "CheckTitle": "Ensure 'TLS Version' is set to 'TLSV1.2' for MySQL flexible Database Server",
+  "CheckType": [],
+  "ServiceName": "mysql",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "high",
+  "ResourceType": "Microsoft.DBforMySQL/flexibleServers",
+  "Description": "Ensure TLS version on MySQL flexible servers is set to the default value.",
+  "Risk": "TLS connectivity helps to provide a new layer of security by connecting database server to client applications using Transport Layer Security (TLS). Enforcing TLS connections between database server and client applications helps protect against 'man in the middle' attacks by encrypting the data stream between the server and application.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/azure/mysql/concepts-ssl-connection-security",
+  "Remediation": {
+    "Code": {
+      "CLI": "az mysql flexible-server parameter set --name tls_version --resource-group  --server-name  --value TLSV1.2",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/MySQL/mysql-flexible-server-tls-version.html",
+      "Terraform": "https://docs.bridgecrew.io/docs/ensure-mysql-is-using-the-latest-version-of-tls-encryption#terraform"
+    },
+    "Recommendation": {
+      "Text": "1. Login to Azure Portal using https://portal.azure.com 2. Go to Azure Database for MySQL flexible servers 3. For each database, click on Server parameters under Settings 4. In the search box, type in tls_version 5. Click on the VALUE dropdown, and ensure only TLSV1.2 is selected for tls_version",
+      "Url": "https://docs.microsoft.com/en-us/azure/mysql/howto-configure-ssl"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": ""
+}
diff --git a/prowler/providers/azure/services/mysql/mysql_flexible_server_minimum_tls_version_12/mysql_flexible_server_minimum_tls_version_12.py b/prowler/providers/azure/services/mysql/mysql_flexible_server_minimum_tls_version_12/mysql_flexible_server_minimum_tls_version_12.py
new file mode 100644
index 00000000000..4af9f76ff28
--- /dev/null
+++ b/prowler/providers/azure/services/mysql/mysql_flexible_server_minimum_tls_version_12/mysql_flexible_server_minimum_tls_version_12.py
@@ -0,0 +1,39 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.mysql.mysql_client import mysql_client
+
+
+class mysql_flexible_server_minimum_tls_version_12(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for (
+            subscription_name,
+            servers,
+        ) in mysql_client.flexible_servers.items():
+            for (
+                server_name,
+                server,
+            ) in servers.items():
+                report = Check_Report_Azure(self.metadata())
+                report.status = "FAIL"
+                report.subscription = subscription_name
+                report.resource_name = server_name
+                report.resource_id = server_name
+                report.status_extended = f"TLS version is not configured in server {server_name} in subscription {subscription_name}."
+
+                if "tls_version" in server.configurations:
+                    report.status = "PASS"
+                    report.resource_id = server.configurations[
+                        "tls_version"
+                    ].resource_id
+                    report.status_extended = f"TLS version is {server.configurations['tls_version'].value} in server {server_name} in subscription {subscription_name}. This version of TLS is considered secure."
+
+                    tls_aviable = server.configurations["tls_version"].value.split(",")
+
+                    if "TLSv1.0" in tls_aviable or "TLSv1.1" in tls_aviable:
+                        report.status = "FAIL"
+                        report.status_extended = f"TLS version is {server.configurations['tls_version'].value} in server {server_name} in subscription {subscription_name}. There is at leat one version of TLS that is considered insecure."
+
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/mysql/mysql_flexible_server_ssl_connection_enabled/__init__.py b/prowler/providers/azure/services/mysql/mysql_flexible_server_ssl_connection_enabled/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/mysql/mysql_flexible_server_ssl_connection_enabled/mysql_flexible_server_ssl_connection_enabled.metadata.json b/prowler/providers/azure/services/mysql/mysql_flexible_server_ssl_connection_enabled/mysql_flexible_server_ssl_connection_enabled.metadata.json
new file mode 100644
index 00000000000..347ee586062
--- /dev/null
+++ b/prowler/providers/azure/services/mysql/mysql_flexible_server_ssl_connection_enabled/mysql_flexible_server_ssl_connection_enabled.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "mysql_flexible_server_ssl_connection_enabled",
+  "CheckTitle": "Ensure 'Enforce SSL connection' is set to 'Enabled' for Standard MySQL Database Server",
+  "CheckType": [],
+  "ServiceName": "mysql",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "high",
+  "ResourceType": "Microsoft.DBforMySQL/flexibleServers",
+  "Description": "Enable SSL connection on MYSQL Servers.",
+  "Risk": "SSL connectivity helps to provide a new layer of security by connecting database server to client applications using Secure Sockets Layer (SSL). Enforcing SSL connections between database server and client applications helps protect against 'man in the middle' attacks by encrypting the data stream between the server and application.",
+  "RelatedUrl": "https://learn.microsoft.com/en-us/azure/mysql/single-server/concepts-ssl-connection-security",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "https://www.tenable.com/policies/[type]/AC_AZURE_0131",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "1. Login to Azure Portal using https://portal.azure.com 2. Go to Azure Database for MySQL servers 3. For each database, click on Connection security 4. In SSL settings, click on ENABLED to Enforce SSL connections",
+      "Url": "https://docs.microsoft.com/en-us/azure/mysql/single-server/how-to-configure-ssl"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": ""
+}
diff --git a/prowler/providers/azure/services/mysql/mysql_flexible_server_ssl_connection_enabled/mysql_flexible_server_ssl_connection_enabled.py b/prowler/providers/azure/services/mysql/mysql_flexible_server_ssl_connection_enabled/mysql_flexible_server_ssl_connection_enabled.py
new file mode 100644
index 00000000000..90071d1de45
--- /dev/null
+++ b/prowler/providers/azure/services/mysql/mysql_flexible_server_ssl_connection_enabled/mysql_flexible_server_ssl_connection_enabled.py
@@ -0,0 +1,34 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.mysql.mysql_client import mysql_client
+
+
+class mysql_flexible_server_ssl_connection_enabled(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for (
+            subscription_name,
+            servers,
+        ) in mysql_client.flexible_servers.items():
+            for (
+                server_name,
+                server,
+            ) in servers.items():
+                report = Check_Report_Azure(self.metadata())
+                report.status = "FAIL"
+                report.subscription = subscription_name
+                report.resource_name = server_name
+                report.resource_id = server_name
+                report.status_extended = f"SSL connection is disabled for server {server_name} in subscription {subscription_name}."
+
+                if "require_secure_transport" in server.configurations:
+                    report.resource_id = server.configurations[
+                        "require_secure_transport"
+                    ].resource_id
+                    if server.configurations["require_secure_transport"].value == "ON":
+                        report.status = "PASS"
+                        report.status_extended = f"SSL connection is enabled for server {server_name} in subscription {subscription_name}."
+
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/mysql/mysql_service.py b/prowler/providers/azure/services/mysql/mysql_service.py
new file mode 100644
index 00000000000..465c8511cc1
--- /dev/null
+++ b/prowler/providers/azure/services/mysql/mysql_service.py
@@ -0,0 +1,78 @@
+from dataclasses import dataclass
+
+from azure.mgmt.rdbms.mysql_flexibleservers import MySQLManagementClient
+
+from prowler.lib.logger import logger
+from prowler.providers.azure.lib.service.service import AzureService
+
+
+########################## MySQL
+class MySQL(AzureService):
+    def __init__(self, audit_info):
+        super().__init__(MySQLManagementClient, audit_info)
+
+        self.flexible_servers = self.__get_flexible_servers__()
+
+    def __get_flexible_servers__(self):
+        logger.info("MySQL - Getting servers...")
+        servers = {}
+        for subscription_name, client in self.clients.items():
+            try:
+                servers_list = client.servers.list()
+                servers.update({subscription_name: {}})
+                for server in servers_list:
+                    servers[subscription_name].update(
+                        {
+                            server.name: FlexibleServer(
+                                resource_id=server.id,
+                                location=server.location,
+                                version=server.version,
+                                configurations=self.__get_configurations__(
+                                    client, server.id.split("/")[4], server.name
+                                ),
+                            )
+                        }
+                    )
+            except Exception as error:
+                logger.error(
+                    f"Subscription name: {subscription_name} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
+        return servers
+
+    def __get_configurations__(self, client, resource_group, server_name):
+        logger.info(f"MySQL - Getting configurations from server {server_name} ...")
+        configurations = {}
+        try:
+            configurations_list = client.configurations.list_by_server(
+                resource_group, server_name
+            )
+            for configuration in configurations_list:
+                configurations.update(
+                    {
+                        configuration.name: Configuration(
+                            resource_id=configuration.id,
+                            description=configuration.description,
+                            value=configuration.value,
+                        )
+                    }
+                )
+        except Exception as error:
+            logger.error(
+                f"Server name: {server_name} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+            )
+        return configurations
+
+
+@dataclass
+class Configuration:
+    resource_id: str
+    description: str
+    value: str
+
+
+@dataclass
+class FlexibleServer:
+    resource_id: str
+    location: str
+    version: str
+    configurations: dict[Configuration]
diff --git a/prowler/providers/azure/services/network/__init__.py b/prowler/providers/azure/services/network/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/network/network_bastion_host_exists/__init__.py b/prowler/providers/azure/services/network/network_bastion_host_exists/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/network/network_bastion_host_exists/network_bastion_host_exists.metadata.json b/prowler/providers/azure/services/network/network_bastion_host_exists/network_bastion_host_exists.metadata.json
new file mode 100644
index 00000000000..b79be02b8ee
--- /dev/null
+++ b/prowler/providers/azure/services/network/network_bastion_host_exists/network_bastion_host_exists.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "network_bastion_host_exists",
+  "CheckTitle": "Ensure an Azure Bastion Host Exists",
+  "CheckType": [],
+  "ServiceName": "network",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "Network",
+  "Description": "The Azure Bastion service allows secure remote access to Azure Virtual Machines over the Internet without exposing remote access protocol ports and services directly to the Internet. The Azure Bastion service provides this access using TLS over 443/TCP, and subscribes to hardened configurations within an organization's Azure Active Directory service.",
+  "Risk": "The Azure Bastion service allows organizations a more secure means of accessing Azure Virtual Machines over the Internet without assigning public IP addresses to those Virtual Machines. The Azure Bastion service provides Remote Desktop Protocol (RDP) and Secure Shell (SSH) access to Virtual Machines using TLS within a web browser, thus preventing organizations from opening up 3389/TCP and 22/TCP to the Internet on Azure Virtual Machines. Additional benefits of the Bastion service includes Multi-Factor Authentication, Conditional Access Policies, and any other hardening measures configured within Azure Active Directory using a central point of access.",
+  "RelatedUrl": "https://learn.microsoft.com/en-us/azure/bastion/bastion-overview#sku",
+  "Remediation": {
+    "Code": {
+      "CLI": "az network bastion create --location  --name  --public-ip-address  --resource-group  --vnet-name  --scale-units  --sku Standard [--disable-copy- paste true|false] [--enable-ip-connect true|false] [--enable-tunneling true|false]",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity-staging/knowledge-base/azure/Network/bastion-host-exists.html",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "From Azure Portal* 1. Click on Bastions 2. Select the Subscription 3. Select the Resource group 4. Type a Name for the new Bastion host 5. Select a Region 6. Choose Standard next to Tier 7. Use the slider to set the Instance count 8. Select the Virtual network or Create new 9. Select the Subnet named AzureBastionSubnet. Create a Subnet named AzureBastionSubnet using a /26 CIDR range if it doesn't already exist. 10. Selct the appropriate Public IP address option. 11. If Create new is selected for the Public IP address option, provide a Public IP address name. 12. If Use existing is selected for Public IP address option, select an IP address from Choose public IP address 13. Click Next: Tags > 14. Configure the appropriate Tags 15. Click Next: Advanced > 16. Select the appropriate Advanced options 17. Click Next: Review + create > 18. Click Create From Azure CLI az network bastion create --location  --name  --public-ip-address  --resource-group  --vnet-name  --scale-units  --sku Standard [--disable-copy- paste true|false] [--enable-ip-connect true|false] [--enable-tunneling true|false] From PowerShell Create the appropriate Virtual network settings and Public IP Address settings. $subnetName = 'AzureBastionSubnet' $subnet = New-AzVirtualNetworkSubnetConfig -Name $subnetName -AddressPrefix  $virtualNet = New-AzVirtualNetwork -Name  - ResourceGroupName  -Location  -AddressPrefix  -Subnet $subnet $publicip = New-AzPublicIpAddress -ResourceGroupName  - Name  -Location  -AllocationMethod Dynamic -Sku Standard",
+      "Url": "https://learn.microsoft.com/en-us/powershell/module/az.network/get-azbastion?view=azps-9.2.0"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "The Azure Bastion service incurs additional costs and requires a specific virtual network configuration. The Standard tier offers additional configuration options compared to the Basic tier and may incur additional costs for those added features."
+}
diff --git a/prowler/providers/azure/services/network/network_bastion_host_exists/network_bastion_host_exists.py b/prowler/providers/azure/services/network/network_bastion_host_exists/network_bastion_host_exists.py
new file mode 100644
index 00000000000..d2c3e9cbed6
--- /dev/null
+++ b/prowler/providers/azure/services/network/network_bastion_host_exists/network_bastion_host_exists.py
@@ -0,0 +1,33 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.network.network_client import network_client
+
+
+class network_bastion_host_exists(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for subscription, bastion_hosts in network_client.bastion_hosts.items():
+            if not bastion_hosts:
+                status = "FAIL"
+                status_extended = (
+                    f"Bastion Host from subscription {subscription} does not exist"
+                )
+                resource_id = "N/A"
+            else:
+                bastion_names = ", ".join(
+                    [bastion_host.name for bastion_host in bastion_hosts]
+                )
+                resource_id = ", ".join(
+                    [bastion_host.id for bastion_host in bastion_hosts]
+                )
+                status = "PASS"
+                status_extended = f"Bastion Host from subscription {subscription} available are: {bastion_names}"
+
+            report = Check_Report_Azure(self.metadata())
+            report.subscription = subscription
+            report.resource_name = "Bastion Host"
+            report.resource_id = resource_id
+            report.status = status
+            report.status_extended = status_extended
+            findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/network/network_client.py b/prowler/providers/azure/services/network/network_client.py
new file mode 100644
index 00000000000..09632b9c641
--- /dev/null
+++ b/prowler/providers/azure/services/network/network_client.py
@@ -0,0 +1,4 @@
+from prowler.providers.azure.lib.audit_info.audit_info import azure_audit_info
+from prowler.providers.azure.services.network.network_service import Network
+
+network_client = Network(azure_audit_info)
diff --git a/prowler/providers/azure/services/network/network_flow_log_more_than_90_days/__init__.py b/prowler/providers/azure/services/network/network_flow_log_more_than_90_days/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/network/network_flow_log_more_than_90_days/network_flow_log_more_than_90_days.metadata.json b/prowler/providers/azure/services/network/network_flow_log_more_than_90_days/network_flow_log_more_than_90_days.metadata.json
new file mode 100644
index 00000000000..1e2e4fbc782
--- /dev/null
+++ b/prowler/providers/azure/services/network/network_flow_log_more_than_90_days/network_flow_log_more_than_90_days.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "network_flow_log_more_than_90_days",
+  "CheckTitle": "Ensure that Network Security Group Flow Log retention period is 'greater than 90 days'",
+  "CheckType": [],
+  "ServiceName": "network",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "Network",
+  "Description": "Network Security Group Flow Logs should be enabled and the retention period set to greater than or equal to 90 days.",
+  "Risk": "Flow logs enable capturing information about IP traffic flowing in and out of network security groups. Logs can be used to check for anomalies and give insight into suspected breaches.",
+  "RelatedUrl": " https://docs.microsoft.com/en-us/azure/network-watcher/network-watcher-nsg-flow-logging-overview",
+  "Remediation": {
+    "Code": {
+      "CLI": "az network watcher flow-log configure --nsg  --enabled true --resource-group  --retention 91 -- storage-account ",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity-staging/knowledge-base/azure/Network/sufficient-nsg-flow-log-retention-period.html",
+      "Terraform": "https://docs.bridgecrew.io/docs/bc_azr_logging_1#terraform"
+    },
+    "Recommendation": {
+      "Text": "From Azure Portal 1. Go to Network Watcher 2. Select NSG flow logs blade in the Logs section 3. Select each Network Security Group from the list 4. Ensure Status is set to On 5. Ensure Retention (days) setting greater than 90 days 6. Select your storage account in the Storage account field 7. Select Save From Azure CLI Enable the NSG flow logs and set the Retention (days) to greater than or equal to 90 days. az network watcher flow-log configure --nsg  --enabled true --resource-group  --retention 91 --storage-account ",
+      "Url": "https://docs.microsoft.com/en-us/cli/azure/network/watcher/flow-log?view=azure-cli-latest"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "This will keep IP traffic logs for longer than 90 days. As a level 2, first determine your need to retain data, then apply your selection here. As this is data stored for longer, your monthly storage costs will increase depending on your data use."
+}
diff --git a/prowler/providers/azure/services/network/network_flow_log_more_than_90_days/network_flow_log_more_than_90_days.py b/prowler/providers/azure/services/network/network_flow_log_more_than_90_days/network_flow_log_more_than_90_days.py
new file mode 100644
index 00000000000..d37115dd4e2
--- /dev/null
+++ b/prowler/providers/azure/services/network/network_flow_log_more_than_90_days/network_flow_log_more_than_90_days.py
@@ -0,0 +1,33 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.network.network_client import network_client
+
+
+class network_flow_log_more_than_90_days(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for subscription, network_watchers in network_client.network_watchers.items():
+            for network_watcher in network_watchers:
+                report = Check_Report_Azure(self.metadata())
+                report.subscription = subscription
+                report.resource_name = network_watcher.name
+                report.resource_id = network_watcher.id
+                if network_watcher.flow_logs:
+                    report.status = "PASS"
+                    report.status_extended = f"Network Watcher {network_watcher.name} from subscription {subscription} has flow logs enabled for more than 90 days"
+                    has_failed = False
+                    for flow_log in network_watcher.flow_logs:
+                        if not has_failed:
+                            if not flow_log.enabled:
+                                report.status = "FAIL"
+                                report.status_extended = f"Network Watcher {network_watcher.name} from subscription {subscription} has flow logs disabled"
+                                has_failed = True
+                            elif flow_log.retention_policy.days < 90 and not has_failed:
+                                report.status = "FAIL"
+                                report.status_extended = f"Network Watcher {network_watcher.name} from subscription {subscription} flow logs retention policy is less than 90 days"
+                                has_failed = True
+                else:
+                    report.status = "FAIL"
+                    report.status_extended = f"Network Watcher {network_watcher.name} from subscription {subscription} has no flow logs"
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/network/network_http_internet_access_restricted/__init__.py b/prowler/providers/azure/services/network/network_http_internet_access_restricted/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/network/network_http_internet_access_restricted/network_http_internet_access_restricted.metadata.json b/prowler/providers/azure/services/network/network_http_internet_access_restricted/network_http_internet_access_restricted.metadata.json
new file mode 100644
index 00000000000..bd04ea80b7f
--- /dev/null
+++ b/prowler/providers/azure/services/network/network_http_internet_access_restricted/network_http_internet_access_restricted.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "network_http_internet_access_restricted",
+  "CheckTitle": "Ensure that HTTP(S) access from the Internet is evaluated and restricted",
+  "CheckType": [],
+  "ServiceName": "network",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "high",
+  "ResourceType": "Network",
+  "Description": "Network security groups should be periodically evaluated for port misconfigurations. Where certain ports and protocols may be exposed to the Internet, they should be evaluated for necessity and restricted wherever they are not explicitly required and narrowly configured.",
+  "Risk": "The potential security problem with using HTTP(S) over the Internet is that attackers can use various brute force techniques to gain access to Azure resources. Once the attackers gain access, they can use the resource as a launch point for compromising other resources within the Azure tenant.",
+  "RelatedUrl": "https://learn.microsoft.com/en-us/security/benchmark/azure/security-controls-v3-network-security#ns-1-establish-network-segmentation-boundaries",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity-staging/knowledge-base/azure/Network/unrestricted-http-access.html",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "Where HTTP(S) is not explicitly required and narrowly configured for resources attached to the Network Security Group, Internet-level access to your Azure resources should be restricted or eliminated. For internal access to relevant resources, configure an encrypted network tunnel such as: ExpressRoute Site-to-site VPN Point-to-site VPN",
+      "Url": ""
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": ""
+}
diff --git a/prowler/providers/azure/services/network/network_http_internet_access_restricted/network_http_internet_access_restricted.py b/prowler/providers/azure/services/network/network_http_internet_access_restricted/network_http_internet_access_restricted.py
new file mode 100644
index 00000000000..074cc9abdd7
--- /dev/null
+++ b/prowler/providers/azure/services/network/network_http_internet_access_restricted/network_http_internet_access_restricted.py
@@ -0,0 +1,36 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.network.network_client import network_client
+
+
+class network_http_internet_access_restricted(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for subscription, security_groups in network_client.security_groups.items():
+            for security_group in security_groups:
+                report = Check_Report_Azure(self.metadata())
+                report.subscription = subscription
+                report.resource_name = security_group.name
+                report.resource_id = security_group.id
+                report.status = "PASS"
+                report.status_extended = f"Security Group {security_group.name} from subscription {subscription} has HTTP internet access restricted."
+                rule_fail_condition = any(
+                    (
+                        rule.destination_port_range == "80"
+                        or (
+                            "-" in rule.destination_port_range
+                            and int(rule.destination_port_range.split("-")[0]) <= 80
+                            and int(rule.destination_port_range.split("-")[1]) >= 80
+                        )
+                    )
+                    and rule.protocol in ["TCP", "*"]
+                    and rule.source_address_prefix in ["Internet", "*", "0.0.0.0/0"]
+                    and rule.access == "Allow"
+                    and rule.direction == "Inbound"
+                    for rule in security_group.security_rules
+                )
+                if rule_fail_condition:
+                    report.status = "FAIL"
+                    report.status_extended = f"Security Group {security_group.name} from subscription {subscription} has HTTP internet access allowed."
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/network/network_public_ip_shodan/__init__.py b/prowler/providers/azure/services/network/network_public_ip_shodan/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/network/network_public_ip_shodan/network_public_ip_shodan.metadata.json b/prowler/providers/azure/services/network/network_public_ip_shodan/network_public_ip_shodan.metadata.json
new file mode 100644
index 00000000000..c27bf219c8d
--- /dev/null
+++ b/prowler/providers/azure/services/network/network_public_ip_shodan/network_public_ip_shodan.metadata.json
@@ -0,0 +1,32 @@
+{
+  "Provider": "azure",
+  "CheckID": "network_public_ip_shodan",
+  "CheckTitle": "Check if an Azure Public IP is exposed in Shodan (requires Shodan API KEY).",
+  "CheckType": [],
+  "ServiceName": "network",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "high",
+  "ResourceType": "Network",
+  "Description": "Check if an Azure Public IP is exposed in Shodan (requires Shodan API KEY).",
+  "Risk": "If an Azure Public IP is exposed in Shodan, it can be accessed by anyone on the internet. This can lead to unauthorized access to your resources.",
+  "RelatedUrl": "",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "Check Identified IPs; Consider changing them to private ones and delete them from Shodan.",
+      "Url": "https://www.shodan.io/"
+    }
+  },
+  "Categories": [
+    "internet-exposed"
+  ],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": ""
+}
diff --git a/prowler/providers/azure/services/network/network_public_ip_shodan/network_public_ip_shodan.py b/prowler/providers/azure/services/network/network_public_ip_shodan/network_public_ip_shodan.py
new file mode 100644
index 00000000000..f8123a0ba4a
--- /dev/null
+++ b/prowler/providers/azure/services/network/network_public_ip_shodan/network_public_ip_shodan.py
@@ -0,0 +1,40 @@
+import shodan
+
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.lib.logger import logger
+from prowler.providers.azure.services.network.network_client import network_client
+
+
+class network_public_ip_shodan(Check):
+    def execute(self):
+        findings = []
+        shodan_api_key = network_client.audit_config.get("shodan_api_key")
+        if shodan_api_key:
+            api = shodan.Shodan(shodan_api_key)
+            for subscription, public_ips in network_client.public_ip_addresses.items():
+                for ip in public_ips:
+                    report = Check_Report_Azure(self.metadata())
+                    report.subscription = subscription
+                    report.resource_name = ip.name
+                    report.resource_id = ip.id
+                    try:
+                        shodan_info = api.host(ip.ip_address)
+                        report.status = "FAIL"
+                        report.status_extended = f"Public IP {ip.ip_address} listed in Shodan with open ports {str(shodan_info['ports'])} and ISP {shodan_info['isp']} in {shodan_info['country_name']}. More info at https://www.shodan.io/host/{ip.ip_address}."
+                        findings.append(report)
+                    except shodan.APIError as error:
+                        if "No information available for that IP" in error.value:
+                            report.status = "PASS"
+                            report.status_extended = (
+                                f"Public IP {ip.ip_address} is not listed in Shodan."
+                            )
+                            findings.append(report)
+                            continue
+                        else:
+                            logger.error(f"Unknown Shodan API Error: {error.value}")
+
+        else:
+            logger.error(
+                "No Shodan API Key -- Please input a Shodan API Key with -N/--shodan or in config.yaml"
+            )
+        return findings
diff --git a/prowler/providers/azure/services/network/network_rdp_internet_access_restricted/__init__.py b/prowler/providers/azure/services/network/network_rdp_internet_access_restricted/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/network/network_rdp_internet_access_restricted/network_rdp_internet_access_restricted.metadata.json b/prowler/providers/azure/services/network/network_rdp_internet_access_restricted/network_rdp_internet_access_restricted.metadata.json
new file mode 100644
index 00000000000..f8f4d954b23
--- /dev/null
+++ b/prowler/providers/azure/services/network/network_rdp_internet_access_restricted/network_rdp_internet_access_restricted.metadata.json
@@ -0,0 +1,31 @@
+{
+    "Provider": "azure",
+    "CheckID": "network_rdp_internet_access_restricted",
+    "CheckTitle": "Ensure that RDP access from the Internet is evaluated and restricted",
+    "CheckType": [],
+    "ServiceName": "network",
+    "SubServiceName": "",
+    "ResourceIdTemplate": "",
+    "Severity": "high",
+    "ResourceType": "Network",
+    "Description": "Network security groups should be periodically evaluated for port misconfigurations. Where certain ports and protocols may be exposed to the Internet, they should be evaluated for necessity and restricted wherever they are not explicitly required.",
+    "Risk": "The potential security problem with using RDP over the Internet is that attackers can use various brute force techniques to gain access to Azure Virtual Machines. Once the attackers gain access, they can use a virtual machine as a launch point for compromising other machines on an Azure Virtual Network or even attack networked devices outside of Azure.",
+    "RelatedUrl": "https://docs.microsoft.com/en-us/azure/security/azure-security-network-security-best-practices#disable-rdpssh-access-to-azure-virtual-machines",
+    "Remediation": {
+      "Code": {
+        "CLI": "",
+        "NativeIaC": "",
+        "Other": "https://www.trendmicro.com/cloudoneconformity-staging/knowledge-base/azure/Network/unrestricted-rdp-access.html#",
+        "Terraform": "https://docs.bridgecrew.io/docs/bc_azr_networking_2#terraform"
+      },
+      "Recommendation": {
+        "Text": "Where RDP is not explicitly required and narrowly configured for resources attached to the Network Security Group, Internet-level access to your Azure resources should be restricted or eliminated. For internal access to relevant resources, configure an encrypted network tunnel such as: ExpressRoute Site-to-site VPN Point-to-site VPN",
+        "Url": "https://docs.microsoft.com/en-us/security/benchmark/azure/security-controls-v3-network-security#ns-1-establish-network-segmentation-boundaries"
+      }
+    },
+    "Categories": [],
+    "DependsOn": [],
+    "RelatedTo": [],
+    "Notes": ""
+  }
+  
\ No newline at end of file
diff --git a/prowler/providers/azure/services/network/network_rdp_internet_access_restricted/network_rdp_internet_access_restricted.py b/prowler/providers/azure/services/network/network_rdp_internet_access_restricted/network_rdp_internet_access_restricted.py
new file mode 100644
index 00000000000..2ec314e0322
--- /dev/null
+++ b/prowler/providers/azure/services/network/network_rdp_internet_access_restricted/network_rdp_internet_access_restricted.py
@@ -0,0 +1,36 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.network.network_client import network_client
+
+
+class network_rdp_internet_access_restricted(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for subscription, security_groups in network_client.security_groups.items():
+            for security_group in security_groups:
+                report = Check_Report_Azure(self.metadata())
+                report.subscription = subscription
+                report.resource_name = security_group.name
+                report.resource_id = security_group.id
+                report.status = "PASS"
+                report.status_extended = f"Security Group {security_group.name} from subscription {subscription} has RDP internet access restricted."
+                rule_fail_condition = any(
+                    (
+                        rule.destination_port_range == "3389"
+                        or (
+                            "-" in rule.destination_port_range
+                            and int(rule.destination_port_range.split("-")[0]) <= 3389
+                            and int(rule.destination_port_range.split("-")[1]) >= 3389
+                        )
+                    )
+                    and rule.protocol in ["TCP", "*"]
+                    and rule.source_address_prefix in ["Internet", "*", "0.0.0.0/0"]
+                    and rule.access == "Allow"
+                    and rule.direction == "Inbound"
+                    for rule in security_group.security_rules
+                )
+                if rule_fail_condition:
+                    report.status = "FAIL"
+                    report.status_extended = f"Security Group {security_group.name} from subscription {subscription} has RDP internet access allowed."
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/network/network_service.py b/prowler/providers/azure/services/network/network_service.py
new file mode 100644
index 00000000000..1a7d55c8b33
--- /dev/null
+++ b/prowler/providers/azure/services/network/network_service.py
@@ -0,0 +1,148 @@
+from dataclasses import dataclass
+
+from azure.mgmt.network import NetworkManagementClient
+
+from prowler.lib.logger import logger
+from prowler.providers.azure.lib.service.service import AzureService
+
+
+########################## SQLServer
+class Network(AzureService):
+    def __init__(self, audit_info):
+        super().__init__(NetworkManagementClient, audit_info)
+        self.security_groups = self.__get_security_groups__()
+        self.bastion_hosts = self.__get_bastion_hosts__()
+        self.network_watchers = self.__get_network_watchers__()
+        self.public_ip_addresses = self.__get_public_ip_addresses__()
+
+    def __get_security_groups__(self):
+        logger.info("Network - Getting Network Security Groups...")
+        security_groups = {}
+        for subscription, client in self.clients.items():
+            try:
+                security_groups.update({subscription: []})
+                security_groups_list = client.network_security_groups.list_all()
+                for security_group in security_groups_list:
+                    security_groups[subscription].append(
+                        SecurityGroup(
+                            id=security_group.id,
+                            name=security_group.name,
+                            location=security_group.location,
+                            security_rules=security_group.security_rules,
+                        )
+                    )
+
+            except Exception as error:
+                logger.error(
+                    f"Subscription name: {subscription} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
+        return security_groups
+
+    def __get_network_watchers__(self):
+        logger.info("Network - Getting Network Watchers...")
+        network_watchers = {}
+        for subscription, client in self.clients.items():
+            try:
+                network_watchers.update({subscription: []})
+                network_watchers_list = client.network_watchers.list_all()
+                for network_watcher in network_watchers_list:
+                    flow_logs = self.__get_flow_logs__(
+                        subscription, network_watcher.name
+                    )
+                    network_watchers[subscription].append(
+                        NetworkWatcher(
+                            id=network_watcher.id,
+                            name=network_watcher.name,
+                            location=network_watcher.location,
+                            flow_logs=flow_logs,
+                        )
+                    )
+
+            except Exception as error:
+                logger.error(
+                    f"Subscription name: {subscription} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
+        return network_watchers
+
+    def __get_flow_logs__(self, subscription, network_watcher_name):
+        logger.info("Network - Getting Flow Logs...")
+        client = self.clients[subscription]
+        resource_group = "NetworkWatcherRG"
+        flow_logs = client.flow_logs.list(resource_group, network_watcher_name)
+        return flow_logs
+
+    def __get_bastion_hosts__(self):
+        logger.info("Network - Getting Bastion Hosts...")
+        bastion_hosts = {}
+        for subscription, client in self.clients.items():
+            try:
+                bastion_hosts.update({subscription: []})
+                bastion_hosts_list = client.bastion_hosts.list()
+                for bastion_host in bastion_hosts_list:
+                    bastion_hosts[subscription].append(
+                        BastionHost(
+                            id=bastion_host.id,
+                            name=bastion_host.name,
+                            location=bastion_host.location,
+                        )
+                    )
+
+            except Exception as error:
+                logger.error(
+                    f"Subscription name: {subscription} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
+        return bastion_hosts
+
+    def __get_public_ip_addresses__(self):
+        logger.info("Network - Getting Public IP Addresses...")
+        public_ip_addresses = {}
+        for subscription, client in self.clients.items():
+            try:
+                public_ip_addresses.update({subscription: []})
+                public_ip_addresses_list = client.public_ip_addresses.list_all()
+                for public_ip_address in public_ip_addresses_list:
+                    public_ip_addresses[subscription].append(
+                        PublicIp(
+                            id=public_ip_address.id,
+                            name=public_ip_address.name,
+                            location=public_ip_address.location,
+                            ip_address=public_ip_address.ip_address,
+                        )
+                    )
+
+            except Exception as error:
+                logger.error(
+                    f"Subscription name: {subscription} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
+        return public_ip_addresses
+
+
+@dataclass
+class BastionHost:
+    id: str
+    name: str
+    location: str
+
+
+@dataclass
+class NetworkWatcher:
+    id: str
+    name: str
+    location: str
+    flow_logs: list
+
+
+@dataclass
+class SecurityGroup:
+    id: str
+    name: str
+    location: str
+    security_rules: list
+
+
+@dataclass
+class PublicIp:
+    id: str
+    name: str
+    location: str
+    ip_address: str
diff --git a/prowler/providers/azure/services/network/network_ssh_internet_access_restricted/__init__.py b/prowler/providers/azure/services/network/network_ssh_internet_access_restricted/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/network/network_ssh_internet_access_restricted/network_ssh_internet_access_restricted.metadata.json b/prowler/providers/azure/services/network/network_ssh_internet_access_restricted/network_ssh_internet_access_restricted.metadata.json
new file mode 100644
index 00000000000..609d63b67dc
--- /dev/null
+++ b/prowler/providers/azure/services/network/network_ssh_internet_access_restricted/network_ssh_internet_access_restricted.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "network_ssh_internet_access_restricted",
+  "CheckTitle": "Ensure that SSH access from the Internet is evaluated and restricted",
+  "CheckType": [],
+  "ServiceName": "network",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "high",
+  "ResourceType": "Network",
+  "Description": "Network security groups should be periodically evaluated for port misconfigurations. Where certain ports and protocols may be exposed to the Internet, they should be evaluated for necessity and restricted wherever they are not explicitly required.",
+  "Risk": "The potential security problem with using SSH over the Internet is that attackers can use various brute force techniques to gain access to Azure Virtual Machines. Once the attackers gain access, they can use a virtual machine as a launch point for compromising other machines on the Azure Virtual Network or even attack networked devices outside of Azure.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/azure/security/azure-security-network-security-best-practices#disable-rdpssh-access-to-azure-virtual-machines",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity-staging/knowledge-base/azure/Network/unrestricted-ssh-access.html",
+      "Terraform": "https://docs.bridgecrew.io/docs/bc_azr_networking_3#terraform"
+    },
+    "Recommendation": {
+      "Text": "Where SSH is not explicitly required and narrowly configured for resources attached to the Network Security Group, Internet-level access to your Azure resources should be restricted or eliminated. For internal access to relevant resources, configure an encrypted network tunnel such as: ExpressRoute Site-to-site VPN Point-to-site VPN",
+      "Url": "https://docs.microsoft.com/en-us/security/benchmark/azure/security-controls-v3-network-security#ns-1-establish-network-segmentation-boundaries"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": ""
+}
diff --git a/prowler/providers/azure/services/network/network_ssh_internet_access_restricted/network_ssh_internet_access_restricted.py b/prowler/providers/azure/services/network/network_ssh_internet_access_restricted/network_ssh_internet_access_restricted.py
new file mode 100644
index 00000000000..8efe55b38a2
--- /dev/null
+++ b/prowler/providers/azure/services/network/network_ssh_internet_access_restricted/network_ssh_internet_access_restricted.py
@@ -0,0 +1,36 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.network.network_client import network_client
+
+
+class network_ssh_internet_access_restricted(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for subscription, security_groups in network_client.security_groups.items():
+            for security_group in security_groups:
+                report = Check_Report_Azure(self.metadata())
+                report.subscription = subscription
+                report.resource_name = security_group.name
+                report.resource_id = security_group.id
+                report.status = "PASS"
+                report.status_extended = f"Security Group {security_group.name} from subscription {subscription} has SSH internet access restricted."
+                rule_fail_condition = any(
+                    (
+                        rule.destination_port_range == "22"
+                        or (
+                            "-" in rule.destination_port_range
+                            and int(rule.destination_port_range.split("-")[0]) <= 22
+                            and int(rule.destination_port_range.split("-")[1]) >= 22
+                        )
+                    )
+                    and rule.protocol in ["TCP", "*"]
+                    and rule.source_address_prefix in ["Internet", "*", "0.0.0.0/0"]
+                    and rule.access == "Allow"
+                    and rule.direction == "Inbound"
+                    for rule in security_group.security_rules
+                )
+                if rule_fail_condition:
+                    report.status = "FAIL"
+                    report.status_extended = f"Security Group {security_group.name} from subscription {subscription} has SSH internet access allowed."
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/network/network_udp_internet_access_restricted/__init__.py b/prowler/providers/azure/services/network/network_udp_internet_access_restricted/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/network/network_udp_internet_access_restricted/network_udp_internet_access_restricted.metadata.json b/prowler/providers/azure/services/network/network_udp_internet_access_restricted/network_udp_internet_access_restricted.metadata.json
new file mode 100644
index 00000000000..95732507e31
--- /dev/null
+++ b/prowler/providers/azure/services/network/network_udp_internet_access_restricted/network_udp_internet_access_restricted.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "network_udp_internet_access_restricted",
+  "CheckTitle": "Ensure that UDP access from the Internet is evaluated and restricted",
+  "CheckType": [],
+  "ServiceName": "network",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "high",
+  "ResourceType": "Network",
+  "Description": "Network security groups should be periodically evaluated for port misconfigurations. Where certain ports and protocols may be exposed to the Internet, they should be evaluated for necessity and restricted wherever they are not explicitly required.",
+  "Risk": "The potential security problem with broadly exposing UDP services over the Internet is that attackers can use DDoS amplification techniques to reflect spoofed UDP traffic from Azure Virtual Machines. The most common types of these attacks use exposed DNS, NTP, SSDP, SNMP, CLDAP and other UDP-based services as amplification sources for disrupting services of other machines on the Azure Virtual Network or even attack networked devices outside of Azure.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/azure/security/fundamentals/network-best-practices#secure-your-critical-azure-service-resources-to-only-your-virtual-networks",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity-staging/knowledge-base/azure/Network/unrestricted-udp-access.html#",
+      "Terraform": "https://docs.bridgecrew.io/docs/ensure-that-udp-services-are-restricted-from-the-internet#terraform"
+    },
+    "Recommendation": {
+      "Text": "Where UDP is not explicitly required and narrowly configured for resources attached tothe Network Security Group, Internet-level access to your Azure resources should be restricted or eliminated. For internal access to relevant resources, configure an encrypted network tunnel such as: ExpressRouteSite-to-site VPN Point-to-site VPN",
+      "Url": "https://docs.microsoft.com/en-us/azure/security/fundamentals/ddos-best-practices"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": ""
+}
diff --git a/prowler/providers/azure/services/network/network_udp_internet_access_restricted/network_udp_internet_access_restricted.py b/prowler/providers/azure/services/network/network_udp_internet_access_restricted/network_udp_internet_access_restricted.py
new file mode 100644
index 00000000000..89443bb9d2e
--- /dev/null
+++ b/prowler/providers/azure/services/network/network_udp_internet_access_restricted/network_udp_internet_access_restricted.py
@@ -0,0 +1,28 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.network.network_client import network_client
+
+
+class network_udp_internet_access_restricted(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for subscription, security_groups in network_client.security_groups.items():
+            for security_group in security_groups:
+                report = Check_Report_Azure(self.metadata())
+                report.subscription = subscription
+                report.resource_name = security_group.name
+                report.resource_id = security_group.id
+                report.status = "PASS"
+                report.status_extended = f"Security Group {security_group.name} from subscription {subscription} has UDP internet access restricted."
+                rule_fail_condition = any(
+                    rule.protocol in ["UDP"]
+                    and rule.source_address_prefix in ["Internet", "*", "0.0.0.0/0"]
+                    and rule.access == "Allow"
+                    and rule.direction == "Inbound"
+                    for rule in security_group.security_rules
+                )
+                if rule_fail_condition:
+                    report.status = "FAIL"
+                    report.status_extended = f"Security Group {security_group.name} from subscription {subscription} has UDP internet access allowed."
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/network/network_watcher_enabled/__init__.py b/prowler/providers/azure/services/network/network_watcher_enabled/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/network/network_watcher_enabled/network_watcher_enabled.metadata.json b/prowler/providers/azure/services/network/network_watcher_enabled/network_watcher_enabled.metadata.json
new file mode 100644
index 00000000000..83513a2073f
--- /dev/null
+++ b/prowler/providers/azure/services/network/network_watcher_enabled/network_watcher_enabled.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "network_watcher_enabled",
+  "CheckTitle": "Ensure that Network Watcher is 'Enabled'",
+  "CheckType": [],
+  "ServiceName": "network",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "Network",
+  "Description": "Enable Network Watcher for Azure subscriptions.",
+  "Risk": "Network diagnostic and visualization tools available with Network Watcher help users understand, diagnose, and gain insights to the network in Azure.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/azure/network-watcher/network-watcher-monitoring-overview",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity-staging/knowledge-base/azure/Network/enable-network-watcher.html#",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "Opting out of Network Watcher automatic enablement is a permanent change. Once you opt-out you cannot opt-in without contacting support.",
+      "Url": "https://docs.azure.cn/zh-cn/cli/network/watcher?view=azure-cli-latest#az_network_watcher_list"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "There are additional costs per transaction to run and store network data. For high-volume networks these charges will add up quickly."
+}
diff --git a/prowler/providers/azure/services/network/network_watcher_enabled/network_watcher_enabled.py b/prowler/providers/azure/services/network/network_watcher_enabled/network_watcher_enabled.py
new file mode 100644
index 00000000000..e4d6797ed91
--- /dev/null
+++ b/prowler/providers/azure/services/network/network_watcher_enabled/network_watcher_enabled.py
@@ -0,0 +1,27 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.network.network_client import network_client
+
+
+class network_watcher_enabled(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        nw_locations = []
+        for subscription, network_watchers in network_client.network_watchers.items():
+            for network_watcher in network_watchers:
+                nw_locations.append(network_watcher.location)
+        for subscription, locations in network_client.locations.items():
+            for location in locations:
+                report = Check_Report_Azure(self.metadata())
+                report.subscription = subscription
+                report.resource_name = "Network Watcher"
+                report.resource_id = f"/subscriptions/{subscription}/providers/Microsoft.Network/networkWatchers/{location}"
+                if location not in nw_locations:
+                    report.status = "FAIL"
+                    report.status_extended = f"Network Watcher is not enabled for the location {location} in subscription {subscription}."
+                    findings.append(report)
+                else:
+                    report.status = "PASS"
+                    report.status_extended = f"Network Watcher is enabled for the location {location} in subscription {subscription}."
+                    findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/policy/__init__.py b/prowler/providers/azure/services/policy/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/policy/policy_client.py b/prowler/providers/azure/services/policy/policy_client.py
new file mode 100644
index 00000000000..5297921292c
--- /dev/null
+++ b/prowler/providers/azure/services/policy/policy_client.py
@@ -0,0 +1,4 @@
+from prowler.providers.azure.lib.audit_info.audit_info import azure_audit_info
+from prowler.providers.azure.services.policy.policy_service import Policy
+
+policy_client = Policy(azure_audit_info)
diff --git a/prowler/providers/azure/services/policy/policy_ensure_asc_enforcement_enabled/__init__.py b/prowler/providers/azure/services/policy/policy_ensure_asc_enforcement_enabled/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/policy/policy_ensure_asc_enforcement_enabled/policy_ensure_asc_enforcement_enabled.metadata.json b/prowler/providers/azure/services/policy/policy_ensure_asc_enforcement_enabled/policy_ensure_asc_enforcement_enabled.metadata.json
new file mode 100644
index 00000000000..21d1a0eb737
--- /dev/null
+++ b/prowler/providers/azure/services/policy/policy_ensure_asc_enforcement_enabled/policy_ensure_asc_enforcement_enabled.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "policy_ensure_asc_enforcement_enabled",
+  "CheckTitle": "Ensure Any of the ASC Default Policy Settings are Not Set to 'Disabled'",
+  "CheckType": [],
+  "ServiceName": "policy",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "Microsoft.Authorization/policyAssignments",
+  "Description": "None of the settings offered by ASC Default policy should be set to effect Disabled.",
+  "Risk": "A security policy defines the desired configuration of your workloads and helps ensure compliance with company or regulatory security requirements. ASC Default policy is associated with every subscription by default. ASC default policy assignment is a set of security recommendations based on best practices. Enabling recommendations in ASC default policy ensures that Azure security center provides the ability to monitor all of the supported recommendations and optionally allow automated action for a few of the supported recommendations.",
+  "RelatedUrl": "https://learn.microsoft.com/en-us/azure/defender-for-cloud/security-policy-concept",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "1. From Azure Home select the Portal Menu 2. Select Policy 3. Select ASC Default for each subscription 4. Click on 'view Assignment' 5. Click on 'Edit assignment' 6. Ensure Policy Enforcement is Enabled 7. Click 'Review + Save'",
+      "Url": "https://learn.microsoft.com/en-us/azure/defender-for-cloud/implement-security-recommendations"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": ""
+}
diff --git a/prowler/providers/azure/services/policy/policy_ensure_asc_enforcement_enabled/policy_ensure_asc_enforcement_enabled.py b/prowler/providers/azure/services/policy/policy_ensure_asc_enforcement_enabled/policy_ensure_asc_enforcement_enabled.py
new file mode 100644
index 00000000000..92295f0a002
--- /dev/null
+++ b/prowler/providers/azure/services/policy/policy_ensure_asc_enforcement_enabled/policy_ensure_asc_enforcement_enabled.py
@@ -0,0 +1,24 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.policy.policy_client import policy_client
+
+
+class policy_ensure_asc_enforcement_enabled(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for subscription_name, policies in policy_client.policy_assigments.items():
+            if "SecurityCenterBuiltIn" in policies:
+                report = Check_Report_Azure(self.metadata())
+                report.status = "PASS"
+                report.subscription = subscription_name
+                report.resource_name = "SecurityCenterBuiltIn"
+                report.resource_id = policies["SecurityCenterBuiltIn"].id
+                report.status_extended = f"Policy assigment '{policies['SecurityCenterBuiltIn'].id}' is configured with enforcement mode '{policies['SecurityCenterBuiltIn'].enforcement_mode}'."
+
+                if policies["SecurityCenterBuiltIn"].enforcement_mode != "Default":
+                    report.status = "FAIL"
+                    report.status_extended = f"Policy assigment '{policies['SecurityCenterBuiltIn'].id}' is not configured with enforcement mode Default."
+
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/policy/policy_service.py b/prowler/providers/azure/services/policy/policy_service.py
new file mode 100644
index 00000000000..af3e4fe673c
--- /dev/null
+++ b/prowler/providers/azure/services/policy/policy_service.py
@@ -0,0 +1,45 @@
+from dataclasses import dataclass
+
+from azure.mgmt.resource.policy import PolicyClient
+
+from prowler.lib.logger import logger
+from prowler.providers.azure.lib.audit_info.models import Azure_Audit_Info
+from prowler.providers.azure.lib.service.service import AzureService
+
+
+########################## Policy
+class Policy(AzureService):
+    def __init__(self, audit_info: Azure_Audit_Info):
+        super().__init__(PolicyClient, audit_info)
+        self.policy_assigments = self.__get_policy_assigments__()
+
+    def __get_policy_assigments__(self):
+        logger.info("Policy - Getting policy assigments...")
+        policy_assigments = {}
+
+        for subscription_name, client in self.clients.items():
+            try:
+                policy_assigments_list = client.policy_assignments.list()
+                policy_assigments.update({subscription_name: {}})
+
+                for policy_assigment in policy_assigments_list:
+                    policy_assigments[subscription_name].update(
+                        {
+                            policy_assigment.name: PolicyAssigment(
+                                id=policy_assigment.id,
+                                enforcement_mode=policy_assigment.enforcement_mode,
+                            )
+                        }
+                    )
+            except Exception as error:
+                logger.error(
+                    f"Subscription name: {subscription_name} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
+
+        return policy_assigments
+
+
+@dataclass
+class PolicyAssigment:
+    id: str
+    enforcement_mode: str
diff --git a/prowler/providers/azure/services/postgresql/__init__.py b/prowler/providers/azure/services/postgresql/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/postgresql/postgresql_client.py b/prowler/providers/azure/services/postgresql/postgresql_client.py
new file mode 100644
index 00000000000..2c945821301
--- /dev/null
+++ b/prowler/providers/azure/services/postgresql/postgresql_client.py
@@ -0,0 +1,4 @@
+from prowler.providers.azure.lib.audit_info.audit_info import azure_audit_info
+from prowler.providers.azure.services.postgresql.postgresql_service import PostgreSQL
+
+postgresql_client = PostgreSQL(azure_audit_info)
diff --git a/prowler/providers/azure/services/postgresql/postgresql_flexible_server_allow_access_services_disabled/__init__.py b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_allow_access_services_disabled/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/postgresql/postgresql_flexible_server_allow_access_services_disabled/postgresql_flexible_server_allow_access_services_disabled.metadata.json b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_allow_access_services_disabled/postgresql_flexible_server_allow_access_services_disabled.metadata.json
new file mode 100644
index 00000000000..5e0850280c2
--- /dev/null
+++ b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_allow_access_services_disabled/postgresql_flexible_server_allow_access_services_disabled.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "postgresql_flexible_server_allow_access_services_disabled",
+  "CheckTitle": "Ensure 'Allow access to Azure services' for PostgreSQL Database Server is disabled",
+  "CheckType": [],
+  "ServiceName": "postgresql",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "PostgreSQL",
+  "Description": "Disable access from Azure services to PostgreSQL Database Server.",
+  "Risk": "If access from Azure services is enabled, the server's firewall will accept connections from all Azure resources, including resources not in your subscription. This is usually not a desired configuration. Instead, set up firewall rules to allow access from specific network ranges or VNET rules to allow access from specific virtual networks.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/azure/postgresql/concepts-firewall-rules",
+  "Remediation": {
+    "Code": {
+      "CLI": "az postgres server firewall-rule delete --name AllowAllWindowsAzureIps --resource-group  --server-name ",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/PostgreSQL/disable-all-services-access.html#",
+      "Terraform": "https://docs.bridgecrew.io/docs/ensure-allow-access-to-azure-services-for-postgresql-database-server-is-disabled#terraform"
+    },
+    "Recommendation": {
+      "Text": "From Azure Portal 1. Login to Azure Portal using https://portal.azure.com. 2. Go to Azure Database for PostgreSQL servers. 3. For each database, click on Connection security. 4. Under Firewall rules, set Allow access to Azure services to No. 5. Click Save. From Azure CLI Use the below command to delete the AllowAllWindowsAzureIps rule for PostgreSQL Database. az postgres server firewall-rule delete --name AllowAllWindowsAzureIps -- resource-group  --server-name ",
+      "Url": "https://learn.microsoft.com/en-us/azure/postgresql/single-server/quickstart-create-server-database-azure-cli#configure-a-server-based-firewall-rule"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": ""
+}
diff --git a/prowler/providers/azure/services/postgresql/postgresql_flexible_server_allow_access_services_disabled/postgresql_flexible_server_allow_access_services_disabled.py b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_allow_access_services_disabled/postgresql_flexible_server_allow_access_services_disabled.py
new file mode 100644
index 00000000000..8c0aa09a43f
--- /dev/null
+++ b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_allow_access_services_disabled/postgresql_flexible_server_allow_access_services_disabled.py
@@ -0,0 +1,29 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.postgresql.postgresql_client import (
+    postgresql_client,
+)
+
+
+class postgresql_flexible_server_allow_access_services_disabled(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for (
+            subscription,
+            flexible_servers,
+        ) in postgresql_client.flexible_servers.items():
+            for server in flexible_servers:
+                report = Check_Report_Azure(self.metadata())
+                report.subscription = subscription
+                report.resource_name = server.name
+                report.resource_id = server.id
+                report.status = "FAIL"
+                report.status_extended = f"Flexible Postgresql server {server.name} from subscription {subscription} has allow public access from any Azure service enabled"
+                if not any(
+                    rule.start_ip == "0.0.0.0" and rule.end_ip == "0.0.0.0"
+                    for rule in server.firewall
+                ):
+                    report.status = "PASS"
+                    report.status_extended = f"Flexible Postgresql server {server.name} from subscription {subscription} has allow public access from any Azure service disabled"
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/postgresql/postgresql_flexible_server_connection_throttling_on/__init__.py b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_connection_throttling_on/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/postgresql/postgresql_flexible_server_connection_throttling_on/postgresql_flexible_server_connection_throttling_on.metadata.json b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_connection_throttling_on/postgresql_flexible_server_connection_throttling_on.metadata.json
new file mode 100644
index 00000000000..445dbf5981d
--- /dev/null
+++ b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_connection_throttling_on/postgresql_flexible_server_connection_throttling_on.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "postgresql_flexible_server_connection_throttling_on",
+  "CheckTitle": "Ensure server parameter 'connection_throttling' is set to 'ON' for PostgreSQL Database Server",
+  "CheckType": [],
+  "ServiceName": "postgresql",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "PostgreSQL",
+  "Description": "Enable connection_throttling on PostgreSQL Servers.",
+  "Risk": "Enabling connection_throttling helps the PostgreSQL Database to Set the verbosity of logged messages. This in turn generates query and error logs with respect to concurrent connections that could lead to a successful Denial of Service (DoS) attack by exhausting connection resources. A system can also fail or be degraded by an overload of legitimate users. Query and error logs can be used to identify, troubleshoot, and repair configuration errors and sub-optimal performance.",
+  "RelatedUrl": " https://docs.microsoft.com/en-us/rest/api/postgresql/configurations/listbyserver",
+  "Remediation": {
+    "Code": {
+      "CLI": "az postgres server configuration set --resource-group  --server-name  --name connection_throttling --value on",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity-staging/knowledge-base/azure/PostgreSQL/connection-throttling.html",
+      "Terraform": "https://docs.bridgecrew.io/docs/bc_azr_networking_13#terraform"
+    },
+    "Recommendation": {
+      "Text": "From Azure Portal 1. Login to Azure Portal using https://portal.azure.com. 2. Go to Azure Database for PostgreSQL servers. 3. For each database, click on Server parameters. 4. Search for connection_throttling. 5. Click ON and save. From Azure CLI Use the below command to update connection_throttling configuration. az postgres server configuration set --resource-group  -- server-name  --name connection_throttling --value on From PowerShell Use the below command to update connection_throttling configuration. Update-AzPostgreSqlConfiguration -ResourceGroupName  - ServerName  -Name connection_throttling -Value on",
+      "Url": "https://learn.microsoft.com/en-us/azure/postgresql/single-server/how-to-configure-server-parameters-using-portal"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": ""
+}
diff --git a/prowler/providers/azure/services/postgresql/postgresql_flexible_server_connection_throttling_on/postgresql_flexible_server_connection_throttling_on.py b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_connection_throttling_on/postgresql_flexible_server_connection_throttling_on.py
new file mode 100644
index 00000000000..c1855d6ca74
--- /dev/null
+++ b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_connection_throttling_on/postgresql_flexible_server_connection_throttling_on.py
@@ -0,0 +1,26 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.postgresql.postgresql_client import (
+    postgresql_client,
+)
+
+
+class postgresql_flexible_server_connection_throttling_on(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for (
+            subscription,
+            flexible_servers,
+        ) in postgresql_client.flexible_servers.items():
+            for server in flexible_servers:
+                report = Check_Report_Azure(self.metadata())
+                report.subscription = subscription
+                report.resource_name = server.name
+                report.resource_id = server.id
+                report.status = "FAIL"
+                report.status_extended = f"Flexible Postgresql server {server.name} from subscription {subscription} has connection_throttling disabled"
+                if server.connection_throttling == "ON":
+                    report.status = "PASS"
+                    report.status_extended = f"Flexible Postgresql server {server.name} from subscription {subscription} has connection_throttling enabled"
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/postgresql/postgresql_flexible_server_enforce_ssl_enabled/__init__.py b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_enforce_ssl_enabled/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/postgresql/postgresql_flexible_server_enforce_ssl_enabled/postgresql_flexible_server_enforce_ssl_enabled.metadata.json b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_enforce_ssl_enabled/postgresql_flexible_server_enforce_ssl_enabled.metadata.json
new file mode 100644
index 00000000000..14ceef526e6
--- /dev/null
+++ b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_enforce_ssl_enabled/postgresql_flexible_server_enforce_ssl_enabled.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "postgresql_flexible_server_enforce_ssl_enabled",
+  "CheckTitle": "Ensure 'Enforce SSL connection' is set to 'ENABLED' for PostgreSQL Database Server",
+  "CheckType": [],
+  "ServiceName": "postgresql",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "PostgreSQL",
+  "Description": "Enable SSL connection on PostgreSQL Servers.",
+  "Risk": "SSL connectivity helps to provide a new layer of security by connecting database server to client applications using Secure Sockets Layer (SSL). Enforcing SSL connections between database server and client applications helps protect against 'man in the middle' attacks by encrypting the data stream between the server and application.",
+  "RelatedUrl": "https://learn.microsoft.com/en-us/azure/postgresql/single-server/concepts-ssl-connection-security",
+  "Remediation": {
+    "Code": {
+      "CLI": "az postgres server update --resource-group  --name  --ssl-enforcement Enabled",
+      "NativeIaC": "",
+      "Other": "https://docs.bridgecrew.io/docs/bc_azr_networking_10",
+      "Terraform": "https://docs.bridgecrew.io/docs/bc_azr_networking_10#terraform"
+    },
+    "Recommendation": {
+      "Text": "From Azure Portal 1. Login to Azure Portal using https://portal.azure.com 2. Go to Azure Database for PostgreSQL server 3. For each database, click on Connection security 4. In SSL settings, click on ENABLED to enforce SSL connections 5. Click Save From Azure CLI Use the below command to enforce ssl connection for PostgreSQL Database. az postgres server update --resource-group  --name  --ssl-enforcement Enabled From PowerShell Update-AzPostgreSqlServer -ResourceGroupName  -ServerName  -SslEnforcement Enabled",
+      "Url": "https://learn.microsoft.com/en-us/azure/postgresql/single-server/concepts-ssl-connection-security"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "."
+}
diff --git a/prowler/providers/azure/services/postgresql/postgresql_flexible_server_enforce_ssl_enabled/postgresql_flexible_server_enforce_ssl_enabled.py b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_enforce_ssl_enabled/postgresql_flexible_server_enforce_ssl_enabled.py
new file mode 100644
index 00000000000..9feaa6b93dc
--- /dev/null
+++ b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_enforce_ssl_enabled/postgresql_flexible_server_enforce_ssl_enabled.py
@@ -0,0 +1,26 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.postgresql.postgresql_client import (
+    postgresql_client,
+)
+
+
+class postgresql_flexible_server_enforce_ssl_enabled(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for (
+            subscription,
+            flexible_servers,
+        ) in postgresql_client.flexible_servers.items():
+            for server in flexible_servers:
+                report = Check_Report_Azure(self.metadata())
+                report.subscription = subscription
+                report.resource_name = server.name
+                report.resource_id = server.id
+                report.status = "FAIL"
+                report.status_extended = f"Flexible Postgresql server {server.name} from subscription {subscription} has enforce ssl disabled"
+                if server.require_secure_transport == "ON":
+                    report.status = "PASS"
+                    report.status_extended = f"Flexible Postgresql server {server.name} from subscription {subscription} has enforce ssl enabled"
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/postgresql/postgresql_flexible_server_log_checkpoints_on/__init__.py b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_log_checkpoints_on/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/postgresql/postgresql_flexible_server_log_checkpoints_on/postgresql_flexible_server_log_checkpoints_on.metadata.json b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_log_checkpoints_on/postgresql_flexible_server_log_checkpoints_on.metadata.json
new file mode 100644
index 00000000000..e506a7f1fc6
--- /dev/null
+++ b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_log_checkpoints_on/postgresql_flexible_server_log_checkpoints_on.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "postgresql_flexible_server_log_checkpoints_on",
+  "CheckTitle": "Ensure Server Parameter 'log_checkpoints' is set to 'ON' for PostgreSQL Database Server",
+  "CheckType": [],
+  "ServiceName": "postgresql",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "PostgreSQL",
+  "Description": "Enable log_checkpoints on PostgreSQL Servers.",
+  "Risk": "Enabling log_checkpoints helps the PostgreSQL Database to Log each checkpoint in turn generates query and error logs. However, access to transaction logs is not supported. Query and error logs can be used to identify, troubleshoot, and repair configuration errors and sub-optimal performance.",
+  "RelatedUrl": " https://docs.microsoft.com/en-us/rest/api/postgresql/singleserver/configurations/list-by-server",
+  "Remediation": {
+    "Code": {
+      "CLI": "az postgres server configuration set --resource-group  --server-name  --name log_checkpoints --value on",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity-staging/knowledge-base/azure/PostgreSQL/log-checkpoints.html#",
+      "Terraform": "https://docs.bridgecrew.io/docs/bc_azr_networking_11#terraform"
+    },
+    "Recommendation": {
+      "Text": "From Azure Portal 1. From Azure Home select the Portal Menu. 2. Go to Azure Database for PostgreSQL servers. 3. For each database, click on Server parameters. 4. Search for log_checkpoints. 5. Click ON and save. From Azure CLI Use the below command to update log_checkpoints configuration. az postgres server configuration set --resource-group  -- server-name  --name log_checkpoints --value on From PowerShell Update-AzPostgreSqlConfiguration -ResourceGroupName  - ServerName  -Name log_checkpoints -Value on",
+      "Url": "https://docs.microsoft.com/en-us/azure/postgresql/howto-configure-server-parameters-using-portal"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": ""
+}
diff --git a/prowler/providers/azure/services/postgresql/postgresql_flexible_server_log_checkpoints_on/postgresql_flexible_server_log_checkpoints_on.py b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_log_checkpoints_on/postgresql_flexible_server_log_checkpoints_on.py
new file mode 100644
index 00000000000..3bfcda42ca9
--- /dev/null
+++ b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_log_checkpoints_on/postgresql_flexible_server_log_checkpoints_on.py
@@ -0,0 +1,26 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.postgresql.postgresql_client import (
+    postgresql_client,
+)
+
+
+class postgresql_flexible_server_log_checkpoints_on(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for (
+            subscription,
+            flexible_servers,
+        ) in postgresql_client.flexible_servers.items():
+            for server in flexible_servers:
+                report = Check_Report_Azure(self.metadata())
+                report.subscription = subscription
+                report.resource_name = server.name
+                report.resource_id = server.id
+                report.status = "FAIL"
+                report.status_extended = f"Flexible Postgresql server {server.name} from subscription {subscription} has log_checkpoints disabled"
+                if server.log_checkpoints == "ON":
+                    report.status = "PASS"
+                    report.status_extended = f"Flexible Postgresql server {server.name} from subscription {subscription} has log_checkpoints enabled"
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/postgresql/postgresql_flexible_server_log_connections_on/__init__.py b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_log_connections_on/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/postgresql/postgresql_flexible_server_log_connections_on/postgresql_flexible_server_log_connections_on.metadata.json b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_log_connections_on/postgresql_flexible_server_log_connections_on.metadata.json
new file mode 100644
index 00000000000..1382dd28f69
--- /dev/null
+++ b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_log_connections_on/postgresql_flexible_server_log_connections_on.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "postgresql_flexible_server_log_connections_on",
+  "CheckTitle": "Ensure server parameter 'log_connections' is set to 'ON' for PostgreSQL Database Server",
+  "CheckType": [],
+  "ServiceName": "postgresql",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "PostgreSQL",
+  "Description": "Enable log_connections on PostgreSQL Servers.",
+  "Risk": "Enabling log_connections helps PostgreSQL Database to log attempted connection to the server, as well as successful completion of client authentication. Log data can be used to identify, troubleshoot, and repair configuration errors and suboptimal performance.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/rest/api/postgresql/configurations/listbyserver",
+  "Remediation": {
+    "Code": {
+      "CLI": "az postgres server configuration set --resource-group  --server-name  --name log_connections --value on",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity-staging/knowledge-base/azure/PostgreSQL/log-connections.html",
+      "Terraform": "https://docs.bridgecrew.io/docs/bc_azr_networking_12#terraform"
+    },
+    "Recommendation": {
+      "Text": "From Azure Portal 1. Login to Azure Portal using https://portal.azure.com. 2. Go to Azure Database for PostgreSQL servers. 3. For each database, click on Server parameters. 4. Search for log_connections. 5. Click ON and save. From Azure CLI Use the below command to update log_connections configuration. az postgres server configuration set --resource-group  -- server-name  --name log_connections --value on From PowerShell Use the below command to update log_connections configuration. Update-AzPostgreSqlConfiguration -ResourceGroupName  - ServerName  -Name log_connections -Value on",
+      "Url": "https://learn.microsoft.com/en-us/azure/postgresql/single-server/how-to-configure-server-parameters-using-portal"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": ""
+}
diff --git a/prowler/providers/azure/services/postgresql/postgresql_flexible_server_log_connections_on/postgresql_flexible_server_log_connections_on.py b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_log_connections_on/postgresql_flexible_server_log_connections_on.py
new file mode 100644
index 00000000000..0ae39b71f47
--- /dev/null
+++ b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_log_connections_on/postgresql_flexible_server_log_connections_on.py
@@ -0,0 +1,26 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.postgresql.postgresql_client import (
+    postgresql_client,
+)
+
+
+class postgresql_flexible_server_log_connections_on(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for (
+            subscription,
+            flexible_servers,
+        ) in postgresql_client.flexible_servers.items():
+            for server in flexible_servers:
+                report = Check_Report_Azure(self.metadata())
+                report.subscription = subscription
+                report.resource_name = server.name
+                report.resource_id = server.id
+                report.status = "FAIL"
+                report.status_extended = f"Flexible Postgresql server {server.name} from subscription {subscription} has log_connections disabled"
+                if server.log_connections == "ON":
+                    report.status = "PASS"
+                    report.status_extended = f"Flexible Postgresql server {server.name} from subscription {subscription} has log_connections enabled"
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/postgresql/postgresql_flexible_server_log_disconnections_on/__init__.py b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_log_disconnections_on/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/postgresql/postgresql_flexible_server_log_disconnections_on/postgresql_flexible_server_log_disconnections_on.metadata.json b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_log_disconnections_on/postgresql_flexible_server_log_disconnections_on.metadata.json
new file mode 100644
index 00000000000..1f75ad5dd6f
--- /dev/null
+++ b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_log_disconnections_on/postgresql_flexible_server_log_disconnections_on.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "postgresql_flexible_server_log_disconnections_on",
+  "CheckTitle": "Ensure server parameter 'log_disconnections' is set to 'ON' for PostgreSQL Database Server",
+  "CheckType": [],
+  "ServiceName": "postgresql",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "PostgreSQL",
+  "Description": "Enable log_disconnections on PostgreSQL Servers.",
+  "Risk": "Enabling log_disconnections helps PostgreSQL Database to Logs end of a session, including duration, which in turn generates query and error logs. Query and error logs can be used to identify, troubleshoot, and repair configuration errors and sub-optimal performance.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/rest/api/postgresql/singleserver/configurations/list-by-server",
+  "Remediation": {
+    "Code": {
+      "CLI": "az postgres server configuration set --resource-group  --server-name  --name log_disconnections --value on",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/PostgreSQL/log-disconnections.html",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "From Azure Portal 1. From Azure Home select the Portal Menu 2. Go to Azure Database for PostgreSQL servers 3. For each database, click on Server parameters 4. Search for log_disconnections. 5. Click ON and save. From Azure CLI Use the below command to update log_disconnections configuration. az postgres server configuration set --resource-group  -- server-name  --name log_disconnections --value on From PowerShell Use the below command to update log_disconnections configuration. Update-AzPostgreSqlConfiguration -ResourceGroupName  Check_Report_Azure:
+        findings = []
+        for (
+            subscription,
+            flexible_servers,
+        ) in postgresql_client.flexible_servers.items():
+            for server in flexible_servers:
+                report = Check_Report_Azure(self.metadata())
+                report.subscription = subscription
+                report.resource_name = server.name
+                report.resource_id = server.id
+                report.status = "FAIL"
+                report.status_extended = f"Flexible Postgresql server {server.name} from subscription {subscription} has log_disconnections disabled"
+                if server.log_disconnections == "ON":
+                    report.status = "PASS"
+                    report.status_extended = f"Flexible Postgresql server {server.name} from subscription {subscription} has log_disconnections enabled"
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/postgresql/postgresql_flexible_server_log_retention_days_greater_3/__init__.py b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_log_retention_days_greater_3/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/postgresql/postgresql_flexible_server_log_retention_days_greater_3/postgresql_flexible_server_log_retention_days_greater_3.metadata.json b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_log_retention_days_greater_3/postgresql_flexible_server_log_retention_days_greater_3.metadata.json
new file mode 100644
index 00000000000..c346f52b0be
--- /dev/null
+++ b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_log_retention_days_greater_3/postgresql_flexible_server_log_retention_days_greater_3.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "postgresql_flexible_server_log_retention_days_greater_3",
+  "CheckTitle": "Ensure Server Parameter 'log_retention_days' is greater than 3 days for PostgreSQL Database Server",
+  "CheckType": [],
+  "ServiceName": "postgresql",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "PostgreSQL",
+  "Description": "Ensure log_retention_days on PostgreSQL Servers is set to an appropriate value.",
+  "Risk": "Configuring log_retention_days determines the duration in days that Azure Database for PostgreSQL retains log files. Query and error logs can be used to identify, troubleshoot, and repair configuration errors and sub-optimal performance.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/azure/postgresql/howto-configure-server-parameters-using-portal",
+  "Remediation": {
+    "Code": {
+      "CLI": "az postgres server configuration set --resource-group  --server-name  --name log_retention_days --value <4-7>",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity-staging/knowledge-base/azure/PostgreSQL/log-retention-days.html",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "From Azure Portal 1. From Azure Home select the Portal Menu. 2. Go to Azure Database for PostgreSQL servers. 3. For each database, click on Server parameters. 4. Search for log_retention_days. 5. Input a value between 4 and 7 (inclusive) and click Save. From Azure CLI Use the below command to update log_retention_days configuration. az postgres server configuration set --resource-group  -- server-name  --name log_retention_days --value <4-7> From Powershell Use the below command to update log_retention_days configuration. Update-AzPostgreSqlConfiguration -ResourceGroupName  - ServerName  -Name log_retention_days -Value <4-7>",
+      "Url": "https://learn.microsoft.com/en-us/rest/api/postgresql/singleserver/configurations/list-by-server?view=rest-postgresql-singleserver-2017-12-01&tabs=HTTP"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "Configuring this setting will result in logs being retained for the specified number of days. If this is configured on a high traffic server, the log may grow quickly to occupy a large amount of disk space. In this case you may want to set this to a lower number."
+}
diff --git a/prowler/providers/azure/services/postgresql/postgresql_flexible_server_log_retention_days_greater_3/postgresql_flexible_server_log_retention_days_greater_3.py b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_log_retention_days_greater_3/postgresql_flexible_server_log_retention_days_greater_3.py
new file mode 100644
index 00000000000..6880c45590e
--- /dev/null
+++ b/prowler/providers/azure/services/postgresql/postgresql_flexible_server_log_retention_days_greater_3/postgresql_flexible_server_log_retention_days_greater_3.py
@@ -0,0 +1,30 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.postgresql.postgresql_client import (
+    postgresql_client,
+)
+
+
+class postgresql_flexible_server_log_retention_days_greater_3(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for (
+            subscription,
+            flexible_servers,
+        ) in postgresql_client.flexible_servers.items():
+            for server in flexible_servers:
+                report = Check_Report_Azure(self.metadata())
+                report.subscription = subscription
+                report.resource_name = server.name
+                report.resource_id = server.id
+                report.status = "FAIL"
+                report.status_extended = f"Flexible Postgresql server {server.name} from subscription {subscription} has log_retention disabled"
+                if server.log_retention_days:
+                    report.status_extended = f"Flexible Postgresql server {server.name} from subscription {subscription} has log_retention set to {server.log_retention_days}"
+                    if (
+                        int(server.log_retention_days) > 3
+                        and int(server.log_retention_days) < 8
+                    ):
+                        report.status = "PASS"
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/postgresql/postgresql_service.py b/prowler/providers/azure/services/postgresql/postgresql_service.py
new file mode 100644
index 00000000000..7a93e0e3dbc
--- /dev/null
+++ b/prowler/providers/azure/services/postgresql/postgresql_service.py
@@ -0,0 +1,153 @@
+from dataclasses import dataclass
+
+from azure.mgmt.rdbms.postgresql_flexibleservers import PostgreSQLManagementClient
+
+from prowler.lib.logger import logger
+from prowler.providers.azure.lib.service.service import AzureService
+
+
+class PostgreSQL(AzureService):
+    def __init__(self, audit_info):
+        super().__init__(PostgreSQLManagementClient, audit_info)
+        self.flexible_servers = self.__get_flexible_servers__()
+
+    def __get_flexible_servers__(self):
+        logger.info("PostgreSQL - Getting PostgreSQL servers...")
+        flexible_servers = {}
+        for subscription, client in self.clients.items():
+            try:
+                flexible_servers.update({subscription: []})
+                flexible_servers_list = client.servers.list()
+                for postgresql_server in flexible_servers_list:
+                    resource_group = self.__get_resource_group__(postgresql_server.id)
+                    require_secure_transport = self.__get_require_secure_transport__(
+                        subscription, resource_group, postgresql_server.name
+                    )
+                    log_checkpoints = self.__get_log_checkpoints__(
+                        subscription, resource_group, postgresql_server.name
+                    )
+                    log_disconnections = self.__get_log_disconnections__(
+                        subscription, resource_group, postgresql_server.name
+                    )
+                    log_connections = self.__get_log_connections__(
+                        subscription, resource_group, postgresql_server.name
+                    )
+                    connection_throttling = self.__get_connection_throttling__(
+                        subscription, resource_group, postgresql_server.name
+                    )
+                    log_retention_days = self.__get_log_retention_days__(
+                        subscription, resource_group, postgresql_server.name
+                    )
+                    firewall = self.__get_firewall__(
+                        subscription, resource_group, postgresql_server.name
+                    )
+                    flexible_servers[subscription].append(
+                        Server(
+                            id=postgresql_server.id,
+                            name=postgresql_server.name,
+                            resource_group=resource_group,
+                            require_secure_transport=require_secure_transport,
+                            log_checkpoints=log_checkpoints,
+                            log_connections=log_connections,
+                            log_disconnections=log_disconnections,
+                            connection_throttling=connection_throttling,
+                            log_retention_days=log_retention_days,
+                            firewall=firewall,
+                        )
+                    )
+            except Exception as error:
+                logger.error(
+                    f"Subscription name: {subscription} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
+        return flexible_servers
+
+    def __get_resource_group__(self, id):
+        resource_group = id.split("/")[4]
+        return resource_group
+
+    def __get_require_secure_transport__(
+        self, subscription, resouce_group_name, server_name
+    ):
+        client = self.clients[subscription]
+        require_secure_transport = client.configurations.get(
+            resouce_group_name, server_name, "require_secure_transport"
+        )
+        return require_secure_transport.value.upper()
+
+    def __get_log_checkpoints__(self, subscription, resouce_group_name, server_name):
+        client = self.clients[subscription]
+        log_checkpoints = client.configurations.get(
+            resouce_group_name, server_name, "log_checkpoints"
+        )
+        return log_checkpoints.value.upper()
+
+    def __get_log_connections__(self, subscription, resouce_group_name, server_name):
+        client = self.clients[subscription]
+        log_connections = client.configurations.get(
+            resouce_group_name, server_name, "log_connections"
+        )
+        return log_connections.value.upper()
+
+    def __get_log_disconnections__(self, subscription, resouce_group_name, server_name):
+        client = self.clients[subscription]
+        log_disconnections = client.configurations.get(
+            resouce_group_name, server_name, "log_disconnections"
+        )
+        return log_disconnections.value.upper()
+
+    def __get_connection_throttling__(
+        self, subscription, resouce_group_name, server_name
+    ):
+        client = self.clients[subscription]
+        connection_throttling = client.configurations.get(
+            resouce_group_name, server_name, "connection_throttle.enable"
+        )
+        return connection_throttling.value.upper()
+
+    def __get_log_retention_days__(self, subscription, resouce_group_name, server_name):
+        client = self.clients[subscription]
+        try:
+            log_retention_days = client.configurations.get(
+                resouce_group_name, server_name, "log_retention_days"
+            )
+            log_retention_days = log_retention_days.value
+        except Exception:
+            log_retention_days = None
+        return log_retention_days
+
+    def __get_firewall__(self, subscription, resource_group, server_name):
+        client = self.clients[subscription]
+        firewall = client.firewall_rules.list_by_server(resource_group, server_name)
+        firewall_list = []
+        for rule in firewall:
+            firewall_list.append(
+                Firewall(
+                    id=rule.id,
+                    name=rule.name,
+                    start_ip=rule.start_ip_address,
+                    end_ip=rule.end_ip_address,
+                )
+            )
+        return firewall_list
+
+
+@dataclass
+class Firewall:
+    id: str
+    name: str
+    start_ip: str
+    end_ip: str
+
+
+@dataclass
+class Server:
+    id: str
+    name: str
+    resource_group: str
+    require_secure_transport: str
+    log_checkpoints: str
+    log_connections: str
+    log_disconnections: str
+    connection_throttling: str
+    log_retention_days: str
+    firewall: list[Firewall]
diff --git a/prowler/providers/azure/services/sqlserver/sqlserver_auditing_retention_90_days/__init__.py b/prowler/providers/azure/services/sqlserver/sqlserver_auditing_retention_90_days/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/sqlserver/sqlserver_auditing_retention_90_days/sqlserver_auditing_retention_90_days.metadata.json b/prowler/providers/azure/services/sqlserver/sqlserver_auditing_retention_90_days/sqlserver_auditing_retention_90_days.metadata.json
new file mode 100644
index 00000000000..31396a0b616
--- /dev/null
+++ b/prowler/providers/azure/services/sqlserver/sqlserver_auditing_retention_90_days/sqlserver_auditing_retention_90_days.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "sqlserver_auditing_retention_90_days",
+  "CheckTitle": "Ensure that 'Auditing' Retention is 'greater than 90 days'",
+  "CheckType": [],
+  "ServiceName": "sqlserver",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "SQLServer",
+  "Description": "SQL Server Audit Retention should be configured to be greater than 90 days.",
+  "Risk": "Audit Logs can be used to check for anomalies and give insight into suspected breaches or misuse of information and access.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/azure/sql-database/sql-database-auditing",
+  "Remediation": {
+    "Code": {
+      "CLI": "Set-AzSqlServerAudit -ResourceGroupName resource_group_name -ServerName SQL_Server_name -RetentionInDays 100 -LogAnalyticsTargetState Enabled -WorkspaceResourceId '/subscriptions/subscription_ID/resourceGroups/insights-integration/providers/Microsoft.OperationalInsights/workspaces/workspace_name'",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity-staging/knowledge-base/azure/Sql/auditing-retention.html#",
+      "Terraform": "https://docs.bridgecrew.io/docs/bc_azr_logging_3"
+    },
+    "Recommendation": {
+      "Text": "1. Go to SQL servers 2. For each server instance 3. Click on Auditing 4. If storage is selected, expand Advanced properties 5. Set the Retention (days) setting greater than 90 days or 0 for unlimited retention. 6. Select Save",
+      "Url": "https://learn.microsoft.com/en-us/purview/audit-log-retention-policies"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": ""
+}
diff --git a/prowler/providers/azure/services/sqlserver/sqlserver_auditing_retention_90_days/sqlserver_auditing_retention_90_days.py b/prowler/providers/azure/services/sqlserver/sqlserver_auditing_retention_90_days/sqlserver_auditing_retention_90_days.py
new file mode 100644
index 00000000000..ef2aee27c36
--- /dev/null
+++ b/prowler/providers/azure/services/sqlserver/sqlserver_auditing_retention_90_days/sqlserver_auditing_retention_90_days.py
@@ -0,0 +1,35 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.sqlserver.sqlserver_client import sqlserver_client
+
+
+class sqlserver_auditing_retention_90_days(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for subscription, sql_servers in sqlserver_client.sql_servers.items():
+            for sql_server in sql_servers:
+                report = Check_Report_Azure(self.metadata())
+                report.subscription = subscription
+                report.resource_name = sql_server.name
+                report.resource_id = sql_server.id
+                has_failed = False
+                has_policy = False
+                for policy in sql_server.auditing_policies:
+                    has_policy = True
+                    if has_failed:
+                        break
+                    if policy.state == "Enabled":
+                        if policy.retention_days <= 90:
+                            report.status = "FAIL"
+                            report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription} has auditing retention less than 91 days."
+                            has_failed = True
+                        else:
+                            report.status = "PASS"
+                            report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription} has auditing retention greater than 90 days."
+                    else:
+                        report.status = "FAIL"
+                        report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription} has auditing disabled."
+                        has_failed = True
+                if has_policy:
+                    findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/sqlserver/sqlserver_microsoft_defender_enabled/__init__.py b/prowler/providers/azure/services/sqlserver/sqlserver_microsoft_defender_enabled/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/sqlserver/sqlserver_microsoft_defender_enabled/sqlserver_microsoft_defender_enabled.metadata.json b/prowler/providers/azure/services/sqlserver/sqlserver_microsoft_defender_enabled/sqlserver_microsoft_defender_enabled.metadata.json
new file mode 100644
index 00000000000..45e44a1e535
--- /dev/null
+++ b/prowler/providers/azure/services/sqlserver/sqlserver_microsoft_defender_enabled/sqlserver_microsoft_defender_enabled.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "sqlserver_microsoft_defender_enabled",
+  "CheckTitle": "Ensure that Microsoft Defender for SQL is set to 'On' for critical SQL Servers",
+  "CheckType": [],
+  "ServiceName": "sqlserver",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "SQLServer",
+  "Description": "Ensure that Microsoft Defender for SQL is set to 'On' for critical SQL Servers",
+  "Risk": "Microsoft Defender for SQL is a unified package for advanced SQL security capabilities. Microsoft Defender is available for Azure SQL Database, Azure SQL Managed  classifying sensitive data, surfacing and mitigating potential database vulnerabilities, and detecting anomalous activities that could indicate a threat to your database. It provides a single go-to location for enabling and managing these capabilities.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/azure/azure-sql/database/azure-defender-for-sql?view=azuresql",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity-staging/knowledge-base/azure/SecurityCenter/defender-azure-sql.html",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "1. Go to SQL servers For each production SQL server instance: 2. Click Microsoft Defender for Cloud 3. Click Enable Microsoft Defender for SQL",
+      "Url": "https://learn.microsoft.com/en-us/azure/defender-for-cloud/defender-for-sql-usage"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "Microsoft Defender for SQL is a paid feature and will incur additional cost for each SQL server."
+}
diff --git a/prowler/providers/azure/services/sqlserver/sqlserver_microsoft_defender_enabled/sqlserver_microsoft_defender_enabled.py b/prowler/providers/azure/services/sqlserver/sqlserver_microsoft_defender_enabled/sqlserver_microsoft_defender_enabled.py
new file mode 100644
index 00000000000..696829466c5
--- /dev/null
+++ b/prowler/providers/azure/services/sqlserver/sqlserver_microsoft_defender_enabled/sqlserver_microsoft_defender_enabled.py
@@ -0,0 +1,22 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.sqlserver.sqlserver_client import sqlserver_client
+
+
+class sqlserver_microsoft_defender_enabled(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for subscription, sql_servers in sqlserver_client.sql_servers.items():
+            for sql_server in sql_servers:
+                if sql_server.security_alert_policies:
+                    report = Check_Report_Azure(self.metadata())
+                    report.subscription = subscription
+                    report.resource_name = sql_server.name
+                    report.resource_id = sql_server.id
+                    report.status = "FAIL"
+                    report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription} has microsoft defender disabled."
+                    if sql_server.security_alert_policies.state == "Enabled":
+                        report.status = "PASS"
+                        report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription} has microsoft defender enabled."
+                    findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/sqlserver/sqlserver_service.py b/prowler/providers/azure/services/sqlserver/sqlserver_service.py
index 99ef4404626..386cdeeca10 100644
--- a/prowler/providers/azure/services/sqlserver/sqlserver_service.py
+++ b/prowler/providers/azure/services/sqlserver/sqlserver_service.py
@@ -2,9 +2,13 @@
 
 from azure.mgmt.sql import SqlManagementClient
 from azure.mgmt.sql.models import (
+    EncryptionProtector,
     FirewallRule,
     ServerBlobAuditingPolicy,
     ServerExternalAdministrator,
+    ServerSecurityAlertPolicy,
+    ServerVulnerabilityAssessment,
+    TransparentDataEncryption,
 )
 
 from prowler.lib.logger import logger
@@ -26,17 +30,25 @@ def __get_sql_servers__(self):
                 sql_servers_list = client.servers.list()
                 for sql_server in sql_servers_list:
                     resource_group = self.__get_resource_group__(sql_server.id)
-                    auditing_policies = (
-                        client.server_blob_auditing_policies.list_by_server(
-                            resource_group_name=resource_group,
-                            server_name=sql_server.name,
-                        )
+                    auditing_policies = self.__get_server_blob_auditing_policies__(
+                        subscription, resource_group, sql_server.name
+                    )
+                    firewall_rules = self.__get_firewall_rules__(
+                        subscription, resource_group, sql_server.name
                     )
-                    firewall_rules = client.firewall_rules.list_by_server(
-                        resource_group_name=resource_group, server_name=sql_server.name
+                    encryption_protector = self.__get_enctyption_protectors__(
+                        subscription, resource_group, sql_server.name
+                    )
+                    vulnerability_assessment = self.__get_vulnerability_assesments__(
+                        subscription, resource_group, sql_server.name
+                    )
+                    security_alert_policies = (
+                        self.__get_server_security_alert_policies__(
+                            subscription, resource_group, sql_server.name
+                        )
                     )
                     sql_servers[subscription].append(
-                        SQL_Server(
+                        Server(
                             id=sql_server.id,
                             name=sql_server.name,
                             public_network_access=sql_server.public_network_access,
@@ -44,12 +56,17 @@ def __get_sql_servers__(self):
                             administrators=sql_server.administrators,
                             auditing_policies=auditing_policies,
                             firewall_rules=firewall_rules,
+                            encryption_protector=encryption_protector,
+                            databases=self.__get_databases__(
+                                subscription, resource_group, sql_server.name
+                            ),
+                            vulnerability_assessment=vulnerability_assessment,
+                            security_alert_policies=security_alert_policies,
                         )
                     )
             except Exception as error:
-                logger.error(f"Subscription name: {subscription}")
                 logger.error(
-                    f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                    f"Subscription name: {subscription} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
                 )
         return sql_servers
 
@@ -57,9 +74,108 @@ def __get_resource_group__(self, id):
         resource_group = id.split("/")[4]
         return resource_group
 
+    def __get_transparent_data_encryption__(
+        self, subscription, resource_group, server_name, database_name
+    ):
+        client = self.clients[subscription]
+        tde_encrypted = client.transparent_data_encryptions.get(
+            resource_group_name=resource_group,
+            server_name=server_name,
+            database_name=database_name,
+            transparent_data_encryption_name="current",
+        )
+        return tde_encrypted
+
+    def __get_enctyption_protectors__(self, subscription, resource_group, server_name):
+        client = self.clients[subscription]
+        encryption_protectors = client.encryption_protectors.get(
+            resource_group_name=resource_group,
+            server_name=server_name,
+            encryption_protector_name="current",
+        )
+        return encryption_protectors
+
+    def __get_databases__(self, subscription, resource_group, server_name):
+        logger.info("SQL Server - Getting server databases...")
+        databases = []
+        try:
+            client = self.clients[subscription]
+            databases_server = client.databases.list_by_server(
+                resource_group_name=resource_group,
+                server_name=server_name,
+            )
+            for database in databases_server:
+                tde_encrypted = self.__get_transparent_data_encryption__(
+                    subscription, resource_group, server_name, database.name
+                )
+                databases.append(
+                    Database(
+                        id=database.id,
+                        name=database.name,
+                        type=database.type,
+                        location=database.location,
+                        managed_by=database.managed_by,
+                        tde_encryption=tde_encrypted,
+                    )
+                )
+        except Exception as error:
+            logger.error(
+                f"Subscription name: {subscription} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+            )
+        return databases
+
+    def __get_vulnerability_assesments__(
+        self, subscription, resource_group, server_name
+    ):
+        client = self.clients[subscription]
+        vulnerability_assessment = client.server_vulnerability_assessments.get(
+            resource_group_name=resource_group,
+            server_name=server_name,
+            vulnerability_assessment_name="default",
+        )
+        return vulnerability_assessment
+
+    def __get_server_blob_auditing_policies__(
+        self, subscription, resource_group, server_name
+    ):
+        client = self.clients[subscription]
+        auditing_policies = client.server_blob_auditing_policies.list_by_server(
+            resource_group_name=resource_group,
+            server_name=server_name,
+        )
+        return auditing_policies
+
+    def __get_firewall_rules__(self, subscription, resource_group, server_name):
+        client = self.clients[subscription]
+        firewall_rules = client.firewall_rules.list_by_server(
+            resource_group_name=resource_group, server_name=server_name
+        )
+        return firewall_rules
+
+    def __get_server_security_alert_policies__(
+        self, subscription, resource_group, server_name
+    ):
+        client = self.clients[subscription]
+        security_alert_policies = client.server_security_alert_policies.get(
+            resource_group_name=resource_group,
+            server_name=server_name,
+            security_alert_policy_name="default",
+        )
+        return security_alert_policies
+
 
 @dataclass
-class SQL_Server:
+class Database:
+    id: str
+    name: str
+    type: str
+    location: str
+    managed_by: str
+    tde_encryption: TransparentDataEncryption
+
+
+@dataclass
+class Server:
     id: str
     name: str
     public_network_access: str
@@ -67,21 +183,7 @@ class SQL_Server:
     administrators: ServerExternalAdministrator
     auditing_policies: ServerBlobAuditingPolicy
     firewall_rules: FirewallRule
-
-    def __init__(
-        self,
-        id,
-        name,
-        public_network_access,
-        minimal_tls_version,
-        administrators,
-        auditing_policies,
-        firewall_rules,
-    ):
-        self.id = id
-        self.name = name
-        self.public_network_access = public_network_access
-        self.minimal_tls_version = minimal_tls_version
-        self.administrators = administrators
-        self.auditing_policies = auditing_policies
-        self.firewall_rules = firewall_rules
+    encryption_protector: EncryptionProtector = None
+    databases: list[Database] = None
+    vulnerability_assessment: ServerVulnerabilityAssessment = None
+    security_alert_policies: ServerSecurityAlertPolicy = None
diff --git a/prowler/providers/azure/services/sqlserver/sqlserver_tde_encrypted_with_cmk/__init__.py b/prowler/providers/azure/services/sqlserver/sqlserver_tde_encrypted_with_cmk/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/sqlserver/sqlserver_tde_encrypted_with_cmk/sqlserver_tde_encrypted_with_cmk.metadata.json b/prowler/providers/azure/services/sqlserver/sqlserver_tde_encrypted_with_cmk/sqlserver_tde_encrypted_with_cmk.metadata.json
new file mode 100644
index 00000000000..ff01eedbddc
--- /dev/null
+++ b/prowler/providers/azure/services/sqlserver/sqlserver_tde_encrypted_with_cmk/sqlserver_tde_encrypted_with_cmk.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "sqlserver_tde_encrypted_with_cmk",
+  "CheckTitle": "Ensure SQL server's Transparent Data Encryption (TDE) protector is encrypted with Customer-managed key",
+  "CheckType": [],
+  "ServiceName": "sqlserver",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "SQLServer",
+  "Description": "Transparent Data Encryption (TDE) with Customer-managed key support provides increased transparency and control over the TDE Protector, increased security with an HSM-backed external service, and promotion of separation of duties.",
+  "Risk": "Customer-managed key support for Transparent Data Encryption (TDE) allows user control of TDE encryption keys and restricts who can access them and when. Azure Key Vault, Azure cloud-based external key management system, is the first key management service where TDE has integrated support for Customer-managed keys. With Customer-managed key support, the database encryption key is protected by an asymmetric key stored in the Key Vault. The asymmetric key is set at the server level and inherited by all databases under that server",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/transparent-data-encryption-byok-azure-sql",
+  "Remediation": {
+    "Code": {
+      "CLI": "az sql server tde-key set --resource-group resourceName --server dbServerName --server-key-type {AzureKeyVault} --kid keyIdentifier",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity-staging/knowledge-base/azure/Sql/use-byok-for-transparent-data-encryption.html#",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "1. Go to SQL servers For the desired server instance 2. Click On Transparent data encryption 3. Set Transparent data encryption to Customer-managed key 4. Browse through your key vaults to Select an existing key or create a new key in the Azure Key Vault. 5. Check Make selected key the default TDE protector",
+      "Url": "https://learn.microsoft.com/en-us/azure/azure-sql/database/transparent-data-encryption-byok-overview?view=azuresql"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "Once TDE protector is encrypted with a Customer-managed key, it transfers entire responsibility of respective key management on to you, and hence you should be more careful about doing any operations on the particular key in order to keep data from corresponding SQL server and Databases hosted accessible. When deploying Customer Managed Keys, it is prudent to ensure that you also deploy an automated toolset for managing these keys (this should include discovery and key rotation), and Keys should be stored in an HSM or hardware backed keystore, such as Azure Key Vault. As far as toolsets go, check with your cryptographic key provider, as they may well provide one as an add-on to their service."
+}
diff --git a/prowler/providers/azure/services/sqlserver/sqlserver_tde_encrypted_with_cmk/sqlserver_tde_encrypted_with_cmk.py b/prowler/providers/azure/services/sqlserver/sqlserver_tde_encrypted_with_cmk/sqlserver_tde_encrypted_with_cmk.py
new file mode 100644
index 00000000000..c7b7fc765de
--- /dev/null
+++ b/prowler/providers/azure/services/sqlserver/sqlserver_tde_encrypted_with_cmk/sqlserver_tde_encrypted_with_cmk.py
@@ -0,0 +1,38 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.sqlserver.sqlserver_client import sqlserver_client
+
+
+class sqlserver_tde_encrypted_with_cmk(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for subscription, sql_servers in sqlserver_client.sql_servers.items():
+            for sql_server in sql_servers:
+                databases = (
+                    sql_server.databases if sql_server.databases is not None else []
+                )
+                if len(databases) > 0:
+                    report = Check_Report_Azure(self.metadata())
+                    report.subscription = subscription
+                    report.resource_name = sql_server.name
+                    report.resource_id = sql_server.id
+                    found_disabled = False
+                    if (
+                        sql_server.encryption_protector.server_key_type
+                        == "AzureKeyVault"
+                    ):
+                        for database in databases:
+                            if found_disabled:
+                                break
+                            if database.tde_encryption.status == "Enabled":
+                                report.status = "PASS"
+                                report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription} has TDE enabled with CMK."
+                            else:
+                                report.status = "FAIL"
+                                report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription} has TDE disabled with CMK."
+                                found_disabled = True
+                    else:
+                        report.status = "FAIL"
+                        report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription} has TDE disabled without CMK."
+                    findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/sqlserver/sqlserver_tde_encryption_enabled/__init__.py b/prowler/providers/azure/services/sqlserver/sqlserver_tde_encryption_enabled/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/sqlserver/sqlserver_tde_encryption_enabled/sqlserver_tde_encryption_enabled.metadata.json b/prowler/providers/azure/services/sqlserver/sqlserver_tde_encryption_enabled/sqlserver_tde_encryption_enabled.metadata.json
new file mode 100644
index 00000000000..63be7b0cc3b
--- /dev/null
+++ b/prowler/providers/azure/services/sqlserver/sqlserver_tde_encryption_enabled/sqlserver_tde_encryption_enabled.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "sqlserver_tde_encryption_enabled",
+  "CheckTitle": "Ensure SQL server's Transparent Data Encryption (TDE) protector is encrypted",
+  "CheckType": [],
+  "ServiceName": "sqlserver",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "SQLServer",
+  "Description": "Enable Transparent Data Encryption on every SQL server.",
+  "Risk": "Azure SQL Database transparent data encryption helps protect against the threat of malicious activity by performing real-time encryption and decryption of the database, associated backups, and transaction log files at rest without requiring changes to the application.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/transparent-data-encryption-with-azure-sql-database",
+  "Remediation": {
+    "Code": {
+      "CLI": "az sql db tde set --resource-group resourceGroup --server dbServerName --database dbName --status Enabled",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity-staging/knowledge-base/azure/Sql/data-encryption.html#",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "1. Go to SQL databases 2. For each DB instance 3. Click on Transparent data encryption 4. Set Data encryption to On",
+      "Url": "https://learn.microsoft.com/en-us/azure/azure-sql/database/transparent-data-encryption-byok-overview?view=azuresql"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": ""
+}
diff --git a/prowler/providers/azure/services/sqlserver/sqlserver_tde_encryption_enabled/sqlserver_tde_encryption_enabled.py b/prowler/providers/azure/services/sqlserver/sqlserver_tde_encryption_enabled/sqlserver_tde_encryption_enabled.py
new file mode 100644
index 00000000000..f65e3292c48
--- /dev/null
+++ b/prowler/providers/azure/services/sqlserver/sqlserver_tde_encryption_enabled/sqlserver_tde_encryption_enabled.py
@@ -0,0 +1,27 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.sqlserver.sqlserver_client import sqlserver_client
+
+
+class sqlserver_tde_encryption_enabled(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for subscription, sql_servers in sqlserver_client.sql_servers.items():
+            for sql_server in sql_servers:
+                databases = (
+                    sql_server.databases if sql_server.databases is not None else []
+                )
+                if len(databases) > 0:
+                    for database in databases:
+                        report = Check_Report_Azure(self.metadata())
+                        report.subscription = subscription
+                        report.resource_name = database.name
+                        report.resource_id = database.id
+                        if database.tde_encryption.status == "Enabled":
+                            report.status = "PASS"
+                            report.status_extended = f"Database {database.name} from SQL Server {sql_server.name} from subscription {subscription} has TDE enabled"
+                        else:
+                            report.status = "FAIL"
+                            report.status_extended = f"Database {database.name} from SQL Server {sql_server.name} from subscription {subscription} has TDE disabled"
+                        findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/sqlserver/sqlserver_va_emails_notifications_admins_enabled/__init__.py b/prowler/providers/azure/services/sqlserver/sqlserver_va_emails_notifications_admins_enabled/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/sqlserver/sqlserver_va_emails_notifications_admins_enabled/sqlserver_va_emails_notifications_admins_enabled.metadata.json b/prowler/providers/azure/services/sqlserver/sqlserver_va_emails_notifications_admins_enabled/sqlserver_va_emails_notifications_admins_enabled.metadata.json
new file mode 100644
index 00000000000..23ea66bfcd7
--- /dev/null
+++ b/prowler/providers/azure/services/sqlserver/sqlserver_va_emails_notifications_admins_enabled/sqlserver_va_emails_notifications_admins_enabled.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "sqlserver_va_emails_notifications_admins_enabled",
+  "CheckTitle": "Ensure that Vulnerability Assessment (VA) setting 'Also send email notifications to admins and subscription owners' is set for each SQL Server",
+  "CheckType": [],
+  "ServiceName": "sqlserver",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "SQLServer",
+  "Description": "Enable Vulnerability Assessment (VA) setting 'Also send email notifications to admins and subscription owners'.",
+  "Risk": "VA scan reports and alerts will be sent to admins and subscription owners by enabling setting 'Also send email notifications to admins and subscription owners'. This may help in reducing time required for identifying risks and taking corrective measures.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/azure/sql-database/sql-vulnerability-assessment",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "",
+      "Terraform": "https://docs.bridgecrew.io/docs/ensure-that-va-setting-also-send-email-notifications-to-admins-and-subscription-owners-is-set-for-an-sql-server#terraform"
+    },
+    "Recommendation": {
+      "Text": "1. Go to SQL servers 2. Select a server instance 3. Click on Security Center 4. Select Configure next to Enabled at subscription-level 5. In Section Vulnerability Assessment Settings, configure Storage Accounts if not already 6. Check/enable 'Also send email notifications to admins and subscription owners' 7. Click Save",
+      "Url": "https://learn.microsoft.com/en-us/azure/defender-for-cloud/sql-azure-vulnerability-assessment-enable"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "Enabling the Microsoft Defender for SQL features will incur additional costs for each SQL server."
+}
diff --git a/prowler/providers/azure/services/sqlserver/sqlserver_va_emails_notifications_admins_enabled/sqlserver_va_emails_notifications_admins_enabled.py b/prowler/providers/azure/services/sqlserver/sqlserver_va_emails_notifications_admins_enabled/sqlserver_va_emails_notifications_admins_enabled.py
new file mode 100644
index 00000000000..304905fd3fd
--- /dev/null
+++ b/prowler/providers/azure/services/sqlserver/sqlserver_va_emails_notifications_admins_enabled/sqlserver_va_emails_notifications_admins_enabled.py
@@ -0,0 +1,29 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.sqlserver.sqlserver_client import sqlserver_client
+
+
+class sqlserver_va_emails_notifications_admins_enabled(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for subscription, sql_servers in sqlserver_client.sql_servers.items():
+            for sql_server in sql_servers:
+                report = Check_Report_Azure(self.metadata())
+                report.subscription = subscription
+                report.resource_name = sql_server.name
+                report.resource_id = sql_server.id
+                report.status = "FAIL"
+                report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription} has vulnerability assessment disabled."
+                if (
+                    sql_server.vulnerability_assessment
+                    and sql_server.vulnerability_assessment.storage_container_path
+                ):
+                    report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription} has vulnerability assessment enabled but no scan reports configured for subscription admins."
+                    if (
+                        sql_server.vulnerability_assessment.recurring_scans
+                        and sql_server.vulnerability_assessment.recurring_scans.email_subscription_admins
+                    ):
+                        report.status = "PASS"
+                        report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription} has vulnerability assessment enabled and scan reports configured for subscription admins."
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/sqlserver/sqlserver_va_periodic_recurring_scans_enabled/__init__.py b/prowler/providers/azure/services/sqlserver/sqlserver_va_periodic_recurring_scans_enabled/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/sqlserver/sqlserver_va_periodic_recurring_scans_enabled/sqlserver_va_periodic_recurring_scans_enabled.metadata.json b/prowler/providers/azure/services/sqlserver/sqlserver_va_periodic_recurring_scans_enabled/sqlserver_va_periodic_recurring_scans_enabled.metadata.json
new file mode 100644
index 00000000000..3768c57540b
--- /dev/null
+++ b/prowler/providers/azure/services/sqlserver/sqlserver_va_periodic_recurring_scans_enabled/sqlserver_va_periodic_recurring_scans_enabled.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "sqlserver_va_periodic_recurring_scans_enabled",
+  "CheckTitle": "Ensure that Vulnerability Assessment (VA) setting 'Periodic recurring scans' is set to 'on' for each SQL server",
+  "CheckType": [],
+  "ServiceName": "sqlserver",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "SQLServer",
+  "Description": "Enable Vulnerability Assessment (VA) Periodic recurring scans for critical SQL servers and corresponding SQL databases.",
+  "Risk": "VA setting 'Periodic recurring scans' schedules periodic (weekly) vulnerability scanning for the SQL server and corresponding Databases. Periodic and regular vulnerability scanning provides risk visibility based on updated known vulnerability signatures and best practices.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/azure/sql-database/sql-vulnerability-assessment",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity-staging/knowledge-base/azure/Sql/periodic-vulnerability-scans.html#",
+      "Terraform": "https://docs.bridgecrew.io/docs/ensure-that-va-setting-periodic-recurring-scans-is-enabled-on-a-sql-server#terraform"
+    },
+    "Recommendation": {
+      "Text": "1. Go to SQL servers 2. For each server instance 3. Click on Security Center 4. In Section Vulnerability Assessment Settings, set Storage Account if not already 5. Toggle 'Periodic recurring scans' to ON. 6. Click Save",
+      "Url": "https://learn.microsoft.com/en-us/azure/defender-for-cloud/sql-azure-vulnerability-assessment-enable"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "Enabling the Azure Defender for SQL feature will incur additional costs for each SQL server."
+}
diff --git a/prowler/providers/azure/services/sqlserver/sqlserver_va_periodic_recurring_scans_enabled/sqlserver_va_periodic_recurring_scans_enabled.py b/prowler/providers/azure/services/sqlserver/sqlserver_va_periodic_recurring_scans_enabled/sqlserver_va_periodic_recurring_scans_enabled.py
new file mode 100644
index 00000000000..12948248eca
--- /dev/null
+++ b/prowler/providers/azure/services/sqlserver/sqlserver_va_periodic_recurring_scans_enabled/sqlserver_va_periodic_recurring_scans_enabled.py
@@ -0,0 +1,29 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.sqlserver.sqlserver_client import sqlserver_client
+
+
+class sqlserver_va_periodic_recurring_scans_enabled(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for subscription, sql_servers in sqlserver_client.sql_servers.items():
+            for sql_server in sql_servers:
+                report = Check_Report_Azure(self.metadata())
+                report.subscription = subscription
+                report.resource_name = sql_server.name
+                report.resource_id = sql_server.id
+                report.status = "FAIL"
+                report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription} has vulnerability assessment disabled."
+                if (
+                    sql_server.vulnerability_assessment
+                    and sql_server.vulnerability_assessment.storage_container_path
+                ):
+                    report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription} has vulnerability assessment enabled but no recurring scans."
+                    if (
+                        sql_server.vulnerability_assessment.recurring_scans
+                        and sql_server.vulnerability_assessment.recurring_scans.is_enabled
+                    ):
+                        report.status = "PASS"
+                        report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription} has periodic recurring scans enabled."
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/sqlserver/sqlserver_va_scan_reports_configured/__init__.py b/prowler/providers/azure/services/sqlserver/sqlserver_va_scan_reports_configured/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/sqlserver/sqlserver_va_scan_reports_configured/sqlserver_va_scan_reports_configured.metadata.json b/prowler/providers/azure/services/sqlserver/sqlserver_va_scan_reports_configured/sqlserver_va_scan_reports_configured.metadata.json
new file mode 100644
index 00000000000..0b258db4ebc
--- /dev/null
+++ b/prowler/providers/azure/services/sqlserver/sqlserver_va_scan_reports_configured/sqlserver_va_scan_reports_configured.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "sqlserver_va_scan_reports_configured",
+  "CheckTitle": "Ensure that Vulnerability Assessment (VA) setting 'Send scan reports to' is configured for a SQL server",
+  "CheckType": [],
+  "ServiceName": "sqlserver",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "SQLServer",
+  "Description": "Configure 'Send scan reports to' with email addresses of concerned data owners/stakeholders for a critical SQL servers.",
+  "Risk": "Vulnerability Assessment (VA) scan reports and alerts will be sent to email addresses configured at 'Send scan reports to'. This may help in reducing time required for identifying risks and taking corrective measures",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/azure/sql-database/sql-vulnerability-assessment",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "",
+      "Terraform": "https://docs.bridgecrew.io/docs/ensure-that-va-setting-send-scan-reports-to-is-configured-for-a-sql-server#terraform"
+    },
+    "Recommendation": {
+      "Text": "1. Go to SQL servers 2. Select a server instance 3. Select Microsoft Defender for Cloud 4. Select Configure next to Enablement status 5. Set Microsoft Defender for SQL to On 6. Under Vulnerability Assessment Settings, select a Storage Account 7. Set Periodic recurring scans to On 8. Under Send scan reports to, provide email addresses for data owners and stakeholders 9. Click Save",
+      "Url": "https://learn.microsoft.com/en-us/azure/defender-for-cloud/sql-azure-vulnerability-assessment-enable"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "Enabling the Microsoft Defender for SQL features will incur additional costs for each SQL server."
+}
diff --git a/prowler/providers/azure/services/sqlserver/sqlserver_va_scan_reports_configured/sqlserver_va_scan_reports_configured.py b/prowler/providers/azure/services/sqlserver/sqlserver_va_scan_reports_configured/sqlserver_va_scan_reports_configured.py
new file mode 100644
index 00000000000..0c0ee5a852d
--- /dev/null
+++ b/prowler/providers/azure/services/sqlserver/sqlserver_va_scan_reports_configured/sqlserver_va_scan_reports_configured.py
@@ -0,0 +1,37 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.sqlserver.sqlserver_client import sqlserver_client
+
+
+class sqlserver_va_scan_reports_configured(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for subscription, sql_servers in sqlserver_client.sql_servers.items():
+            for sql_server in sql_servers:
+                report = Check_Report_Azure(self.metadata())
+                report.subscription = subscription
+                report.resource_name = sql_server.name
+                report.resource_id = sql_server.id
+                report.status = "FAIL"
+                report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription} has vulnerability assessment disabled."
+                if (
+                    sql_server.vulnerability_assessment
+                    and sql_server.vulnerability_assessment.storage_container_path
+                ):
+                    report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription} has vulnerability assessment enabled but no scan reports configured."
+                    if sql_server.vulnerability_assessment.recurring_scans and (
+                        (
+                            sql_server.vulnerability_assessment.recurring_scans.email_subscription_admins
+                        )
+                        or (
+                            sql_server.vulnerability_assessment.recurring_scans.emails
+                            and len(
+                                sql_server.vulnerability_assessment.recurring_scans.emails
+                            )
+                            > 0
+                        )
+                    ):
+                        report.status = "PASS"
+                        report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription} has vulnerability assessment enabled and scan reports configured."
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/sqlserver/sqlserver_vulnerability_assessment_enabled/__init__.py b/prowler/providers/azure/services/sqlserver/sqlserver_vulnerability_assessment_enabled/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/sqlserver/sqlserver_vulnerability_assessment_enabled/sqlserver_vulnerability_assessment_enabled.metadata.json b/prowler/providers/azure/services/sqlserver/sqlserver_vulnerability_assessment_enabled/sqlserver_vulnerability_assessment_enabled.metadata.json
new file mode 100644
index 00000000000..26ab2f80556
--- /dev/null
+++ b/prowler/providers/azure/services/sqlserver/sqlserver_vulnerability_assessment_enabled/sqlserver_vulnerability_assessment_enabled.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "sqlserver_vulnerability_assessment_enabled",
+  "CheckTitle": "Ensure that Vulnerability Assessment (VA) is enabled on a SQL server by setting a Storage Account",
+  "CheckType": [],
+  "ServiceName": "sqlserver",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "SQLServer",
+  "Description": "Enable Vulnerability Assessment (VA) service scans for critical SQL servers and corresponding SQL databases.",
+  "Risk": "The Vulnerability Assessment service scans databases for known security vulnerabilities and highlights deviations from best practices, such as misconfigurations, excessive permissions, and unprotected sensitive data. Results of the scan include actionable steps to resolve each issue and provide customized remediation scripts where applicable. Additionally, an assessment report can be customized by setting an acceptable baseline for permission configurations, feature configurations, and database settings.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/azure/sql-database/sql-vulnerability-assessment",
+  "Remediation": {
+    "Code": {
+      "CLI": "Update-AzSqlServerVulnerabilityAssessmentSetting -ResourceGroupName resource_group_name -ServerName Server_Name -StorageAccountName Storage_Name_from_same_subscription_and_same_Location -ScanResultsContainerName vulnerability-assessment -RecurringScansInterval Weekly -EmailSubscriptionAdmins $true -NotificationEmail @('mail1@mail.com' , 'mail2@mail.com')",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity-staging/knowledge-base/azure/Sql/vulnerability-assessment-sql-servers.html#",
+      "Terraform": "https://docs.bridgecrew.io/docs/ensure-that-vulnerability-assessment-va-is-enabled-on-a-sql-server-by-setting-a-storage-account"
+    },
+    "Recommendation": {
+      "Text": "1. Go to SQL servers 2. Select a server instance 3. Click on Security Center 4. Select Configure next to Enabled at subscription-level 5. In Section Vulnerability Assessment Settings, Click Select Storage account 6. Choose Storage Account (Existing or Create New). Click Ok 7. Click Save",
+      "Url": "https://learn.microsoft.com/en-us/azure/defender-for-cloud/sql-azure-vulnerability-assessment-enable"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "Enabling the Microsoft Defender for SQL features will incur additional costs for each SQL server."
+}
diff --git a/prowler/providers/azure/services/sqlserver/sqlserver_vulnerability_assessment_enabled/sqlserver_vulnerability_assessment_enabled.py b/prowler/providers/azure/services/sqlserver/sqlserver_vulnerability_assessment_enabled/sqlserver_vulnerability_assessment_enabled.py
new file mode 100644
index 00000000000..a01cce570b3
--- /dev/null
+++ b/prowler/providers/azure/services/sqlserver/sqlserver_vulnerability_assessment_enabled/sqlserver_vulnerability_assessment_enabled.py
@@ -0,0 +1,25 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.sqlserver.sqlserver_client import sqlserver_client
+
+
+class sqlserver_vulnerability_assessment_enabled(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for subscription, sql_servers in sqlserver_client.sql_servers.items():
+            for sql_server in sql_servers:
+                report = Check_Report_Azure(self.metadata())
+                report.subscription = subscription
+                report.resource_name = sql_server.name
+                report.resource_id = sql_server.id
+                report.status = "FAIL"
+                report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription} has vulnerability assessment disabled."
+                if (
+                    sql_server.vulnerability_assessment
+                    and sql_server.vulnerability_assessment.storage_container_path
+                    is not None
+                ):
+                    report.status = "PASS"
+                    report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription} has vulnerability assessment enabled."
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/storage/storage_default_network_access_rule_is_denied/storage_default_network_access_rule_is_denied.metadata.json b/prowler/providers/azure/services/storage/storage_default_network_access_rule_is_denied/storage_default_network_access_rule_is_denied.metadata.json
index 59a9d1f356a..fda1291f1ce 100644
--- a/prowler/providers/azure/services/storage/storage_default_network_access_rule_is_denied/storage_default_network_access_rule_is_denied.metadata.json
+++ b/prowler/providers/azure/services/storage/storage_default_network_access_rule_is_denied/storage_default_network_access_rule_is_denied.metadata.json
@@ -8,8 +8,8 @@
   "ResourceIdTemplate": "",
   "Severity": "medium",
   "ResourceType": "AzureStorageAccount",
-  "Description": "Ensure Default Network Access Rule for Storage Accounts is Set to Deny",
-  "Risk": "By restricting access to your storage account default network, you add a new layer of security, since the default action is to accept connections from clients on any network.",
+  "Description": "Restricting default network access helps to provide a new layer of security, since storage accounts accept connections from clients on any network. To limit access toselected networks, the default action must be changed.",
+  "Risk": "Storage accounts should be configured to deny access to traffic from all networks (including internet traffic). Access can be granted to traffic from specific Azure Virtualnetworks, allowing a secure network boundary for specific applications to be built.Access can also be granted to public internet IP address ranges to enable connectionsfrom specific internet or on-premises clients. When network rules are configured, onlyapplications from allowed networks can access a storage account. When calling from anallowed network, applications continue to require proper authorization (a valid accesskey or SAS token) to access the storage account.",
   "RelatedUrl": "",
   "Remediation": {
     "Code": {
@@ -19,12 +19,12 @@
       "Terraform": "https://docs.bridgecrew.io/docs/set-default-network-access-rule-for-storage-accounts-to-deny#terraform"
     },
     "Recommendation": {
-      "Text": "To limit access to selected networks or IP addresses, you must first change the default action from 'Allow' to 'Deny'",
+      "Text": "1. Go to Storage Accounts 2. For each storage account, Click on the Networking blade 3. Click the Firewalls and virtual networks heading. 4. Ensure that you have elected to allow access from Selected networks 5. Add rules to allow traffic from specific network. 6. Click Save to apply your changes.",
       "Url": ""
     }
   },
   "Categories": [],
   "DependsOn": [],
   "RelatedTo": [],
-  "Notes": ""
+  "Notes": "All allowed networks will need to be whitelisted on each specific network, creating administrative overhead. This may result in loss of network connectivity, so do not turn on for critical resources during business hours."
 }
diff --git a/prowler/providers/azure/services/storage/storage_ensure_private_endpoints_in_storage_accounts/__init__.py b/prowler/providers/azure/services/storage/storage_ensure_private_endpoints_in_storage_accounts/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/storage/storage_ensure_private_endpoints_in_storage_accounts/storage_ensure_private_endpoints_in_storage_accounts.metadata.json b/prowler/providers/azure/services/storage/storage_ensure_private_endpoints_in_storage_accounts/storage_ensure_private_endpoints_in_storage_accounts.metadata.json
new file mode 100644
index 00000000000..8992f16c74d
--- /dev/null
+++ b/prowler/providers/azure/services/storage/storage_ensure_private_endpoints_in_storage_accounts/storage_ensure_private_endpoints_in_storage_accounts.metadata.json
@@ -0,0 +1,32 @@
+{
+  "Provider": "azure",
+  "CheckID": "storage_ensure_private_endpoints_in_storage_accounts",
+  "CheckTitle": "Ensure Private Endpoints are used to access Storage Accounts",
+  "CheckType": [],
+  "ServiceName": "storage",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "AzureStorageAccount",
+  "Description": "Use private endpoints for your Azure Storage accounts to allow clients and services to securely access data located over a network via an encrypted Private Link. To do this, the private endpoint uses an IP address from the VNet for each service. Network traffic between disparate services securely traverses encrypted over the VNet. This VNet can also link addressing space, extending your network and accessing resources on it. Similarly, it can be a tunnel through public networks to connect remote infrastructures together. This creates further security through segmenting network traffic and preventing outside sources from accessing it.",
+  "Risk": "Storage accounts that are not configured to use Private Endpoints are accessible over the public internet. This can lead to data exfiltration and other security issues.",
+  "RelatedUrl": "https://learn.microsoft.com/en-us/azure/storage/common/storage-private-endpoints",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity-staging/knowledge-base/azure/StorageAccounts/private-endpoints.html#",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "Use Private Endpoints to access Storage Accounts",
+      "Url": "https://docs.microsoft.com/en-us/azure/storage/common/storage-private-endpoints"
+    }
+  },
+  "Categories": [
+    "encryption"
+  ],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": ""
+}
diff --git a/prowler/providers/azure/services/storage/storage_ensure_private_endpoints_in_storage_accounts/storage_ensure_private_endpoints_in_storage_accounts.py b/prowler/providers/azure/services/storage/storage_ensure_private_endpoints_in_storage_accounts/storage_ensure_private_endpoints_in_storage_accounts.py
new file mode 100644
index 00000000000..133671a72f5
--- /dev/null
+++ b/prowler/providers/azure/services/storage/storage_ensure_private_endpoints_in_storage_accounts/storage_ensure_private_endpoints_in_storage_accounts.py
@@ -0,0 +1,22 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.storage.storage_client import storage_client
+
+
+class storage_ensure_private_endpoints_in_storage_accounts(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for subscription, storage_accounts in storage_client.storage_accounts.items():
+            for storage_account in storage_accounts:
+                report = Check_Report_Azure(self.metadata())
+                report.subscription = subscription
+                report.resource_name = storage_account.name
+                report.resource_id = storage_account.id
+                if storage_account.private_endpoint_connections:
+                    report.status = "PASS"
+                    report.status_extended = f"Storage account {storage_account.name} from subscription {subscription} has private endpoint connections."
+                else:
+                    report.status = "FAIL"
+                    report.status_extended = f"Storage account {storage_account.name} from subscription {subscription} does not have private endpoint connections."
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/storage/storage_ensure_soft_delete_is_enabled/__init__.py b/prowler/providers/azure/services/storage/storage_ensure_soft_delete_is_enabled/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/storage/storage_ensure_soft_delete_is_enabled/storage_ensure_soft_delete_is_enabled.metadata.json b/prowler/providers/azure/services/storage/storage_ensure_soft_delete_is_enabled/storage_ensure_soft_delete_is_enabled.metadata.json
new file mode 100644
index 00000000000..13958c96b90
--- /dev/null
+++ b/prowler/providers/azure/services/storage/storage_ensure_soft_delete_is_enabled/storage_ensure_soft_delete_is_enabled.metadata.json
@@ -0,0 +1,32 @@
+{
+  "Provider": "azure",
+  "CheckID": "storage_ensure_soft_delete_is_enabled",
+  "CheckTitle": "Ensure Soft Delete is Enabled for Azure Containers and Blob Storage",
+  "CheckType": [],
+  "ServiceName": "storage",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "AzureStorageAccount",
+  "Description": "The Azure Storage blobs contain data like ePHI or Financial, which can be secret or personal. Data that is erroneously modified or deleted by an application or other storage account user will cause data loss or unavailability.",
+  "Risk": "Containers and Blob Storage data can be incorrectly deleted. An attacker/malicious user may do this deliberately in order to cause disruption. Deleting an Azure Storage blob causes immediate data loss. Enabling this configuration for Azure storage ensures that even if blobs/data were deleted from the storage account, Blobs/data objects are recoverable for a particular time which is set in the Retention policies ranging from 7 days to 365 days.",
+  "RelatedUrl": "https://learn.microsoft.com/en-us/azure/storage/blobs/soft-delete-blob-enable?tabs=azure-portal",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity-staging/knowledge-base/azure/StorageAccounts/enable-soft-delete.html#",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "From the Azure home page, open the hamburger menu in the top left or click on the arrow pointing right with 'More services' underneath. 2. Select Storage. 3. Select Storage Accounts. 4. For each Storage Account, navigate to Data protection in the left scroll column. 5. Check soft delete for both blobs and containers. Set the retention period to a sufficient length for your organization",
+      "Url": "https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-soft-delete"
+    }
+  },
+  "Categories": [
+    "encryption"
+  ],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "Additional storage costs may be incurred as snapshots are retained."
+}
diff --git a/prowler/providers/azure/services/storage/storage_ensure_soft_delete_is_enabled/storage_ensure_soft_delete_is_enabled.py b/prowler/providers/azure/services/storage/storage_ensure_soft_delete_is_enabled/storage_ensure_soft_delete_is_enabled.py
new file mode 100644
index 00000000000..63e948b852e
--- /dev/null
+++ b/prowler/providers/azure/services/storage/storage_ensure_soft_delete_is_enabled/storage_ensure_soft_delete_is_enabled.py
@@ -0,0 +1,27 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.storage.storage_client import storage_client
+
+
+class storage_ensure_soft_delete_is_enabled(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for subscription, storage_accounts in storage_client.storage_accounts.items():
+            for storage_account in storage_accounts:
+                if storage_account.blob_properties:
+                    report = Check_Report_Azure(self.metadata())
+                    report.subscription = subscription
+                    report.resource_name = storage_account.name
+                    report.resource_id = storage_account.id
+                    if getattr(
+                        storage_account.blob_properties.container_delete_retention_policy,
+                        "enabled",
+                        False,
+                    ):
+                        report.status = "PASS"
+                        report.status_extended = f"Storage account {storage_account.name} from subscription {subscription} has soft delete enabled."
+                    else:
+                        report.status = "FAIL"
+                        report.status_extended = f"Storage account {storage_account.name} from subscription {subscription} has soft delete disabled."
+
+                    findings.append(report)
+        return findings
diff --git a/prowler/providers/azure/services/storage/storage_key_rotation_90_days/__init__.py b/prowler/providers/azure/services/storage/storage_key_rotation_90_days/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/storage/storage_key_rotation_90_days/storage_key_rotation_90_days.metadata.json b/prowler/providers/azure/services/storage/storage_key_rotation_90_days/storage_key_rotation_90_days.metadata.json
new file mode 100644
index 00000000000..548782f293c
--- /dev/null
+++ b/prowler/providers/azure/services/storage/storage_key_rotation_90_days/storage_key_rotation_90_days.metadata.json
@@ -0,0 +1,32 @@
+{
+  "Provider": "azure",
+  "CheckID": "storage_key_rotation_90_days",
+  "CheckTitle": "Ensure that Storage Account Access Keys are Periodically Regenerated",
+  "CheckType": [],
+  "ServiceName": "storage",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "AzureStorageAccount",
+  "Description": "Ensure that Storage Account Access Keys are Periodically Regenerated",
+  "Risk": "If the access keys are not regenerated periodically, the likelihood of accidental exposures increases, which can lead to unauthorized access to your storage account resources.",
+  "RelatedUrl": "https://learn.microsoft.com/en-us/azure/storage/common/storage-account-keys-manage?tabs=azure-portal",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity-staging/knowledge-base/azure/StorageAccounts/regenerate-storage-account-access-keys-periodically.html#",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "Ensure that Azure Storage account access keys are regenerated every 90 days in order to decrease the likelihood of accidental exposures and protect your storage account resources against unauthorized access.",
+      "Url": "https://learn.microsoft.com/en-us/azure/storage/common/storage-account-create?tabs=azure-portal#regenerate-storage-access-keys"
+    }
+  },
+  "Categories": [
+    "encryption"
+  ],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": ""
+}
diff --git a/prowler/providers/azure/services/storage/storage_key_rotation_90_days/storage_key_rotation_90_days.py b/prowler/providers/azure/services/storage/storage_key_rotation_90_days/storage_key_rotation_90_days.py
new file mode 100644
index 00000000000..c6e7553cb7f
--- /dev/null
+++ b/prowler/providers/azure/services/storage/storage_key_rotation_90_days/storage_key_rotation_90_days.py
@@ -0,0 +1,26 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.storage.storage_client import storage_client
+
+
+class storage_key_rotation_90_days(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+        for subscription, storage_accounts in storage_client.storage_accounts.items():
+            for storage_account in storage_accounts:
+                report = Check_Report_Azure(self.metadata())
+                report.subscription = subscription
+                report.resource_name = storage_account.name
+                report.resource_id = storage_account.id
+                if not storage_account.key_expiration_period_in_days:
+                    report.status = "FAIL"
+                    report.status_extended = f"Storage account {storage_account.name} from subscription {subscription} has no key expiration period set."
+                else:
+                    if storage_account.key_expiration_period_in_days > 90:
+                        report.status = "FAIL"
+                        report.status_extended = f"Storage account {storage_account.name} from subscription {subscription} has an invalid key expiration period of {storage_account.key_expiration_period_in_days} days."
+                    else:
+                        report.status = "PASS"
+                        report.status_extended = f"Storage account {storage_account.name} from subscription {subscription} has a key expiration period of {storage_account.key_expiration_period_in_days} days."
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/storage/storage_service.py b/prowler/providers/azure/services/storage/storage_service.py
index ffaf857748c..1e4c9f67f37 100644
--- a/prowler/providers/azure/services/storage/storage_service.py
+++ b/prowler/providers/azure/services/storage/storage_service.py
@@ -1,7 +1,11 @@
 from dataclasses import dataclass
 
 from azure.mgmt.storage import StorageManagementClient
-from azure.mgmt.storage.v2022_09_01.models import NetworkRuleSet
+from azure.mgmt.storage.v2022_09_01.models import (
+    DeleteRetentionPolicy,
+    NetworkRuleSet,
+    PrivateEndpointConnection,
+)
 
 from prowler.lib.logger import logger
 from prowler.providers.azure.lib.service.service import AzureService
@@ -12,6 +16,7 @@ class Storage(AzureService):
     def __init__(self, provider):
         super().__init__(StorageManagementClient, provider)
         self.storage_accounts = self.__get_storage_accounts__()
+        self.__get_blob_properties__()
 
     def __get_storage_accounts__(self):
         logger.info("Storage - Getting storage accounts...")
@@ -21,53 +26,80 @@ def __get_storage_accounts__(self):
                 storage_accounts.update({subscription: []})
                 storage_accounts_list = client.storage_accounts.list()
                 for storage_account in storage_accounts_list:
+                    parts = storage_account.id.split("/")
+                    if "resourceGroups" in parts:
+                        resouce_name_index = parts.index("resourceGroups") + 1
+                        resouce_group_name = parts[resouce_name_index]
+                    else:
+                        resouce_group_name = None
+                    key_expiration_period_in_days = None
+                    if storage_account.key_policy:
+                        key_expiration_period_in_days = (
+                            storage_account.key_policy.key_expiration_period_in_days
+                        )
                     storage_accounts[subscription].append(
-                        Storage_Account(
+                        Account(
                             id=storage_account.id,
                             name=storage_account.name,
+                            resouce_group_name=resouce_group_name,
                             enable_https_traffic_only=storage_account.enable_https_traffic_only,
                             infrastructure_encryption=storage_account.encryption.require_infrastructure_encryption,
                             allow_blob_public_access=storage_account.allow_blob_public_access,
                             network_rule_set=storage_account.network_rule_set,
                             encryption_type=storage_account.encryption.key_source,
                             minimum_tls_version=storage_account.minimum_tls_version,
+                            private_endpoint_connections=storage_account.private_endpoint_connections,
+                            key_expiration_period_in_days=key_expiration_period_in_days,
                         )
                     )
             except Exception as error:
-                logger.error(f"Subscription name: {subscription}")
                 logger.error(
-                    f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                    f"Subscription name: {subscription} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
                 )
         return storage_accounts
 
+    def __get_blob_properties__(self):
+        logger.info("Storage - Getting blob properties...")
+        try:
+            for subscription, accounts in self.storage_accounts.items():
+                client = self.clients[subscription]
+                for account in accounts:
+                    properties = client.blob_services.get_service_properties(
+                        account.resouce_group_name, account.name
+                    )
+                    account.blob_properties = BlobProperties(
+                        id=properties.id,
+                        name=properties.name,
+                        type=properties.type,
+                        default_service_version=properties.default_service_version,
+                        container_delete_retention_policy=properties.container_delete_retention_policy,
+                    )
+        except Exception as error:
+            logger.error(
+                f"Subscription name: {subscription} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+            )
+
+
+@dataclass
+class BlobProperties:
+    id: str
+    name: str
+    type: str
+    default_service_version: str
+    container_delete_retention_policy: DeleteRetentionPolicy
+
 
 @dataclass
-class Storage_Account:
+class Account:
     id: str
     name: str
+    resouce_group_name: str
     enable_https_traffic_only: bool
     infrastructure_encryption: bool
     allow_blob_public_access: bool
     network_rule_set: NetworkRuleSet
     encryption_type: str
     minimum_tls_version: str
-
-    def __init__(
-        self,
-        id,
-        name,
-        enable_https_traffic_only,
-        infrastructure_encryption,
-        allow_blob_public_access,
-        network_rule_set,
-        encryption_type,
-        minimum_tls_version,
-    ):
-        self.id = id
-        self.name = name
-        self.enable_https_traffic_only = enable_https_traffic_only
-        self.infrastructure_encryption = infrastructure_encryption
-        self.allow_blob_public_access = allow_blob_public_access
-        self.network_rule_set = network_rule_set
-        self.encryption_type = encryption_type
-        self.minimum_tls_version = minimum_tls_version
+    private_endpoint_connections: PrivateEndpointConnection
+    key_expiration_period_in_days: str
+    blob_properties: BlobProperties = None
diff --git a/prowler/providers/azure/services/vm/__init__.py b/prowler/providers/azure/services/vm/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/vm/vm_client.py b/prowler/providers/azure/services/vm/vm_client.py
new file mode 100644
index 00000000000..33bde5b1b29
--- /dev/null
+++ b/prowler/providers/azure/services/vm/vm_client.py
@@ -0,0 +1,4 @@
+from prowler.providers.azure.lib.audit_info.audit_info import azure_audit_info
+from prowler.providers.azure.services.vm.vm_service import VirtualMachines
+
+vm_client = VirtualMachines(azure_audit_info)
diff --git a/prowler/providers/azure/services/vm/vm_ensure_attached_disks_encrypted_with_cmk/__init__.py b/prowler/providers/azure/services/vm/vm_ensure_attached_disks_encrypted_with_cmk/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/vm/vm_ensure_attached_disks_encrypted_with_cmk/vm_ensure_attached_disks_encrypted_with_cmk.metadata.json b/prowler/providers/azure/services/vm/vm_ensure_attached_disks_encrypted_with_cmk/vm_ensure_attached_disks_encrypted_with_cmk.metadata.json
new file mode 100644
index 00000000000..dc79e51548d
--- /dev/null
+++ b/prowler/providers/azure/services/vm/vm_ensure_attached_disks_encrypted_with_cmk/vm_ensure_attached_disks_encrypted_with_cmk.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "vm_ensure_attached_disks_encrypted_with_cmk",
+  "CheckTitle": "Ensure that 'OS and Data' disks are encrypted with Customer Managed Key (CMK)",
+  "CheckType": [],
+  "ServiceName": "vm",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "high",
+  "ResourceType": "Microsoft.Compute/virtualMachines",
+  "Description": "Ensure that OS disks (boot volumes) and data disks (non-boot volumes) are encrypted with CMK (Customer Managed Keys). Customer Managed keys can be either ADE or Server Side Encryption (SSE).",
+  "Risk": "Encrypting the IaaS VM's OS disk (boot volume) and Data disks (non-boot volume) ensures that the entire content is fully unrecoverable without a key, thus protecting the volume from unwanted reads. PMK (Platform Managed Keys) are enabled by default in Azure-managed disks and allow encryption at rest. CMK is recommended because it gives the customer the option to control which specific keys are used for the encryption and decryption of the disk. The customer can then change keys and increase security by disabling them instead of relying on the PMK key that remains unchanging. There is also the option to increase security further by using automatically rotating keys so that access to disk is ensured to be limited. Organizations should evaluate what their security requirements are, however, for the data stored on the disk. For high-risk data using CMK is a must, as it provides extra steps of security. If the data is low risk, PMK is enabled by default and provides sufficient data security.",
+  "RelatedUrl": "https://learn.microsoft.com/en-us/azure/virtual-machines/disk-encryption-overview",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/VirtualMachines/sse-boot-disk-cmk.html#",
+      "Terraform": "https://docs.bridgecrew.io/docs/bc_azr_general_1#terraform"
+    },
+    "Recommendation": {
+      "Text": "Note: Disks must be detached from VMs to have encryption changed. 1. Go to Virtual machines 2. For each virtual machine, go to Settings 3. Click on Disks 4. Click the ellipsis (...), then click Detach to detach the disk from the VM 5. Now search for Disks and locate the unattached disk 6. Click the disk then select Encryption 7. Change your encryption type, then select your encryption set 8. Click Save 9. Go back to the VM and re-attach the disk",
+      "Url": "https://learn.microsoft.com/en-us/azure/security/fundamentals/data-encryption-best-practices#protect-data-at-rest"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "Using CMK/BYOK will entail additional management of keys."
+}
diff --git a/prowler/providers/azure/services/vm/vm_ensure_attached_disks_encrypted_with_cmk/vm_ensure_attached_disks_encrypted_with_cmk.py b/prowler/providers/azure/services/vm/vm_ensure_attached_disks_encrypted_with_cmk/vm_ensure_attached_disks_encrypted_with_cmk.py
new file mode 100644
index 00000000000..de333110706
--- /dev/null
+++ b/prowler/providers/azure/services/vm/vm_ensure_attached_disks_encrypted_with_cmk/vm_ensure_attached_disks_encrypted_with_cmk.py
@@ -0,0 +1,28 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.vm.vm_client import vm_client
+
+
+class vm_ensure_attached_disks_encrypted_with_cmk(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for subscription_name, disks in vm_client.disks.items():
+            for disk_id, disk in disks.items():
+                if disk.vms_attached:
+                    report = Check_Report_Azure(self.metadata())
+                    report.status = "PASS"
+                    report.subscription = subscription_name
+                    report.resource_name = disk.resource_name
+                    report.resource_id = disk.resource_id
+                    report.status_extended = f"Disk '{disk_id}' is encrypted with a customer-managed key in subscription {subscription_name}."
+
+                    if (
+                        not disk.encryption_type
+                        or disk.encryption_type == "EncryptionAtRestWithPlatformKey"
+                    ):
+                        report.status = "FAIL"
+                        report.status_extended = f"Disk '{disk_id}' is not encrypted with a customer-managed key in subscription {subscription_name}."
+
+                    findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/vm/vm_ensure_unattached_disks_encrypted_with_cmk/__init__.py b/prowler/providers/azure/services/vm/vm_ensure_unattached_disks_encrypted_with_cmk/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/vm/vm_ensure_unattached_disks_encrypted_with_cmk/vm_ensure_unattached_disks_encrypted_with_cmk.metadata.json b/prowler/providers/azure/services/vm/vm_ensure_unattached_disks_encrypted_with_cmk/vm_ensure_unattached_disks_encrypted_with_cmk.metadata.json
new file mode 100644
index 00000000000..9ea330491e5
--- /dev/null
+++ b/prowler/providers/azure/services/vm/vm_ensure_unattached_disks_encrypted_with_cmk/vm_ensure_unattached_disks_encrypted_with_cmk.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "vm_ensure_unattached_disks_encrypted_with_cmk",
+  "CheckTitle": "Ensure that 'Unattached disks' are encrypted with 'Customer Managed Key' (CMK)",
+  "CheckType": [],
+  "ServiceName": "vm",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "high",
+  "ResourceType": "Microsoft.Compute/virtualMachines",
+  "Description": "Ensure that unattached disks in a subscription are encrypted with a Customer Managed Key (CMK).",
+  "Risk": "Managed disks are encrypted by default with Platform-managed keys. Using Customer-managed keys may provide an additional level of security or meet an organization's regulatory requirements. Encrypting managed disks ensures that its entire content is fully unrecoverable without a key and thus protects the volume from unwarranted reads. Even if the disk is not attached to any of the VMs, there is always a risk where a compromised user account with administrative access to VM service can mount/attach these data disks, which may lead to sensitive information disclosure and tampering.",
+  "RelatedUrl": "https://docs.microsoft.com/en-us/azure/security/fundamentals/azure-disk-encryption-vms-vmss",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/VirtualMachines/sse-unattached-disk-cmk.html#",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "If data stored in the disk is no longer useful, refer to Azure documentation to delete unattached data disks at: https://learn.microsoft.com/en-us/rest/api/compute/disks/delete?view=rest-compute-2023-10-02&tabs=HTTP",
+      "Url": "https://learn.microsoft.com/en-us/azure/security/fundamentals/data-encryption-best-practices#protect-data-at-rest"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "You must have your key vault set up to utilize this. Encryption is available only on Standard tier VMs. This might cost you more. Utilizing and maintaining Customer-managed keys will require additional work to create, protect, and rotate keys."
+}
diff --git a/prowler/providers/azure/services/vm/vm_ensure_unattached_disks_encrypted_with_cmk/vm_ensure_unattached_disks_encrypted_with_cmk.py b/prowler/providers/azure/services/vm/vm_ensure_unattached_disks_encrypted_with_cmk/vm_ensure_unattached_disks_encrypted_with_cmk.py
new file mode 100644
index 00000000000..20ea322b587
--- /dev/null
+++ b/prowler/providers/azure/services/vm/vm_ensure_unattached_disks_encrypted_with_cmk/vm_ensure_unattached_disks_encrypted_with_cmk.py
@@ -0,0 +1,28 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.vm.vm_client import vm_client
+
+
+class vm_ensure_unattached_disks_encrypted_with_cmk(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for subscription_name, disks in vm_client.disks.items():
+            for disk_id, disk in disks.items():
+                if not disk.vms_attached:
+                    report = Check_Report_Azure(self.metadata())
+                    report.status = "PASS"
+                    report.subscription = subscription_name
+                    report.resource_name = disk.resource_name
+                    report.resource_id = disk.resource_id
+                    report.status_extended = f"Disk '{disk_id}' is encrypted with a customer-managed key in subscription {subscription_name}."
+
+                    if (
+                        not disk.encryption_type
+                        or disk.encryption_type == "EncryptionAtRestWithPlatformKey"
+                    ):
+                        report.status = "FAIL"
+                        report.status_extended = f"Disk '{disk_id}' is not encrypted with a customer-managed key in subscription {subscription_name}."
+
+                    findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/vm/vm_ensure_using_managed_disks/__init__.py b/prowler/providers/azure/services/vm/vm_ensure_using_managed_disks/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/azure/services/vm/vm_ensure_using_managed_disks/vm_ensure_using_managed_disks.metadata.json b/prowler/providers/azure/services/vm/vm_ensure_using_managed_disks/vm_ensure_using_managed_disks.metadata.json
new file mode 100644
index 00000000000..1297a3d05f2
--- /dev/null
+++ b/prowler/providers/azure/services/vm/vm_ensure_using_managed_disks/vm_ensure_using_managed_disks.metadata.json
@@ -0,0 +1,30 @@
+{
+  "Provider": "azure",
+  "CheckID": "vm_ensure_using_managed_disks",
+  "CheckTitle": "Ensure Virtual Machines are utilizing Managed Disks",
+  "CheckType": [],
+  "ServiceName": "vm",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "Microsoft.Compute/virtualMachines",
+  "Description": "Migrate blob-based VHDs to Managed Disks on Virtual Machines to exploit the default features of this configuration. The features include: 1. Default Disk Encryption 2. Resilience, as Microsoft will managed the disk storage and move around if underlying hardware goes faulty 3. Reduction of costs over storage accounts",
+  "Risk": "Managed disks are by default encrypted on the underlying hardware, so no additional encryption is required for basic protection. It is available if additional encryption is required. Managed disks are by design more resilient that storage accounts. For ARM-deployed Virtual Machines, Azure Adviser will at some point recommend moving VHDs to managed disks both from a security and cost management perspective.",
+  "RelatedUrl": "https://learn.microsoft.com/en-us/azure/virtual-machines/unmanaged-disks-deprecation",
+  "Remediation": {
+    "Code": {
+      "CLI": "",
+      "NativeIaC": "",
+      "Other": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/VirtualMachines/managed-disks-in-use.html",
+      "Terraform": "https://docs.bridgecrew.io/docs/ensure-virtual-machines-are-utilizing-managed-disks#terraform"
+    },
+    "Recommendation": {
+      "Text": "There are additional costs for managed disks based off of disk space allocated. When converting to managed disks, VMs will be powered off and back on.",
+      "Url": "https://docs.microsoft.com/en-us/security/benchmark/azure/security-controls-v3-data-protection#dp-4-enable-data-at-rest-encryption-by-default"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "There are additional costs for managed disks based off of disk space allocated. When converting to managed disks, VMs will be powered off and back on."
+}
diff --git a/prowler/providers/azure/services/vm/vm_ensure_using_managed_disks/vm_ensure_using_managed_disks.py b/prowler/providers/azure/services/vm/vm_ensure_using_managed_disks/vm_ensure_using_managed_disks.py
new file mode 100644
index 00000000000..96d241096fe
--- /dev/null
+++ b/prowler/providers/azure/services/vm/vm_ensure_using_managed_disks/vm_ensure_using_managed_disks.py
@@ -0,0 +1,40 @@
+from prowler.lib.check.models import Check, Check_Report_Azure
+from prowler.providers.azure.services.vm.vm_client import vm_client
+
+
+class vm_ensure_using_managed_disks(Check):
+    def execute(self) -> Check_Report_Azure:
+        findings = []
+
+        for subscription_name, vms in vm_client.virtual_machines.items():
+            for vm_id, vm in vms.items():
+                report = Check_Report_Azure(self.metadata())
+                report.status = "PASS"
+                report.subscription = subscription_name
+                report.resource_name = vm.resource_name
+                report.resource_id = vm_id
+                report.status_extended = f"VM {vm.resource_name} is using managed disks in subscription {subscription_name}"
+
+                using_managed_disks = (
+                    True
+                    if vm.storage_profile
+                    and getattr(vm.storage_profile, "os_disk", False)
+                    and getattr(vm.storage_profile.os_disk, "managed_disk", False)
+                    else False
+                )
+
+                if using_managed_disks and getattr(
+                    vm.storage_profile, "data_disks", False
+                ):
+                    for data_disk in vm.storage_profile.data_disks:
+                        if not getattr(data_disk, "managed_disk", False):
+                            using_managed_disks = False
+                            break
+
+                if not using_managed_disks:
+                    report.status = "FAIL"
+                    report.status_extended = f"VM {vm.resource_name} is not using managed disks in subscription {subscription_name}"
+
+                findings.append(report)
+
+        return findings
diff --git a/prowler/providers/azure/services/vm/vm_service.py b/prowler/providers/azure/services/vm/vm_service.py
new file mode 100644
index 00000000000..4a84f7cb8f4
--- /dev/null
+++ b/prowler/providers/azure/services/vm/vm_service.py
@@ -0,0 +1,91 @@
+from dataclasses import dataclass
+
+from azure.mgmt.compute import ComputeManagementClient
+from azure.mgmt.compute.models import StorageProfile
+
+from prowler.lib.logger import logger
+from prowler.providers.azure.lib.audit_info.models import Azure_Audit_Info
+from prowler.providers.azure.lib.service.service import AzureService
+
+
+########################## VirtualMachines
+class VirtualMachines(AzureService):
+    def __init__(self, audit_info: Azure_Audit_Info):
+        super().__init__(ComputeManagementClient, audit_info)
+        self.virtual_machines = self.__get_virtual_machines__()
+        self.disks = self.__get_disks__()
+
+    def __get_virtual_machines__(self):
+        logger.info("VirtualMachines - Getting virtual machines...")
+        virtual_machines = {}
+
+        for subscription_name, client in self.clients.items():
+            try:
+                virtual_machines_list = client.virtual_machines.list_all()
+                virtual_machines.update({subscription_name: {}})
+
+                for vm in virtual_machines_list:
+                    virtual_machines[subscription_name].update(
+                        {
+                            vm.vm_id: VirtualMachine(
+                                resource_id=vm.id,
+                                resource_name=vm.name,
+                                storage_profile=getattr(vm, "storage_profile", None),
+                            )
+                        }
+                    )
+            except Exception as error:
+                logger.error(
+                    f"Subscription name: {subscription_name} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
+
+        return virtual_machines
+
+    def __get_disks__(self):
+        logger.info("VirtualMachines - Getting disks...")
+        disks = {}
+
+        for subscription_name, client in self.clients.items():
+            try:
+                disks_list = client.disks.list()
+                disks.update({subscription_name: {}})
+
+                for disk in disks_list:
+                    vms_attached = []
+                    if disk.managed_by:
+                        vms_attached.append(disk.managed_by)
+                    if disk.managed_by_extended:
+                        vms_attached.extend(disk.managed_by_extended)
+                    disks[subscription_name].update(
+                        {
+                            disk.unique_id: Disk(
+                                resource_id=disk.id,
+                                resource_name=disk.name,
+                                vms_attached=vms_attached,
+                                encryption_type=getattr(
+                                    getattr(disk, "encryption", None), "type", None
+                                ),
+                            )
+                        }
+                    )
+            except Exception as error:
+                logger.error(
+                    f"Subscription name: {subscription_name} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
+
+        return disks
+
+
+@dataclass
+class VirtualMachine:
+    resource_id: str
+    resource_name: str
+    storage_profile: StorageProfile
+
+
+@dataclass
+class Disk:
+    resource_id: str
+    resource_name: str
+    vms_attached: list[str]
+    encryption_type: str
diff --git a/prowler/providers/common/audit_info.py b/prowler/providers/common/audit_info.py
index 8a00b76695d..24f921758fc 100644
--- a/prowler/providers/common/audit_info.py
+++ b/prowler/providers/common/audit_info.py
@@ -8,6 +8,7 @@
 from prowler.providers.aws.aws_provider import (
     AWS_Provider,
     assume_role,
+    get_aws_enabled_regions,
     get_checks_from_input_arn,
     get_regions_from_audit_resources,
 )
@@ -17,6 +18,7 @@
 from prowler.providers.aws.lib.credentials.credentials import validate_AWSCredentials
 from prowler.providers.aws.lib.organizations.organizations import (
     get_organizations_metadata,
+    parse_organizations_metadata,
 )
 from prowler.providers.aws.lib.resource_api_tagging.resource_api_tagging import (
     get_tagged_resources,
@@ -42,15 +44,7 @@ def __init__(self):
 
     def print_gcp_credentials(self, audit_info: GCP_Audit_Info):
         # Beautify audited profile, set "default" if there is no profile set
-        try:
-            getattr(audit_info.credentials, "_service_account_email")
-            profile = (
-                audit_info.credentials._service_account_email
-                if audit_info.credentials._service_account_email is not None
-                else "default"
-            )
-        except AttributeError:
-            profile = "default"
+        profile = getattr(audit_info.credentials, "_service_account_email", "default")
 
         report = f"""
 This report is being generated using credentials below:
@@ -76,12 +70,12 @@ def print_kubernetes_credentials(self, audit_info: Kubernetes_Audit_Info):
     def print_azure_credentials(self, audit_info: Azure_Audit_Info):
         printed_subscriptions = []
         for key, value in audit_info.identity.subscriptions.items():
-            intermediate = key + " : " + value
+            intermediate = f"{key} : {value}"
             printed_subscriptions.append(intermediate)
         report = f"""
 This report is being generated using the identity below:
 
-Azure Tenant IDs: {Fore.YELLOW}[{" ".join(audit_info.identity.tenant_ids)}]{Style.RESET_ALL} Azure Tenant Domain: {Fore.YELLOW}[{audit_info.identity.domain}]{Style.RESET_ALL} Azure Region: {Fore.YELLOW}[{audit_info.AzureRegionConfig.name}]{Style.RESET_ALL}
+Azure Tenant IDs: {Fore.YELLOW}[{" ".join(audit_info.identity.tenant_ids)}]{Style.RESET_ALL} Azure Tenant Domain: {Fore.YELLOW}[{audit_info.identity.domain}]{Style.RESET_ALL} Azure Region: {Fore.YELLOW}[{audit_info.azure_region_config.name}]{Style.RESET_ALL}
 Azure Subscriptions: {Fore.YELLOW}{printed_subscriptions}{Style.RESET_ALL}
 Azure Identity Type: {Fore.YELLOW}[{audit_info.identity.identity_type}]{Style.RESET_ALL} Azure Identity ID: {Fore.YELLOW}[{audit_info.identity.identity_id}]{Style.RESET_ALL}
 """
@@ -98,6 +92,7 @@ def set_aws_audit_info(self, arguments) -> AWS_Audit_Info:
         current_audit_info.assumed_role_info.role_arn = input_role
         input_session_duration = arguments.get("session_duration")
         input_external_id = arguments.get("external_id")
+        input_role_session_name = arguments.get("role_session_name")
 
         # STS Endpoint Region
         sts_endpoint_region = arguments.get("sts_endpoint_region")
@@ -166,6 +161,9 @@ def set_aws_audit_info(self, arguments) -> AWS_Audit_Info:
             )
             current_audit_info.assumed_role_info.external_id = input_external_id
             current_audit_info.assumed_role_info.mfa_enabled = input_mfa
+            current_audit_info.assumed_role_info.role_session_name = (
+                input_role_session_name
+            )
 
             # Check if role arn is valid
             try:
@@ -237,17 +235,53 @@ def set_aws_audit_info(self, arguments) -> AWS_Audit_Info:
 
             else:
                 logger.info(
-                    f"Getting organizations metadata for account {organizations_role_arn}"
+                    f"Getting organizations metadata for account with IAM Role ARN {organizations_role_arn}"
                 )
                 assumed_credentials = assume_role(
                     aws_provider.aws_session,
                     aws_provider.role_info,
                     sts_endpoint_region,
                 )
-                current_audit_info.organizations_metadata = get_organizations_metadata(
-                    current_audit_info.audited_account, assumed_credentials
+                organizations_metadata, list_tags_for_resource = (
+                    get_organizations_metadata(
+                        current_audit_info.audited_account, assumed_credentials
+                    )
+                )
+                current_audit_info.organizations_metadata = (
+                    parse_organizations_metadata(
+                        organizations_metadata, list_tags_for_resource
+                    )
+                )
+                logger.info(
+                    f"Organizations metadata retrieved with IAM Role ARN {organizations_role_arn}"
+                )
+        else:
+            try:
+                logger.info(
+                    "Getting organizations metadata for account if it is a delegated administrator"
+                )
+                organizations_metadata, list_tags_for_resource = (
+                    get_organizations_metadata(
+                        aws_account_id=current_audit_info.audited_account,
+                        session=current_audit_info.audit_session,
+                    )
+                )
+                if organizations_metadata:
+                    current_audit_info.organizations_metadata = (
+                        parse_organizations_metadata(
+                            organizations_metadata, list_tags_for_resource
+                        )
+                    )
+
+                    logger.info(
+                        "Organizations metadata retrieved as a delegated administrator"
+                    )
+            except Exception as error:
+                # If the account is not a delegated administrator for AWS Organizations a credentials error will be thrown
+                # Since it is a permission issue for an optional we'll raise a warning
+                logger.warning(
+                    f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
                 )
-                logger.info("Organizations metadata retrieved")
 
         # Setting default region of session
         if current_audit_info.audit_session.region_name:
@@ -268,6 +302,9 @@ def set_aws_audit_info(self, arguments) -> AWS_Audit_Info:
         if arguments.get("resource_arn"):
             current_audit_info.audit_resources = arguments.get("resource_arn")
 
+        # Get Enabled Regions
+        current_audit_info.enabled_regions = get_aws_enabled_regions(current_audit_info)
+
         return current_audit_info
 
     def set_aws_execution_parameters(self, provider, audit_info) -> list[str]:
@@ -327,12 +364,18 @@ def set_azure_audit_info(self, arguments) -> Azure_Audit_Info:
         azure_audit_info.credentials = azure_provider.get_credentials()
         azure_audit_info.identity = azure_provider.get_identity()
         region_config = azure_provider.get_region_config()
-        azure_audit_info.AzureRegionConfig = AzureRegionConfig(
+        azure_audit_info.azure_region_config = AzureRegionConfig(
             name=region,
             authority=region_config["authority"],
             base_url=region_config["base_url"],
             credential_scopes=region_config["credential_scopes"],
         )
+        azure_audit_info.locations = azure_provider.get_locations(
+            azure_audit_info.credentials, region_config
+        )
+
+        if not arguments.get("only_logs"):
+            self.print_azure_credentials(azure_audit_info)
 
         return azure_audit_info
 
@@ -405,7 +448,7 @@ def set_provider_audit_info(provider: str, arguments: dict):
 
 def set_provider_execution_parameters(provider: str, audit_info):
     """
-    set_provider_audit_info configures automatically the audit execution based on the selected provider and returns the checks that are going to be executed.
+    set_provider_execution_parameters" configures automatically the audit execution based on the selected provider and returns the checks that are going to be executed.
     """
     try:
         set_provider_execution_parameters_function = (
diff --git a/prowler/providers/common/outputs.py b/prowler/providers/common/outputs.py
index 49d9dba0552..c23a3187da1 100644
--- a/prowler/providers/common/outputs.py
+++ b/prowler/providers/common/outputs.py
@@ -69,10 +69,10 @@ def __init__(self, arguments, mutelist_file, bulk_checks_metadata):
         if arguments.output_directory:
             if not isdir(arguments.output_directory):
                 if arguments.output_modes:
-                    makedirs(arguments.output_directory)
+                    makedirs(arguments.output_directory, exist_ok=True)
             if not isdir(arguments.output_directory + "/compliance"):
                 if arguments.output_modes:
-                    makedirs(arguments.output_directory + "/compliance")
+                    makedirs(arguments.output_directory + "/compliance", exist_ok=True)
 
 
 class Azure_Output_Options(Provider_Output_Options):
@@ -80,6 +80,12 @@ def __init__(self, arguments, audit_info, mutelist_file, bulk_checks_metadata):
         # First call Provider_Output_Options init
         super().__init__(arguments, mutelist_file, bulk_checks_metadata)
 
+        # Confire Shodan API
+        if arguments.shodan:
+            audit_info = change_config_var(
+                "shodan_api_key", arguments.shodan, audit_info
+            )
+
         # Check if custom output filename was input, if not, set the default
         if (
             not hasattr(arguments, "output_filename")
@@ -106,7 +112,7 @@ def __init__(self, arguments, audit_info, mutelist_file, bulk_checks_metadata):
             not hasattr(arguments, "output_filename")
             or arguments.output_filename is None
         ):
-            self.output_filename = f"prowler-output-{audit_info.default_project_id}-{output_file_timestamp}"
+            self.output_filename = f"prowler-output-{getattr(audit_info.credentials, '_service_account_email', 'default')}-{output_file_timestamp}"
         else:
             self.output_filename = arguments.output_filename
 
@@ -152,6 +158,7 @@ def __init__(self, arguments, audit_info, mutelist_file, bulk_checks_metadata):
 
         # Security Hub Outputs
         self.security_hub_enabled = arguments.security_hub
+        self.send_sh_only_fails = arguments.send_sh_only_fails
         if arguments.security_hub:
             if not self.output_modes:
                 self.output_modes = ["json-asff"]
diff --git a/prowler/providers/gcp/gcp_provider.py b/prowler/providers/gcp/gcp_provider.py
index 7f5b700f998..54a8f5f9997 100644
--- a/prowler/providers/gcp/gcp_provider.py
+++ b/prowler/providers/gcp/gcp_provider.py
@@ -1,6 +1,7 @@
 import os
 import sys
 
+from colorama import Fore, Style
 from google import auth
 from googleapiclient import discovery
 
@@ -17,9 +18,6 @@ def __init__(
         self.credentials, self.default_project_id = self.__set_credentials__(
             credentials_file
         )
-        if not self.default_project_id:
-            logger.critical("No Project ID associated to Google Credentials.")
-            sys.exit(1)
 
         self.project_ids = []
         accessible_projects = self.get_project_ids()
@@ -89,4 +87,7 @@ def get_project_ids(self):
             logger.error(
                 f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
             )
+            print(
+                f"\n{Fore.YELLOW}Cloud Resource Manager API {Style.RESET_ALL}has not been used before or it is disabled.\nEnable it by visiting https://console.developers.google.com/apis/api/cloudresourcemanager.googleapis.com/ then retry."
+            )
             return []
diff --git a/prowler/providers/gcp/lib/service/service.py b/prowler/providers/gcp/lib/service/service.py
index c76691b6171..581e0538ea6 100644
--- a/prowler/providers/gcp/lib/service/service.py
+++ b/prowler/providers/gcp/lib/service/service.py
@@ -26,7 +26,9 @@ def __init__(
         self.api_version = api_version
         self.default_project_id = provider.default_project_id
         self.region = region
-        self.client = self.__generate_client__(service, api_version, self.credentials)
+        self.client = self.__generate_client__(
+            self.service, api_version, self.credentials
+        )
         # Only project ids that have their API enabled will be scanned
         self.project_ids = self.__is_api_active__(provider.project_ids)
 
@@ -60,7 +62,7 @@ def __is_api_active__(self, audited_project_ids):
                     project_ids.append(project_id)
                 else:
                     print(
-                        f"\n{Fore.YELLOW}{self.service} API {Style.RESET_ALL}has not been used in project {project_id} before or it is disabled.\nEnable it by visiting https://console.developers.google.com/apis/api/dataproc.googleapis.com/overview?project={project_id} then retry."
+                        f"\n{Fore.YELLOW}{self.service} API {Style.RESET_ALL}has not been used in project {project_id} before or it is disabled.\nEnable it by visiting https://console.developers.google.com/apis/api/{self.service}.googleapis.com/overview?project={project_id} then retry."
                     )
             except Exception as error:
                 logger.error(
diff --git a/prowler/providers/gcp/services/artifacts/artifacts_container_analysis_enabled/__init__.py b/prowler/providers/gcp/services/artifacts/artifacts_container_analysis_enabled/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/gcp/services/artifacts/artifacts_container_analysis_enabled/artifacts_container_analysis_enabled.metadata.json b/prowler/providers/gcp/services/artifacts/artifacts_container_analysis_enabled/artifacts_container_analysis_enabled.metadata.json
new file mode 100644
index 00000000000..7aafa5eba47
--- /dev/null
+++ b/prowler/providers/gcp/services/artifacts/artifacts_container_analysis_enabled/artifacts_container_analysis_enabled.metadata.json
@@ -0,0 +1,33 @@
+{
+  "Provider": "gcp",
+  "CheckID": "artifacts_container_analysis_enabled",
+  "CheckTitle": "Ensure Image Vulnerability Analysis using AR Container Analysis or a third-party provider",
+  "CheckType": [
+    "Security",
+    "Configuration"
+  ],
+  "ServiceName": "Artifact Registry",
+  "SubServiceName": "Container Analysis",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "Service",
+  "Description": "Scan images stored in Google Container Registry (GCR) for vulnerabilities using AR Container Analysis or a third-party provider. This helps identify and mitigate security risks associated with known vulnerabilities in container images.",
+  "Risk": "Without image vulnerability scanning, container images stored in Artifact Registry may contain known vulnerabilities, increasing the risk of exploitation by malicious actors.",
+  "RelatedUrl": "https://cloud.google.com/artifact-analysis/docs",
+  "Remediation": {
+    "Code": {
+      "CLI": "gcloud services enable containeranalysis.googleapis.com",
+      "NativeIaC": "",
+      "Other": "",
+      "Terraform": ""
+    },
+    "Recommendation": {
+      "Text": "Enable vulnerability scanning for images stored in Artifact Registry using AR Container Analysis or a third-party provider.",
+      "Url": "https://cloud.google.com/artifact-analysis/docs/container-scanning-overview"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "By default, AR Container Analysis is disabled."
+}
diff --git a/prowler/providers/gcp/services/artifacts/artifacts_container_analysis_enabled/artifacts_container_analysis_enabled.py b/prowler/providers/gcp/services/artifacts/artifacts_container_analysis_enabled/artifacts_container_analysis_enabled.py
new file mode 100644
index 00000000000..5c601819c9c
--- /dev/null
+++ b/prowler/providers/gcp/services/artifacts/artifacts_container_analysis_enabled/artifacts_container_analysis_enabled.py
@@ -0,0 +1,31 @@
+from prowler.lib.check.models import Check, Check_Report_GCP
+from prowler.providers.gcp.services.serviceusage.serviceusage_client import (
+    serviceusage_client,
+)
+
+
+class artifacts_container_analysis_enabled(Check):
+    def execute(self) -> Check_Report_GCP:
+        findings = []
+        for project_id in serviceusage_client.project_ids:
+            report = Check_Report_GCP(self.metadata())
+            report.project_id = project_id
+            report.resource_id = "containeranalysis.googleapis.com"
+            report.resource_name = "AR Container Analysis"
+            report.location = serviceusage_client.region
+            report.status = "FAIL"
+            report.status_extended = (
+                f"AR Container Analysis is not enabled in project {project_id}."
+            )
+            for active_service in serviceusage_client.active_services.get(
+                project_id, []
+            ):
+                if active_service.name == "containeranalysis.googleapis.com":
+                    report.status = "PASS"
+                    report.status_extended = (
+                        f"AR Container Analysis is enabled in project {project_id}."
+                    )
+                    break
+            findings.append(report)
+
+        return findings
diff --git a/prowler/providers/gcp/services/compute/compute_service.py b/prowler/providers/gcp/services/compute/compute_service.py
index eeb3a0945b3..fa23743e6c1 100644
--- a/prowler/providers/gcp/services/compute/compute_service.py
+++ b/prowler/providers/gcp/services/compute/compute_service.py
@@ -114,11 +114,13 @@ def __get_instances__(self, zone):
                                 disks_encryption=[
                                     (
                                         disk["deviceName"],
-                                        True
-                                        if disk.get("diskEncryptionKey", {}).get(
-                                            "sha256"
-                                        )
-                                        else False,
+                                        (
+                                            True
+                                            if disk.get("diskEncryptionKey", {}).get(
+                                                "sha256"
+                                            )
+                                            else False
+                                        ),
                                     )
                                     for disk in instance["disks"]
                                 ],
@@ -144,9 +146,9 @@ def __get_networks__(self):
                         subnet_mode = (
                             "legacy"
                             if "autoCreateSubnetworks" not in network
-                            else "auto"
-                            if network["autoCreateSubnetworks"]
-                            else "custom"
+                            else (
+                                "auto" if network["autoCreateSubnetworks"] else "custom"
+                            )
                         )
                         self.networks.append(
                             Network(
diff --git a/prowler/providers/gcp/services/gcr/gcr_container_scanning_enabled/__init__.py b/prowler/providers/gcp/services/gcr/gcr_container_scanning_enabled/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/gcp/services/gcr/gcr_container_scanning_enabled/gcr_container_scanning_enabled.metadata.json b/prowler/providers/gcp/services/gcr/gcr_container_scanning_enabled/gcr_container_scanning_enabled.metadata.json
new file mode 100644
index 00000000000..0820c11190f
--- /dev/null
+++ b/prowler/providers/gcp/services/gcr/gcr_container_scanning_enabled/gcr_container_scanning_enabled.metadata.json
@@ -0,0 +1,33 @@
+{
+  "Provider": "gcp",
+  "CheckID": "gcr_container_scanning_enabled",
+  "CheckTitle": "Ensure Image Vulnerability Scanning using GCR Container Scanning or a third-party provider",
+  "CheckType": [
+    "Security",
+    "Configuration"
+  ],
+  "ServiceName": "Google Container Registry (GCR)",
+  "SubServiceName": "Container Scanning",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "Service",
+  "Description": "Scan images stored in Google Container Registry (GCR) for vulnerabilities using GCR Container Scanning or a third-party provider. This helps identify and mitigate security risks associated with known vulnerabilities in container images.",
+  "Risk": "Without image vulnerability scanning, container images stored in GCR may contain known vulnerabilities, increasing the risk of exploitation by malicious actors.",
+  "RelatedUrl": "https://cloud.google.com/container-registry/docs/container-analysis",
+  "Remediation": {
+    "Code": {
+      "CLI": "gcloud services enable containerscanning.googleapis.com",
+      "NativeIaC": "",
+      "Other": "",
+      "Terraform": "https://docs.bridgecrew.io/docs/ensure-gcp-gcr-container-vulnerability-scanning-is-enabled#terraform"
+    },
+    "Recommendation": {
+      "Text": "Enable vulnerability scanning for images stored in GCR using GCR Container Scanning or a third-party provider.",
+      "Url": "https://cloud.google.com/container-registry/docs/container-best-practices"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "By default, GCR Container Scanning is disabled."
+}
diff --git a/prowler/providers/gcp/services/gcr/gcr_container_scanning_enabled/gcr_container_scanning_enabled.py b/prowler/providers/gcp/services/gcr/gcr_container_scanning_enabled/gcr_container_scanning_enabled.py
new file mode 100644
index 00000000000..87097e512d9
--- /dev/null
+++ b/prowler/providers/gcp/services/gcr/gcr_container_scanning_enabled/gcr_container_scanning_enabled.py
@@ -0,0 +1,31 @@
+from prowler.lib.check.models import Check, Check_Report_GCP
+from prowler.providers.gcp.services.serviceusage.serviceusage_client import (
+    serviceusage_client,
+)
+
+
+class gcr_container_scanning_enabled(Check):
+    def execute(self) -> Check_Report_GCP:
+        findings = []
+        for project_id in serviceusage_client.project_ids:
+            report = Check_Report_GCP(self.metadata())
+            report.project_id = project_id
+            report.resource_id = "containerscanning.googleapis.com"
+            report.resource_name = "GCR Container Scanning"
+            report.location = serviceusage_client.region
+            report.status = "FAIL"
+            report.status_extended = (
+                f"GCR Container Scanning is not enabled in project {project_id}."
+            )
+            for active_service in serviceusage_client.active_services.get(
+                project_id, []
+            ):
+                if active_service.name == "containerscanning.googleapis.com":
+                    report.status = "PASS"
+                    report.status_extended = (
+                        f"GCR Container Scanning is enabled in project {project_id}."
+                    )
+                    break
+            findings.append(report)
+
+        return findings
diff --git a/prowler/providers/gcp/services/gke/__init__.py b/prowler/providers/gcp/services/gke/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/gcp/services/gke/gke_client.py b/prowler/providers/gcp/services/gke/gke_client.py
new file mode 100644
index 00000000000..7b165a2c76e
--- /dev/null
+++ b/prowler/providers/gcp/services/gke/gke_client.py
@@ -0,0 +1,4 @@
+from prowler.providers.gcp.lib.audit_info.audit_info import gcp_audit_info
+from prowler.providers.gcp.services.gke.gke_service import GKE
+
+gke_client = GKE(gcp_audit_info)
diff --git a/prowler/providers/gcp/services/gke/gke_cluster_no_default_service_account/__init__.py b/prowler/providers/gcp/services/gke/gke_cluster_no_default_service_account/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/gcp/services/gke/gke_cluster_no_default_service_account/gke_cluster_no_default_service_account.metadata.json b/prowler/providers/gcp/services/gke/gke_cluster_no_default_service_account/gke_cluster_no_default_service_account.metadata.json
new file mode 100644
index 00000000000..672f99e5b84
--- /dev/null
+++ b/prowler/providers/gcp/services/gke/gke_cluster_no_default_service_account/gke_cluster_no_default_service_account.metadata.json
@@ -0,0 +1,33 @@
+{
+  "Provider": "gcp",
+  "CheckID": "gke_cluster_no_default_service_account",
+  "CheckTitle": "Ensure GKE clusters are not running using the Compute Engine default service account",
+  "CheckType": [
+    "Security",
+    "Configuration"
+  ],
+  "ServiceName": "Google Kubernetes Engine (GKE)",
+  "SubServiceName": "",
+  "ResourceIdTemplate": "",
+  "Severity": "medium",
+  "ResourceType": "Service",
+  "Description": "Ensure GKE clusters are not running using the Compute Engine default service account. Create and use minimally privileged service accounts for GKE cluster nodes instead of using the Compute Engine default service account to minimize unnecessary permissions.",
+  "Risk": "Using the Compute Engine default service account for GKE cluster nodes may grant excessive permissions, increasing the risk of unauthorized access or compromise if a node is compromised.",
+  "RelatedUrl": "https://cloud.google.com/compute/docs/access/service-accounts#default_service_account",
+  "Remediation": {
+    "Code": {
+      "CLI": "gcloud container node-pools create [NODE_POOL] --service-account=[SA_NAME]@[PROJECT_ID].iam.gserviceaccount.com --cluster=[CLUSTER_NAME] --zone [COMPUTE_ZONE]",
+      "NativeIaC": "",
+      "Other": "",
+      "Terraform": "https://docs.bridgecrew.io/docs/ensure-gke-clusters-are-not-running-using-the-compute-engine-default-service-account#terraform"
+    },
+    "Recommendation": {
+      "Text": "Create and use minimally privileged service accounts for GKE cluster nodes instead of using the Compute Engine default service account.",
+      "Url": "https://cloud.google.com/compute/docs/access/service-accounts#default_service_account"
+    }
+  },
+  "Categories": [],
+  "DependsOn": [],
+  "RelatedTo": [],
+  "Notes": "By default, nodes use the Compute Engine default service account when you create a new cluster."
+}
diff --git a/prowler/providers/gcp/services/gke/gke_cluster_no_default_service_account/gke_cluster_no_default_service_account.py b/prowler/providers/gcp/services/gke/gke_cluster_no_default_service_account/gke_cluster_no_default_service_account.py
new file mode 100644
index 00000000000..e412d18129c
--- /dev/null
+++ b/prowler/providers/gcp/services/gke/gke_cluster_no_default_service_account/gke_cluster_no_default_service_account.py
@@ -0,0 +1,26 @@
+from prowler.lib.check.models import Check, Check_Report_GCP
+from prowler.providers.gcp.services.gke.gke_client import gke_client
+
+
+class gke_cluster_no_default_service_account(Check):
+    def execute(self) -> Check_Report_GCP:
+        findings = []
+        for cluster in gke_client.clusters.values():
+            report = Check_Report_GCP(self.metadata())
+            report.project_id = cluster.project_id
+            report.resource_id = cluster.id
+            report.resource_name = cluster.name
+            report.location = cluster.location
+            report.status = "PASS"
+            report.status_extended = f"GKE cluster {cluster.name} is not using the Compute Engine default service account."
+            if not cluster.node_pools and cluster.service_account == "default":
+                report.status = "FAIL"
+                report.status_extended = f"GKE cluster {cluster.name} is using the Compute Engine default service account."
+            for node_pool in cluster.node_pools:
+                if node_pool.service_account == "default":
+                    report.status = "FAIL"
+                    report.status_extended = f"GKE cluster {cluster.name} is using the Compute Engine default service account."
+                break
+            findings.append(report)
+
+        return findings
diff --git a/prowler/providers/gcp/services/gke/gke_service.py b/prowler/providers/gcp/services/gke/gke_service.py
new file mode 100644
index 00000000000..e657e3d6423
--- /dev/null
+++ b/prowler/providers/gcp/services/gke/gke_service.py
@@ -0,0 +1,90 @@
+from pydantic import BaseModel
+
+from prowler.lib.logger import logger
+from prowler.providers.gcp.lib.service.service import GCPService
+
+
+################## GKE
+class GKE(GCPService):
+    def __init__(self, audit_info):
+        super().__init__("container", audit_info, api_version="v1beta1")
+        self.locations = []
+        self.__get_locations__()
+        self.clusters = {}
+        self.__threading_call__(self.__get_clusters__, self.locations)
+
+    def __get_locations__(self):
+        for project_id in self.project_ids:
+            try:
+                request = (
+                    self.client.projects()
+                    .locations()
+                    .list(parent="projects/" + project_id)
+                )
+                response = request.execute()
+
+                for location in response["locations"]:
+                    self.locations.append(
+                        Location(name=location["name"], project_id=project_id)
+                    )
+
+            except Exception as error:
+                logger.error(
+                    f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+                )
+
+    def __get_clusters__(self, location):
+        try:
+            request = (
+                self.client.projects()
+                .locations()
+                .clusters()
+                .list(
+                    parent=f"projects/{location.project_id}/locations/{location.name}"
+                )
+            )
+            response = request.execute(http=self.__get_AuthorizedHttp_client__())
+            for cluster in response.get("clusters", []):
+                node_pools = []
+                for node_pool in cluster["nodePools"]:
+                    node_pools.append(
+                        NodePool(
+                            name=node_pool["name"],
+                            locations=node_pool["locations"],
+                            service_account=node_pool["config"]["serviceAccount"],
+                            project_id=location.project_id,
+                        )
+                    )
+                self.clusters[cluster["id"]] = Cluster(
+                    name=cluster["name"],
+                    id=cluster["id"],
+                    location=cluster["location"],
+                    service_account=cluster["nodeConfig"]["serviceAccount"],
+                    node_pools=node_pools,
+                    project_id=location.project_id,
+                )
+        except Exception as error:
+            logger.error(
+                f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
+            )
+
+
+class Location(BaseModel):
+    name: str
+    project_id: str
+
+
+class NodePool(BaseModel):
+    name: str
+    locations: list
+    service_account: str
+    project_id: str
+
+
+class Cluster(BaseModel):
+    name: str
+    id: str
+    location: str
+    service_account: str
+    node_pools: list[NodePool]
+    project_id: str
diff --git a/prowler/providers/gcp/services/iam/iam_cloud_asset_inventory_enabled/__init__.py b/prowler/providers/gcp/services/iam/iam_cloud_asset_inventory_enabled/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/prowler/providers/gcp/services/serviceusage/serviceusage_cloudasset_inventory_enabled/serviceusage_cloudasset_inventory_enabled.metadata.json b/prowler/providers/gcp/services/iam/iam_cloud_asset_inventory_enabled/iam_cloud_asset_inventory_enabled.metadata.json
similarity index 93%
rename from prowler/providers/gcp/services/serviceusage/serviceusage_cloudasset_inventory_enabled/serviceusage_cloudasset_inventory_enabled.metadata.json
rename to prowler/providers/gcp/services/iam/iam_cloud_asset_inventory_enabled/iam_cloud_asset_inventory_enabled.metadata.json
index 2eef41044ab..49441be9d7a 100644
--- a/prowler/providers/gcp/services/serviceusage/serviceusage_cloudasset_inventory_enabled/serviceusage_cloudasset_inventory_enabled.metadata.json
+++ b/prowler/providers/gcp/services/iam/iam_cloud_asset_inventory_enabled/iam_cloud_asset_inventory_enabled.metadata.json
@@ -1,10 +1,10 @@
 {
   "Provider": "gcp",
-  "CheckID": "serviceusage_cloudasset_inventory_enabled",
+  "CheckID": "iam_cloud_asset_inventory_enabled",
   "CheckTitle": "Ensure Cloud Asset Inventory Is Enabled",
   "CheckType": [],
-  "ServiceName": "serviceusage",
-  "SubServiceName": "",
+  "ServiceName": "iam",
+  "SubServiceName": "Asset Inventory",
   "ResourceIdTemplate": "",
   "Severity": "high",
   "ResourceType": "Service",
diff --git a/prowler/providers/gcp/services/serviceusage/serviceusage_cloudasset_inventory_enabled/serviceusage_cloudasset_inventory_enabled.py b/prowler/providers/gcp/services/iam/iam_cloud_asset_inventory_enabled/iam_cloud_asset_inventory_enabled.py
similarity index 95%
rename from prowler/providers/gcp/services/serviceusage/serviceusage_cloudasset_inventory_enabled/serviceusage_cloudasset_inventory_enabled.py
rename to prowler/providers/gcp/services/iam/iam_cloud_asset_inventory_enabled/iam_cloud_asset_inventory_enabled.py
index 94eaab274c5..8803f7cfa92 100644
--- a/prowler/providers/gcp/services/serviceusage/serviceusage_cloudasset_inventory_enabled/serviceusage_cloudasset_inventory_enabled.py
+++ b/prowler/providers/gcp/services/iam/iam_cloud_asset_inventory_enabled/iam_cloud_asset_inventory_enabled.py
@@ -4,7 +4,7 @@
 )
 
 
-class serviceusage_cloudasset_inventory_enabled(Check):
+class iam_cloud_asset_inventory_enabled(Check):
     def execute(self) -> Check_Report_GCP:
         findings = []
         for project_id in serviceusage_client.project_ids:
diff --git a/prowler/providers/kubernetes/services/core/core_service.py b/prowler/providers/kubernetes/services/core/core_service.py
index 60a9a6f36de..b968cfdf165 100644
--- a/prowler/providers/kubernetes/services/core/core_service.py
+++ b/prowler/providers/kubernetes/services/core/core_service.py
@@ -39,24 +39,29 @@ def __get_pods__(self):
                         if pod.spec.ephemeral_containers
                         else []
                     )
-    
-                    for container in containers + init_containers + ephemeral_containers:
+                    for container in (
+                        containers + init_containers + ephemeral_containers
+                    ):
                         pod_containers[container.name] = Container(
                             name=container.name,
                             image=container.image,
                             command=container.command if container.command else None,
-                            ports=[
-                                {"containerPort": port.container_port}
-                                for port in container.ports
-                            ]
-                            if container.ports
-                            else None,
-                            env=[
-                                {"name": env.name, "value": env.value}
-                                for env in container.env
-                            ]
-                            if container.env
-                            else None,
+                            ports=(
+                                [
+                                    {"containerPort": port.container_port}
+                                    for port in container.ports
+                                ]
+                                if container.ports
+                                else None
+                            ),
+                            env=(
+                                [
+                                    {"name": env.name, "value": env.value}
+                                    for env in container.env
+                                ]
+                                if container.env
+                                else None
+                            ),
                             security_context=container.security_context,
                         )
                     self.pods[pod.metadata.uid] = Pod(
@@ -105,15 +110,19 @@ def __list_nodes__(self):
                 node_model = Node(
                     name=node.metadata.name,
                     uid=node.metadata.uid,
-                    namespace=node.metadata.namespace
-                    if node.metadata.namespace
-                    else "cluster-wide",
+                    namespace=(
+                        node.metadata.namespace
+                        if node.metadata.namespace
+                        else "cluster-wide"
+                    ),
                     labels=node.metadata.labels,
                     annotations=node.metadata.annotations,
                     unschedulable=node.spec.unschedulable,
-                    node_info=node.status.node_info.to_dict()
-                    if node.status.node_info
-                    else None,
+                    node_info=(
+                        node.status.node_info.to_dict()
+                        if node.status.node_info
+                        else None
+                    ),
                 )
                 self.nodes[node.metadata.uid] = node_model
         except Exception as error:
diff --git a/prowler/providers/kubernetes/services/rbac/rbac_service.py b/prowler/providers/kubernetes/services/rbac/rbac_service.py
index b2f0863c00c..fc552b53b74 100644
--- a/prowler/providers/kubernetes/services/rbac/rbac_service.py
+++ b/prowler/providers/kubernetes/services/rbac/rbac_service.py
@@ -25,17 +25,19 @@ def __list_cluster_role_bindings__(self):
                 # For each binding, create a ClusterRoleBinding object and append it to the list
                 formatted_binding = {
                     "metadata": binding.metadata,
-                    "subjects": []
-                    if not binding.subjects
-                    else [
-                        {
-                            "kind": subject.kind,
-                            "name": subject.name,
-                            "namespace": getattr(subject, "namespace", ""),
-                            "metadata": getattr(subject, "metadata", None),
-                        }
-                        for subject in binding.subjects
-                    ],
+                    "subjects": (
+                        []
+                        if not binding.subjects
+                        else [
+                            {
+                                "kind": subject.kind,
+                                "name": subject.name,
+                                "namespace": getattr(subject, "namespace", ""),
+                                "metadata": getattr(subject, "metadata", None),
+                            }
+                            for subject in binding.subjects
+                        ]
+                    ),
                     "roleRef": {
                         "kind": binding.role_ref.kind,
                         "name": binding.role_ref.name,
diff --git a/pyproject.toml b/pyproject.toml
index e1509e9c630..ae2339a6e16 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -13,66 +13,82 @@ classifiers = [
 description = "Prowler is an Open Source security tool to perform AWS, GCP and Azure security best practices assessments, audits, incident response, continuous monitoring, hardening and forensics readiness. It contains hundreds of controls covering CIS, NIST 800, NIST CSF, CISA, RBI, FedRAMP, PCI-DSS, GDPR, HIPAA, FFIEC, SOC2, GXP, AWS Well-Architected Framework Security Pillar, AWS Foundational Technical Review (FTR), ENS (Spanish National Security Scheme) and your custom security frameworks."
 license = "Apache-2.0"
 maintainers = [
-  "Sergio Garcia ",
-  "Nacho Rivera ",
-  "Pepe Fagoaga "
+  "Sergio Garcia ",
+  "Nacho Rivera ",
+  "Pepe Fagoaga "
 ]
 name = "prowler"
 packages = [
   {include = "prowler"}
 ]
 readme = "README.md"
-version = "3.11.3"
+version = "3.14.0"
 
 [tool.poetry.dependencies]
 alive-progress = "3.1.5"
 awsipranges = "0.3.3"
 azure-identity = "1.15.0"
+azure-keyvault-keys = "4.9.0"
+azure-mgmt-applicationinsights = "4.0.0"
 azure-mgmt-authorization = "4.0.0"
-azure-mgmt-security = "5.0.0"
+azure-mgmt-compute = "30.5.0"
+azure-mgmt-cosmosdb = "9.4.0"
+azure-mgmt-keyvault = "10.3.0"
+azure-mgmt-monitor = "6.0.2"
+azure-mgmt-network = "25.3.0"
+azure-mgmt-rdbms = "10.1.0"
+azure-mgmt-resource = "23.0.1"
+azure-mgmt-security = "6.0.0"
 azure-mgmt-sql = "3.0.1"
 azure-mgmt-storage = "21.1.0"
 azure-mgmt-subscription = "3.1.1"
+azure-mgmt-web = "7.2.0"
 azure-storage-blob = "12.19.0"
 boto3 = "1.26.165"
 botocore = "1.29.165"
 colorama = "0.4.6"
 detect-secrets = "1.4.0"
-google-api-python-client = "2.108.0"
-google-auth-httplib2 = "^0.1.0"
-jsonschema = "4.18.0"
-kubernetes = "^28.1.0"
-mkdocs = {version = "1.5.3", optional = true}
-mkdocs-material = {version = "9.4.10", optional = true}
-msgraph-core = "0.2.2"
-msrestazure = "^0.6.4"
-pydantic = "1.10.13"
-python = ">=3.9,<3.12"
+google-api-python-client = "2.118.0"
+google-auth-httplib2 = ">=0.1,<0.3"
+jsonschema = "4.21.1"
+kubernetes = "28.1.0"
+msgraph-sdk = "1.0.0"
+msrestazure = "0.6.4"
+pydantic = "1.10.14"
+python = ">=3.9,<3.13"
 schema = "0.7.5"
-shodan = "1.30.1"
-slack-sdk = "3.24.0"
+shodan = "1.31.0"
+slack-sdk = "3.27.0"
 tabulate = "0.9.0"
 
-[tool.poetry.extras]
-docs = ["mkdocs", "mkdocs-material"]
-
 [tool.poetry.group.dev.dependencies]
-bandit = "1.7.5"
-black = "22.12.0"
-coverage = "7.3.2"
-docker = "6.1.3"
-flake8 = "6.1.0"
-freezegun = "1.2.2"
+bandit = "1.7.7"
+black = "24.2.0"
+coverage = "7.4.3"
+docker = "7.0.0"
+flake8 = "7.0.0"
+freezegun = "1.4.0"
 mock = "5.1.0"
-moto = {extras = ["all"], version = "4.2.9"}
+moto = {extras = ["all"], version = "5.0.2"}
+openapi-schema-validator = "0.6.2"
 openapi-spec-validator = "0.7.1"
-pylint = "3.0.2"
-pytest = "7.4.3"
+pylint = "3.1.0"
+pytest = "8.0.2"
 pytest-cov = "4.1.0"
+pytest-env = "1.1.3"
 pytest-randomly = "3.15.0"
-pytest-xdist = "3.4.0"
-safety = "2.3.5"
-vulture = "2.10"
+pytest-xdist = "3.5.0"
+safety = "3.0.1"
+vulture = "2.11"
+
+[tool.poetry.group.docs]
+optional = true
+
+[tool.poetry.group.docs.dependencies]
+mkdocs = "1.5.3"
+mkdocs-git-revision-date-localized-plugin = "1.2.4"
+mkdocs-material = "9.5.11"
+mkdocs-material-extensions = "1.3.1"
 
 [tool.poetry.scripts]
 prowler = "prowler.__main__:prowler"
@@ -94,3 +110,11 @@ search = 'prowler_version = "{current_version}"'
 pythonpath = [
   "."
 ]
+
+[tool.pytest_env]
+# For Moto and Boto3 while testing AWS
+AWS_ACCESS_KEY_ID = 'testing'
+AWS_DEFAULT_REGION = 'us-east-1'
+AWS_SECRET_ACCESS_KEY = 'testing'
+AWS_SECURITY_TOKEN = 'testing'
+AWS_SESSION_TOKEN = 'testing'
diff --git a/tests/config/config_test.py b/tests/config/config_test.py
index 570b4800a33..e7ca8138f28 100644
--- a/tests/config/config_test.py
+++ b/tests/config/config_test.py
@@ -51,6 +51,8 @@ def mock_prowler_get_latest_release(_, **kwargs):
     "organizations_trusted_delegated_administrators": [],
 }
 
+config_azure = {"shodan_api_key": None}
+
 
 class Test_Config:
     def test_get_aws_available_regions(self):
@@ -191,7 +193,7 @@ def test_load_and_validate_config_file_azure(self):
         config_test_file = f"{path}/fixtures/config.yaml"
         provider = "azure"
 
-        assert load_and_validate_config_file(provider, config_test_file) is None
+        assert load_and_validate_config_file(provider, config_test_file) == config_azure
 
     def test_load_and_validate_config_file_old_format(self):
         path = pathlib.Path(os.path.dirname(os.path.realpath(__file__)))
diff --git a/tests/config/fixtures/config.yaml b/tests/config/fixtures/config.yaml
index d55503e962f..1e77a280353 100644
--- a/tests/config/fixtures/config.yaml
+++ b/tests/config/fixtures/config.yaml
@@ -56,6 +56,9 @@ aws:
 
 # Azure Configuration
 azure:
+  # Azure Network Configuration
+  # azure.network_public_ip_shodan
+  shodan_api_key: null
 
 # GCP Configuration
 gcp:
diff --git a/tests/lib/check/check_loader_test.py b/tests/lib/check/check_loader_test.py
new file mode 100644
index 00000000000..5b887d3b95a
--- /dev/null
+++ b/tests/lib/check/check_loader_test.py
@@ -0,0 +1,326 @@
+from mock import patch
+
+from prowler.lib.check.checks_loader import (
+    load_checks_to_execute,
+    update_checks_to_execute_with_aliases,
+)
+from prowler.lib.check.models import (
+    Check_Metadata_Model,
+    Code,
+    Recommendation,
+    Remediation,
+)
+
+S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME = "s3_bucket_level_public_access_block"
+S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME_CUSTOM_ALIAS = (
+    "s3_bucket_level_public_access_block"
+)
+S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_SEVERITY = "medium"
+S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME_SERVICE = "s3"
+
+
+class TestCheckLoader:
+    provider = "aws"
+
+    def get_custom_check_metadata(self):
+        return Check_Metadata_Model(
+            Provider="aws",
+            CheckID=S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME,
+            CheckTitle="Check S3 Bucket Level Public Access Block.",
+            CheckType=["Data Protection"],
+            CheckAliases=[S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME_CUSTOM_ALIAS],
+            ServiceName=S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME_SERVICE,
+            SubServiceName="",
+            ResourceIdTemplate="arn:partition:s3:::bucket_name",
+            Severity=S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_SEVERITY,
+            ResourceType="AwsS3Bucket",
+            Description="Check S3 Bucket Level Public Access Block.",
+            Risk="Public access policies may be applied to sensitive data buckets.",
+            RelatedUrl="https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html",
+            Remediation=Remediation(
+                Code=Code(
+                    NativeIaC="",
+                    Terraform="https://docs.bridgecrew.io/docs/bc_aws_s3_20#terraform",
+                    CLI="aws s3api put-public-access-block --region  --public-access-block-configuration BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true --bucket ",
+                    Other="https://github.com/cloudmatos/matos/tree/master/remediations/aws/s3/s3/block-public-access",
+                ),
+                Recommendation=Recommendation(
+                    Text="You can enable Public Access Block at the bucket level to prevent the exposure of your data stored in S3.",
+                    Url="https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html",
+                ),
+            ),
+            Categories=["internet-exposed"],
+            DependsOn=[],
+            RelatedTo=[],
+            Notes="",
+            Compliance=[],
+        )
+
+    def test_load_checks_to_execute(self):
+        bulk_checks_metatada = {
+            S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME: self.get_custom_check_metadata()
+        }
+        bulk_compliance_frameworks = None
+        checks_file = None
+        check_list = None
+        service_list = None
+        severities = None
+        compliance_frameworks = None
+        categories = None
+
+        with patch(
+            "prowler.lib.check.checks_loader.recover_checks_from_provider",
+            return_value=[
+                (
+                    f"{S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME}",
+                    "path/to/{S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME}",
+                )
+            ],
+        ):
+            assert {S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME} == load_checks_to_execute(
+                bulk_checks_metatada,
+                bulk_compliance_frameworks,
+                checks_file,
+                check_list,
+                service_list,
+                severities,
+                compliance_frameworks,
+                categories,
+                self.provider,
+            )
+
+    def test_load_checks_to_execute_with_check_list(self):
+        bulk_checks_metatada = {
+            S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME: self.get_custom_check_metadata()
+        }
+        bulk_compliance_frameworks = None
+        checks_file = None
+        check_list = [S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME]
+        service_list = None
+        severities = None
+        compliance_frameworks = None
+        categories = None
+
+        assert {S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME} == load_checks_to_execute(
+            bulk_checks_metatada,
+            bulk_compliance_frameworks,
+            checks_file,
+            check_list,
+            service_list,
+            severities,
+            compliance_frameworks,
+            categories,
+            self.provider,
+        )
+
+    def test_load_checks_to_execute_with_severities(self):
+        bulk_checks_metatada = {
+            S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME: self.get_custom_check_metadata()
+        }
+        bulk_compliance_frameworks = None
+        checks_file = None
+        check_list = []
+        service_list = None
+        severities = [S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_SEVERITY]
+        compliance_frameworks = None
+        categories = None
+
+        assert {S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME} == load_checks_to_execute(
+            bulk_checks_metatada,
+            bulk_compliance_frameworks,
+            checks_file,
+            check_list,
+            service_list,
+            severities,
+            compliance_frameworks,
+            categories,
+            self.provider,
+        )
+
+    def test_load_checks_to_execute_with_severities_and_services(self):
+        bulk_checks_metatada = {
+            S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME: self.get_custom_check_metadata()
+        }
+        bulk_compliance_frameworks = None
+        checks_file = None
+        check_list = []
+        service_list = [S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME_SERVICE]
+        severities = [S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_SEVERITY]
+        compliance_frameworks = None
+        categories = None
+
+        with patch(
+            "prowler.lib.check.checks_loader.recover_checks_from_service",
+            return_value={S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME},
+        ):
+            assert {S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME} == load_checks_to_execute(
+                bulk_checks_metatada,
+                bulk_compliance_frameworks,
+                checks_file,
+                check_list,
+                service_list,
+                severities,
+                compliance_frameworks,
+                categories,
+                self.provider,
+            )
+
+    def test_load_checks_to_execute_with_severities_and_services_not_within_severity(
+        self,
+    ):
+        bulk_checks_metatada = {
+            S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME: self.get_custom_check_metadata()
+        }
+        bulk_compliance_frameworks = None
+        checks_file = None
+        check_list = []
+        service_list = ["ec2"]
+        severities = [S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_SEVERITY]
+        compliance_frameworks = None
+        categories = None
+
+        with patch(
+            "prowler.lib.check.checks_loader.recover_checks_from_service",
+            return_value={"ec2_ami_public"},
+        ):
+            assert set() == load_checks_to_execute(
+                bulk_checks_metatada,
+                bulk_compliance_frameworks,
+                checks_file,
+                check_list,
+                service_list,
+                severities,
+                compliance_frameworks,
+                categories,
+                self.provider,
+            )
+
+    def test_load_checks_to_execute_with_checks_file(
+        self,
+    ):
+        bulk_checks_metatada = {
+            S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME: self.get_custom_check_metadata()
+        }
+        bulk_compliance_frameworks = None
+        checks_file = "path/to/test_file"
+        check_list = []
+        service_list = []
+        severities = []
+        compliance_frameworks = None
+        categories = None
+
+        with patch(
+            "prowler.lib.check.checks_loader.parse_checks_from_file",
+            return_value={S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME},
+        ):
+            assert {S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME} == load_checks_to_execute(
+                bulk_checks_metatada,
+                bulk_compliance_frameworks,
+                checks_file,
+                check_list,
+                service_list,
+                severities,
+                compliance_frameworks,
+                categories,
+                self.provider,
+            )
+
+    def test_load_checks_to_execute_with_service_list(
+        self,
+    ):
+        bulk_checks_metatada = {
+            S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME: self.get_custom_check_metadata()
+        }
+        bulk_compliance_frameworks = None
+        checks_file = None
+        check_list = []
+        service_list = [S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME_SERVICE]
+        severities = []
+        compliance_frameworks = None
+        categories = None
+
+        with patch(
+            "prowler.lib.check.checks_loader.recover_checks_from_service",
+            return_value={S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME},
+        ):
+            assert {S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME} == load_checks_to_execute(
+                bulk_checks_metatada,
+                bulk_compliance_frameworks,
+                checks_file,
+                check_list,
+                service_list,
+                severities,
+                compliance_frameworks,
+                categories,
+                self.provider,
+            )
+
+    def test_load_checks_to_execute_with_compliance_frameworks(
+        self,
+    ):
+        bulk_checks_metatada = {
+            S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME: self.get_custom_check_metadata()
+        }
+        bulk_compliance_frameworks = None
+        checks_file = None
+        check_list = []
+        service_list = []
+        severities = []
+        compliance_frameworks = ["test-compliance-framework"]
+        categories = None
+
+        with patch(
+            "prowler.lib.check.checks_loader.parse_checks_from_compliance_framework",
+            return_value={S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME},
+        ):
+            assert {S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME} == load_checks_to_execute(
+                bulk_checks_metatada,
+                bulk_compliance_frameworks,
+                checks_file,
+                check_list,
+                service_list,
+                severities,
+                compliance_frameworks,
+                categories,
+                self.provider,
+            )
+
+    def test_load_checks_to_execute_with_categories(
+        self,
+    ):
+        bulk_checks_metatada = {
+            S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME: self.get_custom_check_metadata()
+        }
+        bulk_compliance_frameworks = None
+        checks_file = None
+        check_list = []
+        service_list = []
+        severities = []
+        compliance_frameworks = []
+        categories = {"internet-exposed"}
+
+        assert {S3_BUCKET_LEVEL_PUBLIC_ACCESS_BLOCK_NAME} == load_checks_to_execute(
+            bulk_checks_metatada,
+            bulk_compliance_frameworks,
+            checks_file,
+            check_list,
+            service_list,
+            severities,
+            compliance_frameworks,
+            categories,
+            self.provider,
+        )
+
+    def test_update_checks_to_execute_with_aliases(self):
+        checks_to_execute = {"renamed_check"}
+        check_aliases = {"renamed_check": ["check_name"]}
+        assert {"check_name"} == update_checks_to_execute_with_aliases(
+            checks_to_execute, check_aliases
+        )
+
+    def test_update_checks_to_execute_with_multiple_aliases(self):
+        checks_to_execute = {"renamed_check"}
+        check_aliases = {"renamed_check": ["check1_name", "check2_name"]}
+        assert {"check1_name", "check2_name"} == update_checks_to_execute_with_aliases(
+            checks_to_execute, check_aliases
+        )
diff --git a/tests/lib/check/check_test.py b/tests/lib/check/check_test.py
index 02d3b1b3a1c..8ccc6d13046 100644
--- a/tests/lib/check/check_test.py
+++ b/tests/lib/check/check_test.py
@@ -3,10 +3,10 @@
 from importlib.machinery import FileFinder
 from pkgutil import ModuleInfo
 
-from boto3 import client, session
+from boto3 import client
 from fixtures.bulk_checks_metadata import test_bulk_checks_metadata
 from mock import patch
-from moto import mock_s3
+from moto import mock_aws
 
 from prowler.lib.check.check import (
     exclude_checks_to_run,
@@ -27,8 +27,7 @@
     get_checks_from_input_arn,
     get_regions_from_audit_resources,
 )
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import set_mocked_aws_audit_info
 
 AWS_ACCOUNT_NUMBER = "123456789012"
 AWS_REGION = "us-east-1"
@@ -41,6 +40,27 @@
         name="prowler.providers.azure.services.storage.storage_ensure_minimum_tls_version_12.storage_ensure_minimum_tls_version_12",
         ispkg=False,
     ),
+    ModuleInfo(
+        module_finder=FileFinder(
+            "/root_dir/prowler/providers/azure/services/storage/storage_key_rotation_90_days"
+        ),
+        name="prowler.providers.azure.services.storage.storage_key_rotation_90_days.storage_key_rotation_90_days",
+        ispkg=False,
+    ),
+    ModuleInfo(
+        module_finder=FileFinder(
+            "/root_dir/prowler/providers/azure/services/storage/storage_ensure_private_endpoints_in_storage_accounts"
+        ),
+        name="prowler.providers.azure.services.storage.storage_ensure_private_endpoints_in_storage_accounts.storage_ensure_private_endpoints_in_storage_accounts",
+        ispkg=False,
+    ),
+    ModuleInfo(
+        module_finder=FileFinder(
+            "/root_dir/prowler/providers/azure/services/storage/storage_ensure_soft_delete_is_enabled"
+        ),
+        name="prowler.providers.azure.services.storage.storage_ensure_soft_delete_is_enabled.storage_ensure_soft_delete_is_enabled",
+        ispkg=False,
+    ),
     ModuleInfo(
         module_finder=FileFinder("/root_dir/prowler/providers/azure/services/storage"),
         name="prowler.providers.azure.services.storage.storage_ensure_encryption_with_customer_managed_keys",
@@ -53,6 +73,118 @@
         name="prowler.providers.azure.services.storage.storage_ensure_encryption_with_customer_managed_keys.storage_ensure_encryption_with_customer_managed_keys",
         ispkg=False,
     ),
+    ModuleInfo(
+        module_finder=FileFinder(
+            "/root_dir/prowler/providers/azure/services/sqlserver"
+        ),
+        name="prowler.providers.azure.services.sqlserver.sqlserver_tde_encrypted_with_cmk",
+        ispkg=True,
+    ),
+    ModuleInfo(
+        module_finder=FileFinder(
+            "/root_dir/prowler/providers/azure/services/sqlserver/sqlserver_tde_encrypted_with_cmk"
+        ),
+        name="prowler.providers.azure.services.sqlserver.sqlserver_tde_encrypted_with_cmk.sqlserver_tde_encrypted_with_cmk",
+        ispkg=False,
+    ),
+    ModuleInfo(
+        module_finder=FileFinder(
+            "/root_dir/prowler/providers/azure/services/sqlserver"
+        ),
+        name="prowler.providers.azure.services.sqlserver.sqlserver_tde_encryption_enabled",
+        ispkg=True,
+    ),
+    ModuleInfo(
+        module_finder=FileFinder(
+            "/root_dir/prowler/providers/azure/services/sqlserver/sqlserver_tde_encryption_enabled"
+        ),
+        name="prowler.providers.azure.services.sqlserver.sqlserver_tde_encryption_enabled.sqlserver_tde_encryption_enabled",
+        ispkg=False,
+    ),
+    ModuleInfo(
+        module_finder=FileFinder(
+            "/root_dir/prowler/providers/azure/services/sqlserver"
+        ),
+        name="prowler.providers.azure.services.sqlserver.sqlserver_auditing_retention_90_days",
+        ispkg=True,
+    ),
+    ModuleInfo(
+        module_finder=FileFinder(
+            "/root_dir/prowler/providers/azure/services/sqlserver/sqlserver_auditing_retention_90_days"
+        ),
+        name="prowler.providers.azure.services.sqlserver.sqlserver_auditing_retention_90_days.sqlserver_auditing_retention_90_days",
+        ispkg=False,
+    ),
+    ModuleInfo(
+        module_finder=FileFinder(
+            "/root_dir/prowler/providers/azure/services/sqlserver"
+        ),
+        name="prowler.providers.azure.services.sqlserver.sqlserver_vulnerability_assessment_enabled",
+        ispkg=True,
+    ),
+    ModuleInfo(
+        module_finder=FileFinder(
+            "/root_dir/prowler/providers/azure/services/sqlserver/sqlserver_vulnerability_assessment_enabled"
+        ),
+        name="prowler.providers.azure.services.sqlserver.sqlserver_vulnerability_assessment_enabled.sqlserver_vulnerability_assessment_enabled",
+        ispkg=False,
+    ),
+    ModuleInfo(
+        module_finder=FileFinder(
+            "/root_dir/prowler/providers/azure/services/sqlserver"
+        ),
+        name="prowler.providers.azure.services.sqlserver.sqlserver_va_periodic_recurring_scans_enabled",
+        ispkg=True,
+    ),
+    ModuleInfo(
+        module_finder=FileFinder(
+            "/root_dir/prowler/providers/azure/services/sqlserver/sqlserver_va_periodic_recurring_scans_enabled"
+        ),
+        name="prowler.providers.azure.services.sqlserver.sqlserver_va_periodic_recurring_scans_enabled.sqlserver_va_periodic_recurring_scans_enabled",
+        ispkg=False,
+    ),
+    ModuleInfo(
+        module_finder=FileFinder(
+            "/root_dir/prowler/providers/azure/services/sqlserver"
+        ),
+        name="prowler.providers.azure.services.sqlserver.sqlserver_va_scan_reports_configured",
+        ispkg=True,
+    ),
+    ModuleInfo(
+        module_finder=FileFinder(
+            "/root_dir/prowler/providers/azure/services/sqlserver/sqlserver_va_scan_reports_configured"
+        ),
+        name="prowler.providers.azure.services.sqlserver.sqlserver_va_scan_reports_configured.sqlserver_va_scan_reports_configured",
+        ispkg=False,
+    ),
+    ModuleInfo(
+        module_finder=FileFinder(
+            "/root_dir/prowler/providers/azure/services/sqlserver"
+        ),
+        name="prowler.providers.azure.services.sqlserver.sqlserver_va_emails_notifications_admins_enabled",
+        ispkg=True,
+    ),
+    ModuleInfo(
+        module_finder=FileFinder(
+            "/root_dir/prowler/providers/azure/services/sqlserver/sqlserver_va_emails_notifications_admins_enabled"
+        ),
+        name="prowler.providers.azure.services.sqlserver.sqlserver_va_emails_notifications_admins_enabled.sqlserver_va_emails_notifications_admins_enabled",
+        ispkg=False,
+    ),
+    ModuleInfo(
+        module_finder=FileFinder(
+            "/root_dir/prowler/providers/azure/services/postgresql"
+        ),
+        name="prowler.providers.azure.services.postgresql.postgresql_flexible_server_enforce_ssl_enabled",
+        ispkg=True,
+    ),
+    ModuleInfo(
+        module_finder=FileFinder(
+            "/root_dir/prowler/providers/azure/services/postgresql/postgresql_flexible_server_enforce_ssl_enabled"
+        ),
+        name="prowler.providers.azure.services.postgresql.postgresql_flexible_server_enforce_ssl_enabled.postgresql_flexible_server_enforce_ssl_enabled",
+        ispkg=False,
+    ),
 ]
 
 
@@ -69,6 +201,27 @@ def mock_list_modules(*_):
             name="prowler.providers.azure.services.storage.storage_ensure_minimum_tls_version_12.storage_ensure_minimum_tls_version_12",
             ispkg=False,
         ),
+        ModuleInfo(
+            module_finder=FileFinder(
+                "/root_dir/prowler/providers/azure/services/storage/storage_key_rotation_90_days"
+            ),
+            name="prowler.providers.azure.services.storage.storage_key_rotation_90_days.storage_key_rotation_90_days",
+            ispkg=False,
+        ),
+        ModuleInfo(
+            module_finder=FileFinder(
+                "/root_dir/prowler/providers/azure/services/storage/storage_ensure_private_endpoints_in_storage_accounts"
+            ),
+            name="prowler.providers.azure.services.storage.storage_ensure_private_endpoints_in_storage_accounts.storage_ensure_private_endpoints_in_storage_accounts",
+            ispkg=False,
+        ),
+        ModuleInfo(
+            module_finder=FileFinder(
+                "/root_dir/prowler/providers/azure/services/storage/storage_ensure_soft_delete_is_enabled"
+            ),
+            name="prowler.providers.azure.services.storage.storage_ensure_soft_delete_is_enabled.storage_ensure_soft_delete_is_enabled",
+            ispkg=False,
+        ),
         ModuleInfo(
             module_finder=FileFinder(
                 "/root_dir/prowler/providers/azure/services/storage"
@@ -83,6 +236,118 @@ def mock_list_modules(*_):
             name="prowler.providers.azure.services.storage.storage_ensure_encryption_with_customer_managed_keys.storage_ensure_encryption_with_customer_managed_keys",
             ispkg=False,
         ),
+        ModuleInfo(
+            module_finder=FileFinder(
+                "/root_dir/prowler/providers/azure/services/sqlserver"
+            ),
+            name="prowler.providers.azure.services.sqlserver.sqlserver_tde_encrypted_with_cmk",
+            ispkg=True,
+        ),
+        ModuleInfo(
+            module_finder=FileFinder(
+                "/root_dir/prowler/providers/azure/services/sqlserver/sqlserver_tde_encrypted_with_cmk"
+            ),
+            name="prowler.providers.azure.services.sqlserver.sqlserver_tde_encrypted_with_cmk.sqlserver_tde_encrypted_with_cmk",
+            ispkg=False,
+        ),
+        ModuleInfo(
+            module_finder=FileFinder(
+                "/root_dir/prowler/providers/azure/services/sqlserver"
+            ),
+            name="prowler.providers.azure.services.sqlserver.sqlserver_tde_encryption_enabled",
+            ispkg=True,
+        ),
+        ModuleInfo(
+            module_finder=FileFinder(
+                "/root_dir/prowler/providers/azure/services/sqlserver/sqlserver_tde_encryption_enabled"
+            ),
+            name="prowler.providers.azure.services.sqlserver.sqlserver_tde_encryption_enabled.sqlserver_tde_encryption_enabled",
+            ispkg=False,
+        ),
+        ModuleInfo(
+            module_finder=FileFinder(
+                "/root_dir/prowler/providers/azure/services/sqlserver"
+            ),
+            name="prowler.providers.azure.services.sqlserver.sqlserver_auditing_retention_90_days",
+            ispkg=True,
+        ),
+        ModuleInfo(
+            module_finder=FileFinder(
+                "/root_dir/prowler/providers/azure/services/sqlserver/sqlserver_auditing_retention_90_days"
+            ),
+            name="prowler.providers.azure.services.sqlserver.sqlserver_auditing_retention_90_days.sqlserver_auditing_retention_90_days",
+            ispkg=False,
+        ),
+        ModuleInfo(
+            module_finder=FileFinder(
+                "/root_dir/prowler/providers/azure/services/sqlserver"
+            ),
+            name="prowler.providers.azure.services.sqlserver.sqlserver_vulnerability_assessment_enabled",
+            ispkg=True,
+        ),
+        ModuleInfo(
+            module_finder=FileFinder(
+                "/root_dir/prowler/providers/azure/services/sqlserver/sqlserver_vulnerability_assessment_enabled"
+            ),
+            name="prowler.providers.azure.services.sqlserver.sqlserver_vulnerability_assessment_enabled.sqlserver_vulnerability_assessment_enabled",
+            ispkg=False,
+        ),
+        ModuleInfo(
+            module_finder=FileFinder(
+                "/root_dir/prowler/providers/azure/services/sqlserver"
+            ),
+            name="prowler.providers.azure.services.sqlserver.sqlserver_va_periodic_recurring_scans_enabled",
+            ispkg=True,
+        ),
+        ModuleInfo(
+            module_finder=FileFinder(
+                "/root_dir/prowler/providers/azure/services/sqlserver/sqlserver_va_periodic_recurring_scans_enabled"
+            ),
+            name="prowler.providers.azure.services.sqlserver.sqlserver_va_periodic_recurring_scans_enabled.sqlserver_va_periodic_recurring_scans_enabled",
+            ispkg=False,
+        ),
+        ModuleInfo(
+            module_finder=FileFinder(
+                "/root_dir/prowler/providers/azure/services/sqlserver"
+            ),
+            name="prowler.providers.azure.services.sqlserver.sqlserver_va_scan_reports_configured",
+            ispkg=True,
+        ),
+        ModuleInfo(
+            module_finder=FileFinder(
+                "/root_dir/prowler/providers/azure/services/sqlserver/sqlserver_va_scan_reports_configured"
+            ),
+            name="prowler.providers.azure.services.sqlserver.sqlserver_va_scan_reports_configured.sqlserver_va_scan_reports_configured",
+            ispkg=False,
+        ),
+        ModuleInfo(
+            module_finder=FileFinder(
+                "/root_dir/prowler/providers/azure/services/sqlserver"
+            ),
+            name="prowler.providers.azure.services.sqlserver.sqlserver_va_emails_notifications_admins_enabled",
+            ispkg=True,
+        ),
+        ModuleInfo(
+            module_finder=FileFinder(
+                "/root_dir/prowler/providers/azure/services/sqlserver/sqlserver_va_emails_notifications_admins_enabled"
+            ),
+            name="prowler.providers.azure.services.sqlserver.sqlserver_va_emails_notifications_admins_enabled.sqlserver_va_emails_notifications_admins_enabled",
+            ispkg=False,
+        ),
+        ModuleInfo(
+            module_finder=FileFinder(
+                "/root_dir/prowler/providers/azure/services/postgresql"
+            ),
+            name="prowler.providers.azure.services.postgresql.postgresql_flexible_server_enforce_ssl_enabled",
+            ispkg=True,
+        ),
+        ModuleInfo(
+            module_finder=FileFinder(
+                "/root_dir/prowler/providers/azure/services/postgresql/postgresql_flexible_server_enforce_ssl_enabled"
+            ),
+            name="prowler.providers.azure.services.postgresql.postgresql_flexible_server_enforce_ssl_enabled.postgresql_flexible_server_enforce_ssl_enabled",
+            ispkg=False,
+        ),
     ]
     return modules
 
@@ -97,6 +362,10 @@ def mock_recover_checks_from_azure_provider(*_):
             "iam_subscription_roles_owner_custom_not_created",
             "/root_dir/fake_path/iam/iam_subscription_roles_owner_custom_not_created",
         ),
+        (
+            "iam_custom_role_has_permissions_to_administer_resource_locks",
+            "/root_dir/fake_path/iam/iam_custom_role_has_permissions_to_administer_resource_locks",
+        ),
         (
             "storage_default_network_access_rule_is_denied",
             "/root_dir/fake_path/storage/storage_default_network_access_rule_is_denied",
@@ -257,37 +526,11 @@ def mock_recover_checks_from_aws_provider_rds_service(*_):
     ]
 
 
-class Test_Check:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
+def mock_recover_checks_from_aws_provider_cognito_service(*_):
+    return []
 
+
+class Test_Check:
     def test_load_check_metadata(self):
         test_cases = [
             {
@@ -325,7 +568,7 @@ def test_parse_checks_from_file(self):
             provider = test["input"]["provider"]
             assert parse_checks_from_file(check_file, provider) == test["expected"]
 
-    @mock_s3
+    @mock_aws
     def test_parse_checks_from_folder(self):
         test_checks_folder = (
             f"{pathlib.Path().absolute()}/tests/lib/check/fixtures/checks_folder"
@@ -363,7 +606,7 @@ def test_parse_checks_from_folder(self):
             provider = test["input"]["provider"]
             assert (
                 parse_checks_from_folder(
-                    self.set_mocked_audit_info(), check_folder, provider
+                    set_mocked_aws_audit_info(), check_folder, provider
                 )
                 == test["expected"]
             )
@@ -470,10 +713,54 @@ def test_recover_checks_from_provider(self):
                 "storage_ensure_minimum_tls_version_12",
                 "/root_dir/prowler/providers/azure/services/storage/storage_ensure_minimum_tls_version_12",
             ),
+            (
+                "storage_key_rotation_90_days",
+                "/root_dir/prowler/providers/azure/services/storage/storage_key_rotation_90_days",
+            ),
+            (
+                "storage_ensure_private_endpoints_in_storage_accounts",
+                "/root_dir/prowler/providers/azure/services/storage/storage_ensure_private_endpoints_in_storage_accounts",
+            ),
+            (
+                "storage_ensure_soft_delete_is_enabled",
+                "/root_dir/prowler/providers/azure/services/storage/storage_ensure_soft_delete_is_enabled",
+            ),
             (
                 "storage_ensure_encryption_with_customer_managed_keys",
                 "/root_dir/prowler/providers/azure/services/storage/storage_ensure_encryption_with_customer_managed_keys",
             ),
+            (
+                "sqlserver_tde_encrypted_with_cmk",
+                "/root_dir/prowler/providers/azure/services/sqlserver/sqlserver_tde_encrypted_with_cmk",
+            ),
+            (
+                "sqlserver_tde_encryption_enabled",
+                "/root_dir/prowler/providers/azure/services/sqlserver/sqlserver_tde_encryption_enabled",
+            ),
+            (
+                "sqlserver_auditing_retention_90_days",
+                "/root_dir/prowler/providers/azure/services/sqlserver/sqlserver_auditing_retention_90_days",
+            ),
+            (
+                "sqlserver_vulnerability_assessment_enabled",
+                "/root_dir/prowler/providers/azure/services/sqlserver/sqlserver_vulnerability_assessment_enabled",
+            ),
+            (
+                "sqlserver_va_periodic_recurring_scans_enabled",
+                "/root_dir/prowler/providers/azure/services/sqlserver/sqlserver_va_periodic_recurring_scans_enabled",
+            ),
+            (
+                "sqlserver_va_scan_reports_configured",
+                "/root_dir/prowler/providers/azure/services/sqlserver/sqlserver_va_scan_reports_configured",
+            ),
+            (
+                "sqlserver_va_emails_notifications_admins_enabled",
+                "/root_dir/prowler/providers/azure/services/sqlserver/sqlserver_va_emails_notifications_admins_enabled",
+            ),
+            (
+                "postgresql_flexible_server_enforce_ssl_enabled",
+                "/root_dir/prowler/providers/azure/services/postgresql/postgresql_flexible_server_enforce_ssl_enabled",
+            ),
         ]
         returned_checks = recover_checks_from_provider(provider, service)
         assert returned_checks == expected_checks
@@ -596,6 +883,19 @@ def test_get_checks_from_input_arn_cloudwatch(self):
         recovered_checks = get_checks_from_input_arn(audit_resources, provider)
         assert recovered_checks == expected_checks
 
+    @patch(
+        "prowler.lib.check.check.recover_checks_from_provider",
+        new=mock_recover_checks_from_aws_provider_cognito_service,
+    )
+    def test_get_checks_from_input_arn_cognito(self):
+        audit_resources = [
+            f"arn:aws:cognito-idp:us-east-1:{AWS_ACCOUNT_NUMBER}:userpool/test"
+        ]
+        provider = "aws"
+        expected_checks = []
+        recovered_checks = get_checks_from_input_arn(audit_resources, provider)
+        assert recovered_checks == expected_checks
+
     @patch(
         "prowler.lib.check.check.recover_checks_from_provider",
         new=mock_recover_checks_from_aws_provider_ec2_service,
diff --git a/tests/lib/cli/parser_test.py b/tests/lib/cli/parser_test.py
index 27e77962d1c..bbc11c95fa7 100644
--- a/tests/lib/cli/parser_test.py
+++ b/tests/lib/cli/parser_test.py
@@ -5,6 +5,11 @@
 from mock import patch
 
 from prowler.lib.cli.parser import ProwlerArgumentParser
+from prowler.providers.aws.config import ROLE_SESSION_NAME
+from prowler.providers.aws.lib.arguments.arguments import (
+    validate_bucket,
+    validate_role_session_name,
+)
 from prowler.providers.azure.lib.arguments.arguments import validate_azure_region
 
 prowler_command = "prowler"
@@ -117,6 +122,7 @@ def test_default_parser_no_arguments_azure(self):
         assert not parsed.sp_env_auth
         assert not parsed.browser_auth
         assert not parsed.managed_identity_auth
+        assert not parsed.shodan
 
     def test_default_parser_no_arguments_gcp(self):
         provider = "gcp"
@@ -772,7 +778,7 @@ def test_aws_parser_session_duration_short(self, capsys):
         assert wrapped_exit.value.code == 2
         assert (
             capsys.readouterr().err
-            == f"{prowler_default_usage_error}\nprowler: error: aws: To use -I/-T options -R option is needed\n"
+            == f"{prowler_default_usage_error}\nprowler: error: aws: To use -I/--external-id, -T/--session-duration or --role-session-name options -R/--role option is needed\n"
         )
 
     def test_aws_parser_session_duration_long(self, capsys):
@@ -785,7 +791,7 @@ def test_aws_parser_session_duration_long(self, capsys):
         assert wrapped_exit.value.code == 2
         assert (
             capsys.readouterr().err
-            == f"{prowler_default_usage_error}\nprowler: error: aws: To use -I/-T options -R option is needed\n"
+            == f"{prowler_default_usage_error}\nprowler: error: aws: To use -I/--external-id, -T/--session-duration or --role-session-name options -R/--role option is needed\n"
         )
 
     # TODO
@@ -806,7 +812,7 @@ def test_aws_parser_external_id_short(self, capsys):
         assert wrapped_exit.value.code == 2
         assert (
             capsys.readouterr().err
-            == f"{prowler_default_usage_error}\nprowler: error: aws: To use -I/-T options -R option is needed\n"
+            == f"{prowler_default_usage_error}\nprowler: error: aws: To use -I/--external-id, -T/--session-duration or --role-session-name options -R/--role option is needed\n"
         )
 
     def test_aws_parser_external_id_long(self, capsys):
@@ -819,7 +825,7 @@ def test_aws_parser_external_id_long(self, capsys):
         assert wrapped_exit.value.code == 2
         assert (
             capsys.readouterr().err
-            == f"{prowler_default_usage_error}\nprowler: error: aws: To use -I/-T options -R option is needed\n"
+            == f"{prowler_default_usage_error}\nprowler: error: aws: To use -I/--external-id, -T/--session-duration or --role-session-name options -R/--role option is needed\n"
         )
 
     def test_aws_parser_region_f(self):
@@ -915,6 +921,12 @@ def test_aws_parser_skip_sh_update(self):
         parsed = self.parser.parse(command)
         assert parsed.skip_sh_update
 
+    def test_aws_parser_send_only_fail(self):
+        argument = "--send-sh-only-fails"
+        command = [prowler_command, argument]
+        parsed = self.parser.parse(command)
+        assert parsed.send_sh_only_fails
+
     def test_aws_parser_quick_inventory_short(self):
         argument = "-i"
         command = [prowler_command, argument]
@@ -1031,6 +1043,13 @@ def test_aws_parser_config_file(self):
         parsed = self.parser.parse(command)
         assert parsed.config_file == config_file
 
+    def test_aws_parser_role_session_name(self):
+        argument = "--role-session-name"
+        role_session_name = ROLE_SESSION_NAME
+        command = [prowler_command, argument, role_session_name]
+        parsed = self.parser.parse(command)
+        assert parsed.role_session_name == role_session_name
+
     def test_parser_azure_auth_sp(self):
         argument = "--sp-env-auth"
         command = [prowler_command, "azure", argument]
@@ -1060,6 +1079,20 @@ def test_parser_azure_auth_az_cli(self):
         assert parsed.provider == "azure"
         assert parsed.az_cli_auth
 
+    def test_azure_parser_shodan_short(self):
+        argument = "-N"
+        shodan_api_key = str(uuid.uuid4())
+        command = [prowler_command, "azure", argument, shodan_api_key]
+        parsed = self.parser.parse(command)
+        assert parsed.shodan == shodan_api_key
+
+    def test_azure_parser_shodan_long(self):
+        argument = "--shodan"
+        shodan_api_key = str(uuid.uuid4())
+        command = [prowler_command, "azure", argument, shodan_api_key]
+        parsed = self.parser.parse(command)
+        assert parsed.shodan == shodan_api_key
+
     def test_parser_azure_auth_managed_identity(self):
         argument = "--managed-identity-auth"
         command = [prowler_command, "azure", argument]
@@ -1182,3 +1215,50 @@ def test_validate_azure_region_invalid_regions(self):
             match=f"Region {invalid_region} not allowed, allowed regions are {' '.join(expected_regions)}",
         ):
             validate_azure_region(invalid_region)
+
+    def test_validate_bucket_invalid_bucket_names(self):
+        bad_bucket_names = [
+            "xn--bucket-name",
+            "mrryadfpcwlscicvnrchmtmyhwrvzkgfgdxnlnvaaummnywciixnzvycnzmhhpwb",
+            "192.168.5.4",
+            "bucket-name-s3alias",
+            "bucket-name-s3alias-",
+            "bucket-n$ame",
+            "bu",
+        ]
+        for bucket_name in bad_bucket_names:
+            with pytest.raises(ArgumentTypeError) as argument_error:
+                validate_bucket(bucket_name)
+
+            assert argument_error.type == ArgumentTypeError
+            assert (
+                argument_error.value.args[0]
+                == "Bucket name must be valid (https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html)"
+            )
+
+    def test_validate_bucket_valid_bucket_names(self):
+        valid_bucket_names = ["bucket-name" "test" "test-test-test"]
+        for bucket_name in valid_bucket_names:
+            assert validate_bucket(bucket_name) == bucket_name
+
+    def test_validate_role_session_name_invalid_role_names(self):
+        bad_role_names = [
+            "role name",
+            "adasD*",
+            "test#",
+            "role-name?",
+        ]
+        for role_name in bad_role_names:
+            with pytest.raises(ArgumentTypeError) as argument_error:
+                validate_role_session_name(role_name)
+
+            assert argument_error.type == ArgumentTypeError
+            assert (
+                argument_error.value.args[0]
+                == "Role Session Name must be 2-64 characters long and consist only of upper- and lower-case alphanumeric characters with no spaces. You can also include underscores or any of the following characters: =,.@-"
+            )
+
+    def test_validate_role_session_name_valid_role_names(self):
+        valid_role_names = ["prowler-role" "test@" "test=test+test,."]
+        for role_name in valid_role_names:
+            assert validate_role_session_name(role_name) == role_name
diff --git a/tests/lib/outputs/outputs_test.py b/tests/lib/outputs/outputs_test.py
index bd00f77e559..80e8279d1cc 100644
--- a/tests/lib/outputs/outputs_test.py
+++ b/tests/lib/outputs/outputs_test.py
@@ -455,9 +455,9 @@ def test_fill_json_asff(self):
         expected.GeneratorId = "prowler-" + finding.check_metadata.CheckID
         expected.AwsAccountId = AWS_ACCOUNT_ID
         expected.Types = finding.check_metadata.CheckType
-        expected.FirstObservedAt = (
-            expected.UpdatedAt
-        ) = expected.CreatedAt = timestamp_utc.strftime("%Y-%m-%dT%H:%M:%SZ")
+        expected.FirstObservedAt = expected.UpdatedAt = expected.CreatedAt = (
+            timestamp_utc.strftime("%Y-%m-%dT%H:%M:%SZ")
+        )
         expected.Severity = Severity(Label=finding.check_metadata.Severity.upper())
         expected.Title = finding.check_metadata.CheckTitle
         expected.Description = finding.status_extended
@@ -536,9 +536,9 @@ def test_fill_json_asff_without_remediation_recommendation_url(self):
         expected.GeneratorId = "prowler-" + finding.check_metadata.CheckID
         expected.AwsAccountId = AWS_ACCOUNT_ID
         expected.Types = finding.check_metadata.CheckType
-        expected.FirstObservedAt = (
-            expected.UpdatedAt
-        ) = expected.CreatedAt = timestamp_utc.strftime("%Y-%m-%dT%H:%M:%SZ")
+        expected.FirstObservedAt = expected.UpdatedAt = expected.CreatedAt = (
+            timestamp_utc.strftime("%Y-%m-%dT%H:%M:%SZ")
+        )
         expected.Severity = Severity(Label=finding.check_metadata.Severity.upper())
         expected.Title = finding.check_metadata.CheckTitle
         expected.Description = finding.status_extended
@@ -563,12 +563,12 @@ def test_fill_json_asff_without_remediation_recommendation_url(self):
             # "Code": finding.check_metadata.Remediation.Code,
         }
 
-        expected.Remediation[
-            "Recommendation"
-        ].Text = finding.check_metadata.Remediation.Recommendation.Text
-        expected.Remediation[
-            "Recommendation"
-        ].Url = "https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html"
+        expected.Remediation["Recommendation"].Text = (
+            finding.check_metadata.Remediation.Recommendation.Text
+        )
+        expected.Remediation["Recommendation"].Url = (
+            "https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html"
+        )
 
         input = Check_Output_JSON_ASFF()
         output_options = mock.MagicMock()
@@ -627,9 +627,9 @@ def test_fill_json_asff_with_long_description(self):
         expected.GeneratorId = "prowler-" + finding.check_metadata.CheckID
         expected.AwsAccountId = AWS_ACCOUNT_ID
         expected.Types = finding.check_metadata.CheckType
-        expected.FirstObservedAt = (
-            expected.UpdatedAt
-        ) = expected.CreatedAt = timestamp_utc.strftime("%Y-%m-%dT%H:%M:%SZ")
+        expected.FirstObservedAt = expected.UpdatedAt = expected.CreatedAt = (
+            timestamp_utc.strftime("%Y-%m-%dT%H:%M:%SZ")
+        )
         expected.Severity = Severity(Label=finding.check_metadata.Severity.upper())
         expected.Title = finding.check_metadata.CheckTitle
         expected.Description = finding.status_extended[:1000] + "..."
@@ -654,12 +654,12 @@ def test_fill_json_asff_with_long_description(self):
             # "Code": finding.check_metadata.Remediation.Code,
         }
 
-        expected.Remediation[
-            "Recommendation"
-        ].Text = finding.check_metadata.Remediation.Recommendation.Text
-        expected.Remediation[
-            "Recommendation"
-        ].Url = "https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html"
+        expected.Remediation["Recommendation"].Text = (
+            finding.check_metadata.Remediation.Recommendation.Text
+        )
+        expected.Remediation["Recommendation"].Url = (
+            "https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html"
+        )
 
         input = Check_Output_JSON_ASFF()
         output_options = mock.MagicMock()
@@ -866,9 +866,9 @@ def test_fill_json_asff_with_long_associated_standards(self):
             expected.GeneratorId = "prowler-" + finding.check_metadata.CheckID
             expected.AwsAccountId = AWS_ACCOUNT_ID
             expected.Types = finding.check_metadata.CheckType
-            expected.FirstObservedAt = (
-                expected.UpdatedAt
-            ) = expected.CreatedAt = timestamp_utc.strftime("%Y-%m-%dT%H:%M:%SZ")
+            expected.FirstObservedAt = expected.UpdatedAt = expected.CreatedAt = (
+                timestamp_utc.strftime("%Y-%m-%dT%H:%M:%SZ")
+            )
             expected.Severity = Severity(Label=finding.check_metadata.Severity.upper())
             expected.Title = finding.check_metadata.CheckTitle
             expected.Description = finding.status_extended
@@ -935,12 +935,12 @@ def test_fill_json_asff_with_long_associated_standards(self):
                 # "Code": finding.check_metadata.Remediation.Code,
             }
 
-            expected.Remediation[
-                "Recommendation"
-            ].Text = finding.check_metadata.Remediation.Recommendation.Text
-            expected.Remediation[
-                "Recommendation"
-            ].Url = "https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html"
+            expected.Remediation["Recommendation"].Text = (
+                finding.check_metadata.Remediation.Recommendation.Text
+            )
+            expected.Remediation["Recommendation"].Url = (
+                "https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html"
+            )
 
             input = Check_Output_JSON_ASFF()
             output_options = mock.MagicMock()
@@ -1332,12 +1332,12 @@ def test_get_check_compliance(self):
 
         output_options = mock.MagicMock()
         output_options.bulk_checks_metadata = {}
-        output_options.bulk_checks_metadata[
-            "iam_user_accesskey_unused"
-        ] = mock.MagicMock()
-        output_options.bulk_checks_metadata[
-            "iam_user_accesskey_unused"
-        ].Compliance = bulk_check_metadata
+        output_options.bulk_checks_metadata["iam_user_accesskey_unused"] = (
+            mock.MagicMock()
+        )
+        output_options.bulk_checks_metadata["iam_user_accesskey_unused"].Compliance = (
+            bulk_check_metadata
+        )
 
         assert get_check_compliance(finding, "aws", output_options) == {
             "CIS-1.4": ["2.1.3"],
diff --git a/tests/lib/outputs/slack_test.py b/tests/lib/outputs/slack_test.py
index 3a93f5caf36..03620da28ec 100644
--- a/tests/lib/outputs/slack_test.py
+++ b/tests/lib/outputs/slack_test.py
@@ -78,6 +78,7 @@ def test_create_message_identity(self):
             audit_metadata=None,
             audit_config=None,
             AzureRegionConfig=AzureRegionConfig(),
+            locations=None,
         )
         assert create_message_identity("aws", aws_audit_info) == (
             f"AWS Account *{aws_audit_info.audited_account}*",
@@ -119,14 +120,14 @@ def test_create_message_blocks(self):
                 "type": "section",
                 "text": {
                     "type": "mrkdwn",
-                    "text": f"\n:white_check_mark: *{stats['total_pass']} Passed findings* ({round(stats['total_pass']/stats['findings_count']*100,2)}%)\n",
+                    "text": f"\n:white_check_mark: *{stats['total_pass']} Passed findings* ({round(stats['total_pass'] / stats['findings_count'] * 100 , 2)}%)\n",
                 },
             },
             {
                 "type": "section",
                 "text": {
                     "type": "mrkdwn",
-                    "text": f"\n:x: *{stats['total_fail']} Failed findings* ({round(stats['total_fail']/stats['findings_count']*100,2)}%)\n ",
+                    "text": f"\n:x: *{stats['total_fail']} Failed findings* ({round(stats['total_fail'] / stats['findings_count'] * 100 , 2)}%)\n ",
                 },
             },
             {
@@ -199,14 +200,14 @@ def test_create_message_blocks(self):
                 "type": "section",
                 "text": {
                     "type": "mrkdwn",
-                    "text": f"\n:white_check_mark: *{stats['total_pass']} Passed findings* ({round(stats['total_pass']/stats['findings_count']*100,2)}%)\n",
+                    "text": f"\n:white_check_mark: *{stats['total_pass']} Passed findings* ({round(stats['total_pass'] / stats['findings_count'] * 100 , 2)}%)\n",
                 },
             },
             {
                 "type": "section",
                 "text": {
                     "type": "mrkdwn",
-                    "text": f"\n:x: *{stats['total_fail']} Failed findings* ({round(stats['total_fail']/stats['findings_count']*100,2)}%)\n ",
+                    "text": f"\n:x: *{stats['total_fail']} Failed findings* ({round(stats['total_fail'] / stats['findings_count'] * 100 , 2)}%)\n ",
                 },
             },
             {
@@ -279,14 +280,14 @@ def test_create_message_blocks(self):
                 "type": "section",
                 "text": {
                     "type": "mrkdwn",
-                    "text": f"\n:white_check_mark: *{stats['total_pass']} Passed findings* ({round(stats['total_pass']/stats['findings_count']*100,2)}%)\n",
+                    "text": f"\n:white_check_mark: *{stats['total_pass']} Passed findings* ({round(stats['total_pass'] / stats['findings_count'] * 100 , 2)}%)\n",
                 },
             },
             {
                 "type": "section",
                 "text": {
                     "type": "mrkdwn",
-                    "text": f"\n:x: *{stats['total_fail']} Failed findings* ({round(stats['total_fail']/stats['findings_count']*100,2)}%)\n ",
+                    "text": f"\n:x: *{stats['total_fail']} Failed findings* ({round(stats['total_fail'] / stats['findings_count'] * 100 , 2)}%)\n ",
                 },
             },
             {
diff --git a/tests/providers/aws/audit_info_utils.py b/tests/providers/aws/audit_info_utils.py
index 596c3809de4..04f55529d01 100644
--- a/tests/providers/aws/audit_info_utils.py
+++ b/tests/providers/aws/audit_info_utils.py
@@ -1,15 +1,44 @@
 from boto3 import session
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
+from prowler.providers.aws.lib.audit_info.models import AWS_Assume_Role, AWS_Audit_Info
 from prowler.providers.common.models import Audit_Metadata
 
+# Root AWS Account
+AWS_ACCOUNT_NUMBER = "123456789012"
+AWS_ACCOUNT_ARN = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
+AWS_COMMERCIAL_PARTITION = "aws"
+
+# Commercial Regions
 AWS_REGION_US_EAST_1 = "us-east-1"
+AWS_REGION_US_EAST_1_AZA = "us-east-1a"
+AWS_REGION_US_EAST_1_AZB = "us-east-1b"
 AWS_REGION_EU_WEST_1 = "eu-west-1"
+AWS_REGION_EU_WEST_1_AZA = "eu-west-1a"
+AWS_REGION_EU_WEST_1_AZB = "eu-west-1b"
 AWS_REGION_EU_WEST_2 = "eu-west-2"
-AWS_PARTITION = "aws"
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_ACCOUNT_ARN = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
+AWS_REGION_CN_NORTHWEST_1 = "cn-northwest-1"
+AWS_REGION_CN_NORTH_1 = "cn-north-1"
+AWS_REGION_EU_SOUTH_2 = "eu-south-2"
+AWS_REGION_EU_SOUTH_3 = "eu-south-3"
+AWS_REGION_US_WEST_2 = "us-west-2"
+AWS_REGION_US_EAST_2 = "us-east-2"
+AWS_REGION_EU_CENTRAL_1 = "eu-central-1"
+
+
+# China Regions
+AWS_REGION_CHINA_NORHT_1 = "cn-north-1"
+
+# Gov Cloud Regions
+AWS_REGION_GOV_CLOUD_US_EAST_1 = "us-gov-east-1"
+
+# Iso Regions
+AWS_REGION_ISO_GLOBAL = "aws-iso-global"
+
+# AWS Partitions
 AWS_COMMERCIAL_PARTITION = "aws"
+AWS_GOV_CLOUD_PARTITION = "aws-us-gov"
+AWS_CHINA_PARTITION = "aws-cn"
+AWS_ISO_PARTITION = "aws-iso"
 
 
 # Mocked AWS Audit Info
@@ -17,32 +46,44 @@ def set_mocked_aws_audit_info(
     audited_regions: [str] = [],
     audited_account: str = AWS_ACCOUNT_NUMBER,
     audited_account_arn: str = AWS_ACCOUNT_ARN,
+    audited_partition: str = AWS_COMMERCIAL_PARTITION,
+    expected_checks: [str] = [],
+    profile_region: str = None,
+    audit_config: dict = {},
+    ignore_unused_services: bool = False,
+    assumed_role_info: AWS_Assume_Role = None,
+    audit_session: session.Session = session.Session(
+        profile_name=None,
+        botocore_session=None,
+    ),
+    original_session: session.Session = None,
+    enabled_regions: set = None,
 ):
     audit_info = AWS_Audit_Info(
         session_config=None,
-        original_session=None,
-        audit_session=session.Session(
-            profile_name=None,
-            botocore_session=None,
-        ),
+        original_session=original_session,
+        audit_session=audit_session,
         audited_account=audited_account,
         audited_account_arn=audited_account_arn,
         audited_user_id=None,
-        audited_partition=AWS_PARTITION,
+        audited_partition=audited_partition,
         audited_identity_arn=None,
         profile=None,
-        profile_region=None,
+        profile_region=profile_region,
         credentials=None,
-        assumed_role_info=None,
+        assumed_role_info=assumed_role_info,
         audited_regions=audited_regions,
         organizations_metadata=None,
-        audit_resources=None,
+        audit_resources=[],
         mfa_enabled=False,
         audit_metadata=Audit_Metadata(
             services_scanned=0,
-            expected_checks=[],
+            expected_checks=expected_checks,
             completed_checks=0,
             audit_progress=0,
         ),
+        audit_config=audit_config,
+        ignore_unused_services=ignore_unused_services,
+        enabled_regions=enabled_regions if enabled_regions else set(audited_regions),
     )
     return audit_info
diff --git a/tests/providers/aws/aws_provider_test.py b/tests/providers/aws/aws_provider_test.py
index 0662b1c9c89..db2038de976 100644
--- a/tests/providers/aws/aws_provider_test.py
+++ b/tests/providers/aws/aws_provider_test.py
@@ -2,7 +2,7 @@
 
 import boto3
 from mock import patch
-from moto import mock_iam, mock_sts
+from moto import mock_aws
 
 from prowler.providers.aws.aws_provider import (
     AWS_Provider,
@@ -12,21 +12,28 @@
     get_default_region,
     get_global_region,
 )
-from prowler.providers.aws.lib.audit_info.models import AWS_Assume_Role, AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-ACCOUNT_ID = 123456789012
-AWS_REGION = "us-east-1"
+from prowler.providers.aws.lib.audit_info.models import AWS_Assume_Role
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_CHINA_PARTITION,
+    AWS_GOV_CLOUD_PARTITION,
+    AWS_ISO_PARTITION,
+    AWS_REGION_CHINA_NORHT_1,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_GOV_CLOUD_US_EAST_1,
+    AWS_REGION_ISO_GLOBAL,
+    AWS_REGION_US_EAST_1,
+    AWS_REGION_US_EAST_2,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_AWS_Provider:
-    @mock_iam
-    @mock_sts
+    @mock_aws
     def test_aws_provider_user_without_mfa(self):
-        audited_regions = ["eu-west-1"]
-        # sessionName = "ProwlerAsessmentSession"
+        # sessionName = "ProwlerAssessmentSession"
         # Boto 3 client to create our user
-        iam_client = boto3.client("iam", region_name=AWS_REGION)
+        iam_client = boto3.client("iam", region_name=AWS_REGION_US_EAST_1)
         # IAM user
         iam_user = iam_client.create_user(UserName="test-user")["User"]
         access_key = iam_client.create_access_key(UserName=iam_user["UserName"])[
@@ -38,60 +45,43 @@ def test_aws_provider_user_without_mfa(self):
         session = boto3.session.Session(
             aws_access_key_id=access_key_id,
             aws_secret_access_key=secret_access_key,
-            region_name=AWS_REGION,
+            region_name=AWS_REGION_US_EAST_1,
         )
 
-        # Fulfil the input session object for Prowler
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=session,
-            audit_session=None,
-            audited_account=None,
-            audited_account_arn=None,
-            audited_partition=None,
-            audited_identity_arn=None,
-            audited_user_id=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
+        audit_info = set_mocked_aws_audit_info(
+            audited_regions=[AWS_REGION_EU_WEST_1],
             assumed_role_info=AWS_Assume_Role(
                 role_arn=None,
                 session_duration=None,
                 external_id=None,
                 mfa_enabled=False,
+                role_session_name="ProwlerAssessmentSession",
             ),
-            audited_regions=audited_regions,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
+            original_session=session,
         )
 
         # Call assume_role
         with patch(
             "prowler.providers.aws.aws_provider.input_role_mfa_token_and_code",
-            return_value=(f"arn:aws:iam::{ACCOUNT_ID}:mfa/test-role-mfa", "111111"),
+            return_value=(
+                f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:mfa/test-role-mfa",
+                "111111",
+            ),
         ):
             aws_provider = AWS_Provider(audit_info)
-            assert aws_provider.aws_session.region_name is None
+            assert aws_provider.aws_session.region_name == AWS_REGION_US_EAST_1
             assert aws_provider.role_info == AWS_Assume_Role(
                 role_arn=None,
                 session_duration=None,
                 external_id=None,
                 mfa_enabled=False,
+                role_session_name="ProwlerAssessmentSession",
             )
 
-    @mock_iam
-    @mock_sts
+    @mock_aws
     def test_aws_provider_user_with_mfa(self):
-        audited_regions = "eu-west-1"
         # Boto 3 client to create our user
-        iam_client = boto3.client("iam", region_name=AWS_REGION)
+        iam_client = boto3.client("iam", region_name=AWS_REGION_US_EAST_1)
         # IAM user
         iam_user = iam_client.create_user(UserName="test-user")["User"]
         access_key = iam_client.create_access_key(UserName=iam_user["UserName"])[
@@ -103,59 +93,50 @@ def test_aws_provider_user_with_mfa(self):
         session = boto3.session.Session(
             aws_access_key_id=access_key_id,
             aws_secret_access_key=secret_access_key,
-            region_name=AWS_REGION,
+            region_name=AWS_REGION_US_EAST_1,
         )
 
-        # Fulfil the input session object for Prowler
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=session,
-            audit_session=None,
-            audited_account=None,
-            audited_account_arn=None,
-            audited_partition=None,
-            audited_identity_arn=None,
-            audited_user_id=None,
-            profile=None,
-            profile_region=AWS_REGION,
-            credentials=None,
+        audit_info = set_mocked_aws_audit_info(
+            audited_regions=[AWS_REGION_EU_WEST_1],
             assumed_role_info=AWS_Assume_Role(
                 role_arn=None,
                 session_duration=None,
                 external_id=None,
                 mfa_enabled=False,
+                role_session_name="ProwlerAssessmentSession",
             ),
-            audited_regions=audited_regions,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=True,
+            original_session=session,
+            profile_region=AWS_REGION_US_EAST_1,
         )
 
-        # # Call assume_role
+        # Call assume_role
         with patch(
             "prowler.providers.aws.aws_provider.input_role_mfa_token_and_code",
-            return_value=(f"arn:aws:iam::{ACCOUNT_ID}:mfa/test-role-mfa", "111111"),
+            return_value=(
+                f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:mfa/test-role-mfa",
+                "111111",
+            ),
         ):
             aws_provider = AWS_Provider(audit_info)
-            assert aws_provider.aws_session.region_name is None
+            assert aws_provider.aws_session.region_name == AWS_REGION_US_EAST_1
             assert aws_provider.role_info == AWS_Assume_Role(
                 role_arn=None,
                 session_duration=None,
                 external_id=None,
                 mfa_enabled=False,
+                role_session_name="ProwlerAssessmentSession",
             )
 
-    @mock_iam
-    @mock_sts
+    @mock_aws
     def test_aws_provider_assume_role_with_mfa(self):
         # Variables
         role_name = "test-role"
-        role_arn = f"arn:aws:iam::{ACCOUNT_ID}:role/{role_name}"
+        role_arn = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:role/{role_name}"
         session_duration_seconds = 900
-        audited_regions = ["eu-west-1"]
-        sessionName = "ProwlerAsessmentSession"
+        sessionName = "ProwlerAssessmentSession"
+
         # Boto 3 client to create our user
-        iam_client = boto3.client("iam", region_name=AWS_REGION)
+        iam_client = boto3.client("iam", region_name=AWS_REGION_US_EAST_1)
         # IAM user
         iam_user = iam_client.create_user(UserName="test-user")["User"]
         access_key = iam_client.create_access_key(UserName=iam_user["UserName"])[
@@ -167,46 +148,30 @@ def test_aws_provider_assume_role_with_mfa(self):
         session = boto3.session.Session(
             aws_access_key_id=access_key_id,
             aws_secret_access_key=secret_access_key,
-            region_name=AWS_REGION,
+            region_name=AWS_REGION_US_EAST_1,
         )
 
-        # Fulfil the input session object for Prowler
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=session,
-            audit_session=None,
-            audited_account=None,
-            audited_account_arn=None,
-            audited_partition=None,
-            audited_identity_arn=None,
-            audited_user_id=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
+        audit_info = set_mocked_aws_audit_info(
+            audited_regions=[AWS_REGION_EU_WEST_1],
             assumed_role_info=AWS_Assume_Role(
                 role_arn=role_arn,
                 session_duration=session_duration_seconds,
                 external_id=None,
                 mfa_enabled=True,
+                role_session_name="ProwlerAssessmentSession",
             ),
-            audited_regions=audited_regions,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
+            original_session=session,
+            profile_region=AWS_REGION_US_EAST_1,
         )
 
-        # Call assume_role
         aws_provider = AWS_Provider(audit_info)
         # Patch MFA
         with patch(
             "prowler.providers.aws.aws_provider.input_role_mfa_token_and_code",
-            return_value=(f"arn:aws:iam::{ACCOUNT_ID}:mfa/test-role-mfa", "111111"),
+            return_value=(
+                f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:mfa/test-role-mfa",
+                "111111",
+            ),
         ):
             assume_role_response = assume_role(
                 aws_provider.aws_session, aws_provider.role_info
@@ -225,7 +190,7 @@ def test_aws_provider_assume_role_with_mfa(self):
             # Assumed Role
             assert (
                 assume_role_response["AssumedRoleUser"]["Arn"]
-                == f"arn:aws:sts::{ACCOUNT_ID}:assumed-role/{role_name}/{sessionName}"
+                == f"arn:aws:sts::{AWS_ACCOUNT_NUMBER}:assumed-role/{role_name}/{sessionName}"
             )
 
             # AssumedRoleUser
@@ -240,17 +205,16 @@ def test_aws_provider_assume_role_with_mfa(self):
                 assume_role_response["AssumedRoleUser"]["AssumedRoleId"]
             ) == 21 + 1 + len(sessionName)
 
-    @mock_iam
-    @mock_sts
+    @mock_aws
     def test_aws_provider_assume_role_without_mfa(self):
         # Variables
         role_name = "test-role"
-        role_arn = f"arn:aws:iam::{ACCOUNT_ID}:role/{role_name}"
+        role_arn = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:role/{role_name}"
         session_duration_seconds = 900
-        audited_regions = "eu-west-1"
-        sessionName = "ProwlerAsessmentSession"
+        sessionName = "ProwlerAssessmentSession"
+
         # Boto 3 client to create our user
-        iam_client = boto3.client("iam", region_name=AWS_REGION)
+        iam_client = boto3.client("iam", region_name=AWS_REGION_US_EAST_1)
         # IAM user
         iam_user = iam_client.create_user(UserName="test-user")["User"]
         access_key = iam_client.create_access_key(UserName=iam_user["UserName"])[
@@ -262,41 +226,22 @@ def test_aws_provider_assume_role_without_mfa(self):
         session = boto3.session.Session(
             aws_access_key_id=access_key_id,
             aws_secret_access_key=secret_access_key,
-            region_name=AWS_REGION,
+            region_name=AWS_REGION_US_EAST_1,
         )
 
-        # Fulfil the input session object for Prowler
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=session,
-            audit_session=None,
-            audited_account=None,
-            audited_account_arn=None,
-            audited_partition=None,
-            audited_identity_arn=None,
-            audited_user_id=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
+        audit_info = set_mocked_aws_audit_info(
+            audited_regions=[AWS_REGION_EU_WEST_1],
             assumed_role_info=AWS_Assume_Role(
                 role_arn=role_arn,
                 session_duration=session_duration_seconds,
                 external_id=None,
                 mfa_enabled=False,
+                role_session_name="ProwlerAssessmentSession",
             ),
-            audited_regions=audited_regions,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
+            original_session=session,
+            profile_region=AWS_REGION_US_EAST_1,
         )
 
-        # Call assume_role
         aws_provider = AWS_Provider(audit_info)
         assume_role_response = assume_role(
             aws_provider.aws_session, aws_provider.role_info
@@ -315,7 +260,7 @@ def test_aws_provider_assume_role_without_mfa(self):
         # Assumed Role
         assert (
             assume_role_response["AssumedRoleUser"]["Arn"]
-            == f"arn:aws:sts::{ACCOUNT_ID}:assumed-role/{role_name}/{sessionName}"
+            == f"arn:aws:sts::{AWS_ACCOUNT_NUMBER}:assumed-role/{role_name}/{sessionName}"
         )
 
         # AssumedRoleUser
@@ -330,19 +275,18 @@ def test_aws_provider_assume_role_without_mfa(self):
             assume_role_response["AssumedRoleUser"]["AssumedRoleId"]
         ) == 21 + 1 + len(sessionName)
 
-    @mock_iam
-    @mock_sts
+    @mock_aws
     def test_assume_role_with_sts_endpoint_region(self):
         # Variables
         role_name = "test-role"
-        role_arn = f"arn:aws:iam::{ACCOUNT_ID}:role/{role_name}"
+        role_arn = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:role/{role_name}"
         session_duration_seconds = 900
-        aws_region = "eu-west-1"
-        sts_endpoint_region = aws_region
-        audited_regions = [aws_region]
-        sessionName = "ProwlerAsessmentSession"
+        AWS_REGION_US_EAST_1 = AWS_REGION_EU_WEST_1
+        sts_endpoint_region = AWS_REGION_US_EAST_1
+        sessionName = "ProwlerAssessmentSession"
+
         # Boto 3 client to create our user
-        iam_client = boto3.client("iam", region_name=AWS_REGION)
+        iam_client = boto3.client("iam", region_name=AWS_REGION_US_EAST_1)
         # IAM user
         iam_user = iam_client.create_user(UserName="test-user")["User"]
         access_key = iam_client.create_access_key(UserName=iam_user["UserName"])[
@@ -354,41 +298,22 @@ def test_assume_role_with_sts_endpoint_region(self):
         session = boto3.session.Session(
             aws_access_key_id=access_key_id,
             aws_secret_access_key=secret_access_key,
-            region_name=AWS_REGION,
+            region_name=AWS_REGION_US_EAST_1,
         )
 
-        # Fulfil the input session object for Prowler
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=session,
-            audit_session=None,
-            audited_account=None,
-            audited_account_arn=None,
-            audited_partition=None,
-            audited_identity_arn=None,
-            audited_user_id=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
+        audit_info = set_mocked_aws_audit_info(
+            audited_regions=[AWS_REGION_EU_WEST_1],
             assumed_role_info=AWS_Assume_Role(
                 role_arn=role_arn,
                 session_duration=session_duration_seconds,
                 external_id=None,
                 mfa_enabled=False,
+                role_session_name="ProwlerAssessmentSession",
             ),
-            audited_regions=audited_regions,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
+            original_session=session,
+            profile_region=AWS_REGION_US_EAST_1,
         )
 
-        # Call assume_role
         aws_provider = AWS_Provider(audit_info)
         assume_role_response = assume_role(
             aws_provider.aws_session, aws_provider.role_info, sts_endpoint_region
@@ -407,7 +332,7 @@ def test_assume_role_with_sts_endpoint_region(self):
         # Assumed Role
         assert (
             assume_role_response["AssumedRoleUser"]["Arn"]
-            == f"arn:aws:sts::{ACCOUNT_ID}:assumed-role/{role_name}/{sessionName}"
+            == f"arn:aws:sts::{AWS_ACCOUNT_NUMBER}:assumed-role/{role_name}/{sessionName}"
         )
 
         # AssumedRoleUser
@@ -423,368 +348,78 @@ def test_assume_role_with_sts_endpoint_region(self):
         ) == 21 + 1 + len(sessionName)
 
     def test_generate_regional_clients(self):
-        # New Boto3 session with the previously create user
-        session = boto3.session.Session(
-            region_name=AWS_REGION,
-        )
-        audited_regions = ["eu-west-1", AWS_REGION]
-        # Fulfil the input session object for Prowler
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session,
-            audited_account=None,
-            audited_account_arn=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            audited_user_id=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
+        audited_regions = [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        audit_info = set_mocked_aws_audit_info(
             audited_regions=audited_regions,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
+            audit_session=boto3.session.Session(
+                region_name=AWS_REGION_US_EAST_1,
             ),
+            enabled_regions=audited_regions,
         )
+
         generate_regional_clients_response = generate_regional_clients(
             "ec2", audit_info
         )
 
         assert set(generate_regional_clients_response.keys()) == set(audited_regions)
 
-    def test_generate_regional_clients_global_service(self):
-        # New Boto3 session with the previously create user
-        session = boto3.session.Session(
-            region_name=AWS_REGION,
-        )
-        audited_regions = ["eu-west-1", AWS_REGION]
-        profile_region = AWS_REGION
-        # Fulfil the input session object for Prowler
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session,
-            audited_account=None,
-            audited_account_arn=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            audited_user_id=None,
-            profile=None,
-            profile_region=profile_region,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=audited_regions,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        generate_regional_clients_response = generate_regional_clients(
-            "route53", audit_info, global_service=True
-        )
-
-        assert list(generate_regional_clients_response.keys()) == [profile_region]
-
     def test_generate_regional_clients_cn_partition(self):
-        # New Boto3 session with the previously create user
-        session = boto3.session.Session(
-            region_name=AWS_REGION,
-        )
         audited_regions = ["cn-northwest-1", "cn-north-1"]
-        # Fulfil the input session object for Prowler
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session,
-            audited_account=None,
-            audited_account_arn=None,
-            audited_partition="aws-cn",
-            audited_identity_arn=None,
-            audited_user_id=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
+        audit_info = set_mocked_aws_audit_info(
             audited_regions=audited_regions,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
+            audit_session=boto3.session.Session(
+                region_name=AWS_REGION_US_EAST_1,
             ),
+            enabled_regions=audited_regions,
         )
         generate_regional_clients_response = generate_regional_clients(
-            "shield", audit_info, global_service=True
+            "shield", audit_info
         )
 
         # Shield does not exist in China
         assert generate_regional_clients_response == {}
 
     def test_get_default_region(self):
-        audited_regions = ["eu-west-1"]
-        profile_region = "eu-west-1"
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=None,
-            audited_account=None,
-            audited_account_arn=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            audited_user_id=None,
-            profile=None,
-            profile_region=profile_region,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=audited_regions,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
+        audit_info = set_mocked_aws_audit_info(
+            profile_region=AWS_REGION_EU_WEST_1,
+            audited_regions=[AWS_REGION_EU_WEST_1],
         )
-        assert get_default_region("ec2", audit_info) == "eu-west-1"
+        assert get_default_region("ec2", audit_info) == AWS_REGION_EU_WEST_1
 
     def test_get_default_region_profile_region_not_audited(self):
-        audited_regions = ["eu-west-1"]
-        profile_region = "us-east-2"
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=None,
-            audited_account=None,
-            audited_account_arn=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            audited_user_id=None,
-            profile=None,
-            profile_region=profile_region,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=audited_regions,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
+        audit_info = set_mocked_aws_audit_info(
+            profile_region=AWS_REGION_US_EAST_2,
+            audited_regions=[AWS_REGION_EU_WEST_1],
         )
-        assert get_default_region("ec2", audit_info) == "eu-west-1"
+        assert get_default_region("ec2", audit_info) == AWS_REGION_EU_WEST_1
 
     def test_get_default_region_non_profile_region(self):
-        audited_regions = ["eu-west-1"]
-        profile_region = None
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=None,
-            audited_account=None,
-            audited_account_arn=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            audited_user_id=None,
-            profile=None,
-            profile_region=profile_region,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=audited_regions,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
+        audit_info = set_mocked_aws_audit_info(
+            audited_regions=[AWS_REGION_EU_WEST_1],
         )
-        assert get_default_region("ec2", audit_info) == "eu-west-1"
+        assert get_default_region("ec2", audit_info) == AWS_REGION_EU_WEST_1
 
     def test_get_default_region_non_profile_or_audited_region(self):
-        audited_regions = None
-        profile_region = None
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=None,
-            audited_account=None,
-            audited_account_arn=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            audited_user_id=None,
-            profile=None,
-            profile_region=profile_region,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=audited_regions,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        assert get_default_region("ec2", audit_info) == "us-east-1"
-
-    def test_aws_get_global_region(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=None,
-            audited_account=None,
-            audited_account_arn=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            audited_user_id=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        assert get_default_region("ec2", audit_info) == "us-east-1"
+        audit_info = set_mocked_aws_audit_info()
+        assert get_default_region("ec2", audit_info) == AWS_REGION_US_EAST_1
 
     def test_aws_gov_get_global_region(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=None,
-            audited_account=None,
-            audited_account_arn=None,
-            audited_partition="aws-us-gov",
-            audited_identity_arn=None,
-            audited_user_id=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
+        audit_info = set_mocked_aws_audit_info(
+            audited_partition=AWS_GOV_CLOUD_PARTITION
         )
-        assert get_global_region(audit_info) == "us-gov-east-1"
+        assert get_global_region(audit_info) == AWS_REGION_GOV_CLOUD_US_EAST_1
 
     def test_aws_cn_get_global_region(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=None,
-            audited_account=None,
-            audited_account_arn=None,
-            audited_partition="aws-cn",
-            audited_identity_arn=None,
-            audited_user_id=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        assert get_global_region(audit_info) == "cn-north-1"
+        audit_info = set_mocked_aws_audit_info(audited_partition=AWS_CHINA_PARTITION)
+        assert get_global_region(audit_info) == AWS_REGION_CHINA_NORHT_1
 
     def test_aws_iso_get_global_region(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=None,
-            audited_account=None,
-            audited_account_arn=None,
-            audited_partition="aws-iso",
-            audited_identity_arn=None,
-            audited_user_id=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        assert get_global_region(audit_info) == "aws-iso-global"
+        audit_info = set_mocked_aws_audit_info(audited_partition=AWS_ISO_PARTITION)
+        assert get_global_region(audit_info) == AWS_REGION_ISO_GLOBAL
 
     def test_get_available_aws_service_regions_with_us_east_1_audited(self):
-        audited_regions = ["us-east-1"]
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=None,
-            audited_account=None,
-            audited_account_arn=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            audited_user_id=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=audited_regions,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
+        audit_info = set_mocked_aws_audit_info(audited_regions=[AWS_REGION_US_EAST_1])
+
         with patch(
             "prowler.providers.aws.aws_provider.parse_json_file",
             return_value={
@@ -799,13 +434,13 @@ def test_get_available_aws_service_regions_with_us_east_1_audited(self):
                                 "eu-north-1",
                                 "eu-south-1",
                                 "eu-south-2",
-                                "eu-west-1",
+                                AWS_REGION_EU_WEST_1,
                                 "eu-west-2",
                                 "eu-west-3",
                                 "me-central-1",
                                 "me-south-1",
                                 "sa-east-1",
-                                "us-east-1",
+                                AWS_REGION_US_EAST_1,
                                 "us-east-2",
                                 "us-west-1",
                                 "us-west-2",
@@ -815,33 +450,13 @@ def test_get_available_aws_service_regions_with_us_east_1_audited(self):
                 }
             },
         ):
-            assert get_available_aws_service_regions("ec2", audit_info) == ["us-east-1"]
+            assert get_available_aws_service_regions("ec2", audit_info) == {
+                AWS_REGION_US_EAST_1
+            }
 
     def test_get_available_aws_service_regions_with_all_regions_audited(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=None,
-            audited_account=None,
-            audited_account_arn=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            audited_user_id=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
+        audit_info = set_mocked_aws_audit_info()
+
         with patch(
             "prowler.providers.aws.aws_provider.parse_json_file",
             return_value={
@@ -856,13 +471,13 @@ def test_get_available_aws_service_regions_with_all_regions_audited(self):
                                 "eu-north-1",
                                 "eu-south-1",
                                 "eu-south-2",
-                                "eu-west-1",
+                                AWS_REGION_EU_WEST_1,
                                 "eu-west-2",
                                 "eu-west-3",
                                 "me-central-1",
                                 "me-south-1",
                                 "sa-east-1",
-                                "us-east-1",
+                                AWS_REGION_US_EAST_1,
                                 "us-east-2",
                                 "us-west-1",
                                 "us-west-2",
diff --git a/tests/providers/aws/lib/credentials/credentials_test.py b/tests/providers/aws/lib/credentials/credentials_test.py
index 84bbd3724bb..6397cc3d646 100644
--- a/tests/providers/aws/lib/credentials/credentials_test.py
+++ b/tests/providers/aws/lib/credentials/credentials_test.py
@@ -3,7 +3,7 @@
 import boto3
 import botocore
 from mock import patch
-from moto import mock_iam, mock_sts
+from moto import mock_aws
 
 from prowler.providers.aws.lib.arn.arn import parse_iam_credentials_arn
 from prowler.providers.aws.lib.credentials.credentials import (
@@ -41,8 +41,7 @@ def mock_get_caller_identity_gov_cloud(self, operation_name, kwarg):
 
 
 class Test_AWS_Credentials:
-    @mock_sts
-    @mock_iam
+    @mock_aws
     def test_validate_credentials_commercial_partition_with_regions(self):
         # AWS Region for AWS COMMERCIAL
         aws_region = "eu-west-1"
@@ -77,8 +76,7 @@ def test_validate_credentials_commercial_partition_with_regions(self):
         assert re.match("[0-9a-zA-Z]{20}", get_caller_identity["UserId"])
         assert get_caller_identity["Account"] == AWS_ACCOUNT_NUMBER
 
-    @mock_sts
-    @mock_iam
+    @mock_aws
     def test_validate_credentials_commercial_partition_with_regions_none_and_profile_region_so_profile_region(
         self,
     ):
@@ -115,8 +113,7 @@ def test_validate_credentials_commercial_partition_with_regions_none_and_profile
         assert re.match("[0-9a-zA-Z]{20}", get_caller_identity["UserId"])
         assert get_caller_identity["Account"] == AWS_ACCOUNT_NUMBER
 
-    @mock_sts
-    @mock_iam
+    @mock_aws
     def test_validate_credentials_commercial_partition_with_0_regions_and_profile_region_so_profile_region(
         self,
     ):
@@ -153,8 +150,7 @@ def test_validate_credentials_commercial_partition_with_0_regions_and_profile_re
         assert re.match("[0-9a-zA-Z]{20}", get_caller_identity["UserId"])
         assert get_caller_identity["Account"] == AWS_ACCOUNT_NUMBER
 
-    @mock_sts
-    @mock_iam
+    @mock_aws
     def test_validate_credentials_commercial_partition_without_regions_and_profile_region_so_us_east_1(
         self,
     ):
@@ -191,8 +187,7 @@ def test_validate_credentials_commercial_partition_without_regions_and_profile_r
         assert re.match("[0-9a-zA-Z]{20}", get_caller_identity["UserId"])
         assert get_caller_identity["Account"] == AWS_ACCOUNT_NUMBER
 
-    @mock_sts
-    @mock_iam
+    @mock_aws
     def test_validate_credentials_commercial_partition_with_regions_none_and_profile_region_but_sts_endpoint_region(
         self,
     ):
@@ -232,8 +227,7 @@ def test_validate_credentials_commercial_partition_with_regions_none_and_profile
         assert re.match("[0-9a-zA-Z]{20}", get_caller_identity["UserId"])
         assert get_caller_identity["Account"] == AWS_ACCOUNT_NUMBER
 
-    @mock_sts
-    @mock_iam
+    @mock_aws
     def test_validate_credentials_china_partition_without_regions_and_profile_region_so_us_east_1(
         self,
     ):
@@ -270,8 +264,7 @@ def test_validate_credentials_china_partition_without_regions_and_profile_region
         assert re.match("[0-9a-zA-Z]{20}", get_caller_identity["UserId"])
         assert get_caller_identity["Account"] == AWS_ACCOUNT_NUMBER
 
-    @mock_sts
-    @mock_iam
+    @mock_aws
     @patch(
         "botocore.client.BaseClient._make_api_call", new=mock_get_caller_identity_china
     )
@@ -312,8 +305,7 @@ def test_validate_credentials_china_partition(self):
         assert re.match("[0-9a-zA-Z]{20}", get_caller_identity["UserId"])
         assert get_caller_identity["Account"] == AWS_ACCOUNT_NUMBER
 
-    @mock_sts
-    @mock_iam
+    @mock_aws
     @patch(
         "botocore.client.BaseClient._make_api_call", new=mock_get_caller_identity_china
     )
@@ -359,8 +351,7 @@ def test_validate_credentials_china_partition_without_regions_but_sts_endpoint_r
         assert re.match("[0-9a-zA-Z]{20}", get_caller_identity["UserId"])
         assert get_caller_identity["Account"] == AWS_ACCOUNT_NUMBER
 
-    @mock_sts
-    @mock_iam
+    @mock_aws
     @patch(
         "botocore.client.BaseClient._make_api_call",
         new=mock_get_caller_identity_gov_cloud,
@@ -402,8 +393,7 @@ def test_validate_credentials_gov_cloud_partition(self):
         assert re.match("[0-9a-zA-Z]{20}", get_caller_identity["UserId"])
         assert get_caller_identity["Account"] == AWS_ACCOUNT_NUMBER
 
-    @mock_sts
-    @mock_iam
+    @mock_aws
     @patch(
         "botocore.client.BaseClient._make_api_call",
         new=mock_get_caller_identity_gov_cloud,
@@ -450,8 +440,7 @@ def test_validate_credentials_gov_cloud_partition_without_regions_but_sts_endpoi
         assert re.match("[0-9a-zA-Z]{20}", get_caller_identity["UserId"])
         assert get_caller_identity["Account"] == AWS_ACCOUNT_NUMBER
 
-    @mock_iam
-    @mock_sts
+    @mock_aws
     def test_create_sts_session(self):
         aws_region = "eu-west-1"
         # Create a mock IAM user
@@ -474,8 +463,7 @@ def test_create_sts_session(self):
         assert sts_client._endpoint._endpoint_prefix == "sts"
         assert sts_client._endpoint.host == f"https://sts.{aws_region}.amazonaws.com"
 
-    @mock_iam
-    @mock_sts
+    @mock_aws
     def test_create_sts_session_gov_cloud(self):
         aws_region = "us-gov-east-1"
         # Create a mock IAM user
@@ -498,8 +486,7 @@ def test_create_sts_session_gov_cloud(self):
         assert sts_client._endpoint._endpoint_prefix == "sts"
         assert sts_client._endpoint.host == f"https://sts.{aws_region}.amazonaws.com"
 
-    @mock_iam
-    @mock_sts
+    @mock_aws
     def test_create_sts_session_china(self):
         aws_region = "cn-north-1"
         # Create a mock IAM user
diff --git a/tests/providers/aws/lib/mutelist/mutelist_test.py b/tests/providers/aws/lib/mutelist/mutelist_test.py
index b4697c44de6..8aef3eb92a3 100644
--- a/tests/providers/aws/lib/mutelist/mutelist_test.py
+++ b/tests/providers/aws/lib/mutelist/mutelist_test.py
@@ -1,9 +1,8 @@
 import yaml
-from boto3 import resource, session
+from boto3 import resource
 from mock import MagicMock
-from moto import mock_dynamodb, mock_s3
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.lib.mutelist.mutelist import (
     is_excepted,
     is_muted,
@@ -14,50 +13,21 @@
     mutelist_findings,
     parse_mutelist_file,
 )
-from prowler.providers.common.models import Audit_Metadata
 from tests.providers.aws.audit_info_utils import (
     AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_CENTRAL_1,
+    AWS_REGION_EU_SOUTH_3,
     AWS_REGION_EU_WEST_1,
     AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
 )
 
 
-class Test_Mutelist:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
+class Test_Allowlist:
     # Test S3 mutelist
-    @mock_s3
+    @mock_aws
     def test_s3_mutelist(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         # Create bucket and upload mutelist yaml
         s3_resource = resource("s3", region_name=AWS_REGION_US_EAST_1)
         s3_resource.create_bucket(Bucket="test-mutelist")
@@ -74,9 +44,9 @@ def test_s3_mutelist(self):
             )
 
     # Test DynamoDB mutelist
-    @mock_dynamodb
+    @mock_aws
     def test_dynamo_mutelist(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         # Create table and put item
         dynamodb_resource = resource("dynamodb", region_name=AWS_REGION_US_EAST_1)
         table_name = "test-mutelist"
@@ -118,9 +88,9 @@ def test_dynamo_mutelist(self):
             )["Accounts"]["*"]["Checks"]["iam_user_hardware_mfa_enabled"]["Resources"]
         )
 
-    @mock_dynamodb
+    @mock_aws
     def test_dynamo_mutelist_with_tags(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         # Create table and put item
         dynamodb_resource = resource("dynamodb", region_name=AWS_REGION_US_EAST_1)
         table_name = "test-mutelist"
@@ -163,10 +133,9 @@ def test_dynamo_mutelist_with_tags(self):
             )["Accounts"]["*"]["Checks"]["*"]["Tags"]
         )
 
-    # Mutelist tests
-
-    def test_mutelist_findings(self):
-        # Mutelist example
+    # Allowlist tests
+    def test_mutelist_findings_only_wildcard(self):
+        # Allowlist example
         mutelist = {
             "Accounts": {
                 "*": {
@@ -196,6 +165,44 @@ def test_mutelist_findings(self):
         assert len(muted_findings) == 1
         assert muted_findings[0].status == "MUTED"
 
+    def test_mutelist_all_exceptions_empty(self):
+        # Allowlist example
+        mutelist = {
+            "Accounts": {
+                "*": {
+                    "Checks": {
+                        "*": {
+                            "Tags": ["*"],
+                            "Regions": [AWS_REGION_US_EAST_1],
+                            "Resources": ["*"],
+                            "Exceptions": {
+                                "Tags": [],
+                                "Regions": [],
+                                "Accounts": [],
+                                "Resources": [],
+                            },
+                        }
+                    }
+                }
+            }
+        }
+
+        # Check Findings
+        check_findings = []
+        finding_1 = MagicMock
+        finding_1.check_metadata = MagicMock
+        finding_1.check_metadata.CheckID = "check_test"
+        finding_1.status = "FAIL"
+        finding_1.region = AWS_REGION_US_EAST_1
+        finding_1.resource_id = "prowler"
+        finding_1.resource_tags = []
+
+        check_findings.append(finding_1)
+
+        muted_findings = mutelist_findings(mutelist, AWS_ACCOUNT_NUMBER, check_findings)
+        assert len(muted_findings) == 1
+        assert muted_findings[0].status == "WARNING"
+
     def test_is_muted_with_everything_excepted(self):
         mutelist = {
             "Accounts": {
@@ -235,12 +242,6 @@ def test_is_muted_with_default_mutelist(self):
                             "Tags": ["*"],
                             "Regions": ["*"],
                             "Resources": ["*"],
-                            "Exceptions": {
-                                "Tags": [],
-                                "Regions": [],
-                                "Accounts": [],
-                                "Resources": [],
-                            },
                         }
                     }
                 }
@@ -256,8 +257,41 @@ def test_is_muted_with_default_mutelist(self):
             "",
         )
 
+    def test_is_muted_with_default_mutelist_with_tags(self):
+        mutelist = {
+            "Accounts": {
+                "*": {
+                    "Checks": {
+                        "*": {
+                            "Regions": ["*"],
+                            "Resources": ["*"],
+                            "Tags": ["Compliance=allow"],
+                        }
+                    }
+                }
+            }
+        }
+
+        assert is_muted(
+            mutelist,
+            AWS_ACCOUNT_NUMBER,
+            "athena_1",
+            AWS_REGION_US_EAST_1,
+            "prowler",
+            "Compliance=allow",
+        )
+
+        assert not is_muted(
+            mutelist,
+            AWS_ACCOUNT_NUMBER,
+            "athena_1",
+            AWS_REGION_US_EAST_1,
+            "prowler",
+            "Compliance=deny",
+        )
+
     def test_is_muted(self):
-        # Mutelist example
+        # Allowlist example
         mutelist = {
             "Accounts": {
                 "*": {
@@ -474,6 +508,155 @@ def test_is_muted_all_and_single_account(self):
             )
         )
 
+    def test_is_muted_all_and_single_account_with_different_resources(self):
+        # Allowlist example
+        mutelist = {
+            "Accounts": {
+                "*": {
+                    "Checks": {
+                        "check_test_1": {
+                            "Regions": ["*"],
+                            "Resources": ["resource_1", "resource_2"],
+                        },
+                    }
+                },
+                AWS_ACCOUNT_NUMBER: {
+                    "Checks": {
+                        "check_test_1": {
+                            "Regions": ["*"],
+                            "Resources": ["resource_3"],
+                        }
+                    }
+                },
+            }
+        }
+
+        assert is_muted(
+            mutelist,
+            "111122223333",
+            "check_test_1",
+            AWS_REGION_US_EAST_1,
+            "resource_1",
+            "",
+        )
+
+        assert is_muted(
+            mutelist,
+            "111122223333",
+            "check_test_1",
+            AWS_REGION_US_EAST_1,
+            "resource_2",
+            "",
+        )
+
+        assert not is_muted(
+            mutelist,
+            "111122223333",
+            "check_test_1",
+            AWS_REGION_US_EAST_1,
+            "resource_3",
+            "",
+        )
+
+        assert is_muted(
+            mutelist,
+            AWS_ACCOUNT_NUMBER,
+            "check_test_1",
+            AWS_REGION_US_EAST_1,
+            "resource_3",
+            "",
+        )
+
+        assert is_muted(
+            mutelist,
+            AWS_ACCOUNT_NUMBER,
+            "check_test_1",
+            AWS_REGION_US_EAST_1,
+            "resource_2",
+            "",
+        )
+
+    def test_is_muted_all_and_single_account_with_different_resources_and_exceptions(
+        self,
+    ):
+        # Allowlist example
+        mutelist = {
+            "Accounts": {
+                "*": {
+                    "Checks": {
+                        "check_test_1": {
+                            "Regions": ["*"],
+                            "Resources": ["resource_1", "resource_2"],
+                            "Exceptions": {"Regions": [AWS_REGION_US_EAST_1]},
+                        },
+                    }
+                },
+                AWS_ACCOUNT_NUMBER: {
+                    "Checks": {
+                        "check_test_1": {
+                            "Regions": ["*"],
+                            "Resources": ["resource_3"],
+                            "Exceptions": {"Regions": [AWS_REGION_EU_WEST_1]},
+                        }
+                    }
+                },
+            }
+        }
+
+        assert not is_muted(
+            mutelist,
+            AWS_ACCOUNT_NUMBER,
+            "check_test_1",
+            AWS_REGION_US_EAST_1,
+            "resource_2",
+            "",
+        )
+
+        assert not is_muted(
+            mutelist,
+            "111122223333",
+            "check_test_1",
+            AWS_REGION_US_EAST_1,
+            "resource_1",
+            "",
+        )
+
+        assert is_muted(
+            mutelist,
+            "111122223333",
+            "check_test_1",
+            AWS_REGION_EU_WEST_1,
+            "resource_2",
+            "",
+        )
+
+        assert not is_muted(
+            mutelist,
+            "111122223333",
+            "check_test_1",
+            AWS_REGION_US_EAST_1,
+            "resource_3",
+            "",
+        )
+
+        assert is_muted(
+            mutelist,
+            AWS_ACCOUNT_NUMBER,
+            "check_test_1",
+            AWS_REGION_US_EAST_1,
+            "resource_3",
+            "",
+        )
+
+        assert not is_muted(
+            mutelist,
+            AWS_ACCOUNT_NUMBER,
+            "check_test_1",
+            AWS_REGION_EU_WEST_1,
+            "resource_3",
+            "",
+        )
+
     def test_is_muted_single_account(self):
         mutelist = {
             "Accounts": {
@@ -747,6 +930,111 @@ def test_is_muted_tags(self):
             )
         )
 
+    def test_is_muted_specific_account_with_other_account_excepted(self):
+        # Allowlist example
+        mutelist = {
+            "Accounts": {
+                AWS_ACCOUNT_NUMBER: {
+                    "Checks": {
+                        "check_test": {
+                            "Regions": [AWS_REGION_EU_WEST_1],
+                            "Resources": ["*"],
+                            "Tags": [],
+                            "Exceptions": {"Accounts": ["111122223333"]},
+                        }
+                    }
+                }
+            }
+        }
+
+        assert is_muted(
+            mutelist,
+            AWS_ACCOUNT_NUMBER,
+            "check_test",
+            AWS_REGION_EU_WEST_1,
+            "prowler",
+            "environment=dev",
+        )
+
+        assert not is_muted(
+            mutelist,
+            "111122223333",
+            "check_test",
+            AWS_REGION_EU_WEST_1,
+            "prowler",
+            "environment=dev",
+        )
+
+    def test_is_muted_complex_mutelist(self):
+        # Allowlist example
+        mutelist = {
+            "Accounts": {
+                "*": {
+                    "Checks": {
+                        "s3_bucket_object_versioning": {
+                            "Regions": [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+                            "Resources": ["ci-logs", "logs", ".+-logs"],
+                        },
+                        "ecs_task_definitions_no_environment_secrets": {
+                            "Regions": ["*"],
+                            "Resources": ["*"],
+                            "Exceptions": {
+                                "Accounts": [AWS_ACCOUNT_NUMBER],
+                                "Regions": [
+                                    AWS_REGION_EU_WEST_1,
+                                    AWS_REGION_EU_SOUTH_3,
+                                ],
+                            },
+                        },
+                        "*": {
+                            "Regions": ["*"],
+                            "Resources": ["*"],
+                            "Tags": ["environment=dev"],
+                        },
+                    }
+                },
+                AWS_ACCOUNT_NUMBER: {
+                    "Checks": {
+                        "*": {
+                            "Regions": ["*"],
+                            "Resources": ["*"],
+                            "Exceptions": {
+                                "Resources": ["test"],
+                                "Tags": ["environment=prod"],
+                            },
+                        }
+                    }
+                },
+            }
+        }
+
+        assert is_muted(
+            mutelist,
+            AWS_ACCOUNT_NUMBER,
+            "test_check",
+            AWS_REGION_EU_WEST_1,
+            "prowler-logs",
+            "environment=dev",
+        )
+
+        assert is_muted(
+            mutelist,
+            AWS_ACCOUNT_NUMBER,
+            "ecs_task_definitions_no_environment_secrets",
+            AWS_REGION_EU_WEST_1,
+            "prowler",
+            "environment=dev",
+        )
+
+        assert is_muted(
+            mutelist,
+            AWS_ACCOUNT_NUMBER,
+            "s3_bucket_object_versioning",
+            AWS_REGION_EU_WEST_1,
+            "prowler-logs",
+            "environment=dev",
+        )
+
     def test_is_muted_in_tags(self):
         mutelist_tags = ["environment=dev", "project=prowler"]
 
@@ -821,6 +1109,107 @@ def test_is_excepted(self):
             "environment=test",
         )
 
+    def test_is_excepted_only_in_account(self):
+        # Allowlist example
+        exceptions = {
+            "Accounts": [AWS_ACCOUNT_NUMBER],
+            "Regions": [],
+            "Resources": [],
+            "Tags": [],
+        }
+
+        assert is_excepted(
+            exceptions,
+            AWS_ACCOUNT_NUMBER,
+            "eu-central-1",
+            "test",
+            "environment=test",
+        )
+
+    def test_is_excepted_only_in_region(self):
+        # Allowlist example
+        exceptions = {
+            "Accounts": [],
+            "Regions": [AWS_REGION_EU_CENTRAL_1, AWS_REGION_EU_SOUTH_3],
+            "Resources": [],
+            "Tags": [],
+        }
+
+        assert is_excepted(
+            exceptions,
+            AWS_ACCOUNT_NUMBER,
+            AWS_REGION_EU_CENTRAL_1,
+            "test",
+            "environment=test",
+        )
+
+    def test_is_excepted_only_in_resources(self):
+        # Allowlist example
+        exceptions = {
+            "Accounts": [],
+            "Regions": [],
+            "Resources": ["resource_1"],
+            "Tags": [],
+        }
+
+        assert is_excepted(
+            exceptions,
+            AWS_ACCOUNT_NUMBER,
+            AWS_REGION_EU_CENTRAL_1,
+            "resource_1",
+            "environment=test",
+        )
+
+    def test_is_excepted_only_in_tags(self):
+        # Allowlist example
+        exceptions = {
+            "Accounts": [],
+            "Regions": [],
+            "Resources": [],
+            "Tags": ["environment=test"],
+        }
+
+        assert is_excepted(
+            exceptions,
+            AWS_ACCOUNT_NUMBER,
+            AWS_REGION_EU_CENTRAL_1,
+            "resource_1",
+            "environment=test",
+        )
+
+    def test_is_excepted_in_account_and_tags(self):
+        # Allowlist example
+        exceptions = {
+            "Accounts": [AWS_ACCOUNT_NUMBER],
+            "Regions": [],
+            "Resources": [],
+            "Tags": ["environment=test"],
+        }
+
+        assert is_excepted(
+            exceptions,
+            AWS_ACCOUNT_NUMBER,
+            AWS_REGION_EU_CENTRAL_1,
+            "resource_1",
+            "environment=test",
+        )
+
+        assert not is_excepted(
+            exceptions,
+            "111122223333",
+            AWS_REGION_EU_CENTRAL_1,
+            "resource_1",
+            "environment=test",
+        )
+
+        assert not is_excepted(
+            exceptions,
+            "111122223333",
+            AWS_REGION_EU_CENTRAL_1,
+            "resource_1",
+            "environment=dev",
+        )
+
     def test_is_excepted_all_wildcard(self):
         exceptions = {
             "Accounts": ["*"],
@@ -867,6 +1256,22 @@ def test_is_not_excepted(self):
             "environment=pro",
         )
 
+    def test_is_excepted_all_empty(self):
+        exceptions = {
+            "Accounts": [],
+            "Regions": [],
+            "Resources": [],
+            "Tags": [],
+        }
+
+        assert not is_excepted(
+            exceptions,
+            AWS_ACCOUNT_NUMBER,
+            "eu-south-2",
+            "test",
+            "environment=test",
+        )
+
     def test_is_muted_in_resource(self):
         mutelist_resources = ["prowler", "^test", "prowler-pro"]
 
diff --git a/tests/providers/aws/lib/organizations/organizations_test.py b/tests/providers/aws/lib/organizations/organizations_test.py
index 53953cfdf26..5a5fefe4f84 100644
--- a/tests/providers/aws/lib/organizations/organizations_test.py
+++ b/tests/providers/aws/lib/organizations/organizations_test.py
@@ -1,23 +1,25 @@
 import json
 
 import boto3
-from moto import mock_iam, mock_organizations, mock_sts
+from moto import mock_aws
 
+from prowler.providers.aws.lib.audit_info.models import AWS_Organizations_Info
 from prowler.providers.aws.lib.organizations.organizations import (
     get_organizations_metadata,
+    parse_organizations_metadata,
+)
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
 )
-
-AWS_ACCOUNT_NUMBER = "123456789012"
 
 
 class Test_AWS_Organizations:
-    @mock_organizations
-    @mock_sts
-    @mock_iam
+    @mock_aws
     def test_organizations(self):
-        client = boto3.client("organizations", region_name="us-east-1")
-        iam_client = boto3.client("iam", region_name="us-east-1")
-        sts_client = boto3.client("sts", region_name="us-east-1")
+        client = boto3.client("organizations", region_name=AWS_REGION_US_EAST_1)
+        iam_client = boto3.client("iam", region_name=AWS_REGION_US_EAST_1)
+        sts_client = boto3.client("sts", region_name=AWS_REGION_US_EAST_1)
 
         mockname = "mock-account"
         mockdomain = "moto-example.org"
@@ -49,7 +51,8 @@ def test_organizations(self):
             RoleArn=iam_role_arn, RoleSessionName=session_name
         )
 
-        org = get_organizations_metadata(account_id, assumed_role)
+        metadata, tags = get_organizations_metadata(account_id, assumed_role)
+        org = parse_organizations_metadata(metadata, tags)
 
         assert org.account_details_email == mockemail
         assert org.account_details_name == mockname
@@ -58,4 +61,26 @@ def test_organizations(self):
             == f"arn:aws:organizations::{AWS_ACCOUNT_NUMBER}:account/{org_id}/{account_id}"
         )
         assert org.account_details_org == org_id
-        assert org.account_details_tags == "key:value,"
+        assert org.account_details_tags == "key:value"
+
+    def test_parse_organizations_metadata(self):
+        tags = {"Tags": [{"Key": "test-key", "Value": "test-value"}]}
+        name = "test-name"
+        email = "test-email"
+        organization_name = "test-org"
+        arn = f"arn:aws:organizations::{AWS_ACCOUNT_NUMBER}:organization/{organization_name}"
+        metadata = {
+            "Account": {
+                "Name": name,
+                "Email": email,
+                "Arn": arn,
+            }
+        }
+        org = parse_organizations_metadata(metadata, tags)
+
+        assert isinstance(org, AWS_Organizations_Info)
+        assert org.account_details_email == email
+        assert org.account_details_name == name
+        assert org.account_details_arn == arn
+        assert org.account_details_org == organization_name
+        assert org.account_details_tags == "test-key:test-value"
diff --git a/tests/providers/aws/lib/policy_condition_parser/policy_condition_parser_test.py b/tests/providers/aws/lib/policy_condition_parser/policy_condition_parser_test.py
index 4e8e71ccecb..c7b000b5d69 100644
--- a/tests/providers/aws/lib/policy_condition_parser/policy_condition_parser_test.py
+++ b/tests/providers/aws/lib/policy_condition_parser/policy_condition_parser_test.py
@@ -1,5 +1,5 @@
 from prowler.providers.aws.lib.policy_condition_parser.policy_condition_parser import (
-    is_account_only_allowed_in_condition,
+    is_condition_block_restrictive,
 )
 
 TRUSTED_AWS_ACCOUNT_NUMBER = "123456789012"
@@ -12,7 +12,7 @@ def test_condition_parser_string_equals_aws_SourceAccount_list(self):
         condition_statement = {
             "StringEquals": {"aws:SourceAccount": [TRUSTED_AWS_ACCOUNT_NUMBER]}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -25,7 +25,7 @@ def test_condition_parser_string_equals_aws_SourceAccount_list_not_valid(self):
                 ]
             }
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -33,7 +33,7 @@ def test_condition_parser_string_equals_aws_SourceAccount_str(self):
         condition_statement = {
             "StringEquals": {"aws:SourceAccount": TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -41,7 +41,7 @@ def test_condition_parser_string_equals_aws_SourceAccount_str_not_valid(self):
         condition_statement = {
             "StringEquals": {"aws:SourceAccount": NON_TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -49,7 +49,7 @@ def test_condition_parser_string_like_aws_SourceAccount_list(self):
         condition_statement = {
             "StringLike": {"aws:SourceAccount": [TRUSTED_AWS_ACCOUNT_NUMBER]}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -62,7 +62,7 @@ def test_condition_parser_string_like_aws_SourceAccount_list_not_valid(self):
                 ]
             }
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -70,7 +70,7 @@ def test_condition_parser_string_like_aws_SourceAccount_str(self):
         condition_statement = {
             "StringLike": {"aws:SourceAccount": TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -78,7 +78,7 @@ def test_condition_parser_string_like_aws_SourceAccount_str_not_valid(self):
         condition_statement = {
             "StringLike": {"aws:SourceAccount": NON_TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -86,7 +86,7 @@ def test_condition_parser_string_equals_aws_SourceOwner_str(self):
         condition_statement = {
             "StringEquals": {"aws:SourceOwner": TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -94,7 +94,7 @@ def test_condition_parser_string_equals_aws_SourceOwner_str_not_valid(self):
         condition_statement = {
             "StringEquals": {"aws:SourceOwner": NON_TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -102,7 +102,7 @@ def test_condition_parser_string_equals_aws_SourceOwner_list(self):
         condition_statement = {
             "StringEquals": {"aws:SourceOwner": [TRUSTED_AWS_ACCOUNT_NUMBER]}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -115,7 +115,7 @@ def test_condition_parser_string_equals_aws_SourceOwner_list_not_valid(self):
                 ]
             }
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -123,7 +123,7 @@ def test_condition_parser_string_like_aws_SourceOwner_list(self):
         condition_statement = {
             "StringLike": {"aws:SourceOwner": [TRUSTED_AWS_ACCOUNT_NUMBER]}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -136,7 +136,7 @@ def test_condition_parser_string_like_aws_SourceOwner_list_not_valid(self):
                 ]
             }
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -144,7 +144,7 @@ def test_condition_parser_string_like_aws_SourceOwner_str(self):
         condition_statement = {
             "StringLike": {"aws:SourceOwner": TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -152,7 +152,7 @@ def test_condition_parser_string_like_aws_SourceOwner_str_not_valid(self):
         condition_statement = {
             "StringLike": {"aws:SourceOwner": NON_TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -160,7 +160,7 @@ def test_condition_parser_string_equals_s3_ResourceAccount_list(self):
         condition_statement = {
             "StringEquals": {"s3:ResourceAccount": [TRUSTED_AWS_ACCOUNT_NUMBER]}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -173,7 +173,7 @@ def test_condition_parser_string_equals_s3_ResourceAccount_list_not_valid(self):
                 ]
             }
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -181,7 +181,7 @@ def test_condition_parser_string_equals_s3_ResourceAccount_str(self):
         condition_statement = {
             "StringEquals": {"s3:ResourceAccount": TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -189,7 +189,7 @@ def test_condition_parser_string_equals_s3_ResourceAccount_str_not_valid(self):
         condition_statement = {
             "StringEquals": {"s3:ResourceAccount": NON_TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -197,7 +197,7 @@ def test_condition_parser_string_equals_aws_PrincipalAccount_list(self):
         condition_statement = {
             "StringEquals": {"aws:PrincipalAccount": [TRUSTED_AWS_ACCOUNT_NUMBER]}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -210,7 +210,7 @@ def test_condition_parser_string_equals_aws_PrincipalAccount_list_not_valid(self
                 ]
             }
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -218,7 +218,7 @@ def test_condition_parser_string_equals_aws_PrincipalAccount_str(self):
         condition_statement = {
             "StringEquals": {"aws:PrincipalAccount": TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -226,7 +226,7 @@ def test_condition_parser_string_equals_aws_PrincipalAccount_str_not_valid(self)
         condition_statement = {
             "StringEquals": {"aws:PrincipalAccount": NON_TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -236,7 +236,7 @@ def test_condition_parser_string_equals_aws_SourceArn_str(self):
                 "aws:SourceArn": f"arn:aws:cloudtrail:*:{TRUSTED_AWS_ACCOUNT_NUMBER}:trail/*"
             }
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -246,7 +246,7 @@ def test_condition_parser_string_equals_aws_SourceArn_str_not_valid(self):
                 "aws:SourceArn": f"arn:aws:cloudtrail:*:{NON_TRUSTED_AWS_ACCOUNT_NUMBER}:trail/*"
             }
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -254,7 +254,7 @@ def test_condition_parser_string_like_aws_PrincipalAccount_list(self):
         condition_statement = {
             "StringLike": {"aws:PrincipalAccount": [TRUSTED_AWS_ACCOUNT_NUMBER]}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -267,7 +267,7 @@ def test_condition_parser_string_like_aws_PrincipalAccount_list_not_valid(self):
                 ]
             }
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -275,7 +275,7 @@ def test_condition_parser_string_like_aws_PrincipalAccount_str(self):
         condition_statement = {
             "StringLike": {"aws:PrincipalAccount": TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -283,7 +283,7 @@ def test_condition_parser_string_like_aws_PrincipalAccount_str_not_valid(self):
         condition_statement = {
             "StringLike": {"aws:PrincipalAccount": NON_TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -296,7 +296,7 @@ def test_condition_parser_arn_like_aws_SourceArn_list(self):
             }
         }
 
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -310,7 +310,7 @@ def test_condition_parser_arn_like_aws_SourceArn_list_not_valid(self):
             }
         }
 
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -321,7 +321,7 @@ def test_condition_parser_arn_like_aws_SourceArn_str(self):
             }
         }
 
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -332,7 +332,7 @@ def test_condition_parser_arn_like_aws_SourceArn_str_not_valid(self):
             }
         }
 
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -345,7 +345,7 @@ def test_condition_parser_arn_like_aws_PrincipalArn_list(self):
             }
         }
 
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -359,7 +359,7 @@ def test_condition_parser_arn_like_aws_PrincipalArn_list_not_valid(self):
             }
         }
 
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -370,7 +370,7 @@ def test_condition_parser_arn_like_aws_PrincipalArn_str(self):
             }
         }
 
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -381,7 +381,7 @@ def test_condition_parser_arn_like_aws_PrincipalArn_str_not_valid(self):
             }
         }
 
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -394,7 +394,7 @@ def test_condition_parser_arn_equals_aws_SourceArn_list(self):
             }
         }
 
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -408,7 +408,7 @@ def test_condition_parser_arn_equals_aws_SourceArn_list_not_valid(self):
             }
         }
 
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -419,7 +419,7 @@ def test_condition_parser_arn_equals_aws_SourceArn_str(self):
             }
         }
 
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -430,7 +430,7 @@ def test_condition_parser_arn_equals_aws_SourceArn_str_not_valid(self):
             }
         }
 
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -443,7 +443,7 @@ def test_condition_parser_arn_equals_aws_PrincipalArn_list(self):
             }
         }
 
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -457,7 +457,7 @@ def test_condition_parser_arn_equals_aws_PrincipalArn_list_not_valid(self):
             }
         }
 
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -468,7 +468,7 @@ def test_condition_parser_arn_equals_aws_PrincipalArn_str(self):
             }
         }
 
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -479,7 +479,7 @@ def test_condition_parser_arn_equals_aws_PrincipalArn_str_not_valid(self):
             }
         }
 
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -492,7 +492,7 @@ def test_condition_parser_string_like_aws_SourceArn_list(self):
             }
         }
 
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -506,7 +506,7 @@ def test_condition_parser_string_like_aws_SourceArn_list_not_valid(self):
             }
         }
 
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -517,7 +517,7 @@ def test_condition_parser_string_like_aws_SourceArn_str(self):
             }
         }
 
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -528,7 +528,7 @@ def test_condition_parser_string_like_aws_SourceArn_str_not_valid(self):
             }
         }
 
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -541,7 +541,7 @@ def test_condition_parser_string_like_aws_PrincipalArn_list(self):
             }
         }
 
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -555,7 +555,7 @@ def test_condition_parser_string_like_aws_PrincipalArn_list_not_valid(self):
             }
         }
 
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -566,7 +566,7 @@ def test_condition_parser_string_like_aws_PrincipalArn_str(self):
             }
         }
 
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -577,7 +577,7 @@ def test_condition_parser_string_like_aws_PrincipalArn_str_not_valid(self):
             }
         }
 
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -585,7 +585,7 @@ def test_condition_parser_string_equals_aws_ResourceAccount_list(self):
         condition_statement = {
             "StringEquals": {"aws:ResourceAccount": [TRUSTED_AWS_ACCOUNT_NUMBER]}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -598,7 +598,7 @@ def test_condition_parser_string_equals_aws_ResourceAccount_list_not_valid(self)
                 ]
             }
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -606,7 +606,7 @@ def test_condition_parser_string_equals_aws_ResourceAccount_str(self):
         condition_statement = {
             "StringEquals": {"aws:ResourceAccount": TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -614,7 +614,7 @@ def test_condition_parser_string_equals_aws_ResourceAccount_str_not_valid(self):
         condition_statement = {
             "StringEquals": {"aws:ResourceAccount": NON_TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -622,7 +622,7 @@ def test_condition_parser_string_like_aws_ResourceAccount_list(self):
         condition_statement = {
             "StringLike": {"aws:ResourceAccount": [TRUSTED_AWS_ACCOUNT_NUMBER]}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -635,7 +635,7 @@ def test_condition_parser_string_like_aws_ResourceAccount_list_not_valid(self):
                 ]
             }
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -643,7 +643,7 @@ def test_condition_parser_string_like_aws_ResourceAccount_str(self):
         condition_statement = {
             "StringLike": {"aws:ResourceAccount": TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -651,7 +651,7 @@ def test_condition_parser_string_like_aws_ResourceAccount_str_not_valid(self):
         condition_statement = {
             "StringLike": {"aws:ResourceAccount": NON_TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -660,7 +660,7 @@ def test_condition_parser_string_equals_AWS_SourceAccount_list(self):
         condition_statement = {
             "StringEquals": {"AWS:SourceAccount": [TRUSTED_AWS_ACCOUNT_NUMBER]}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -673,7 +673,7 @@ def test_condition_parser_string_equals_AWS_SourceAccount_list_not_valid(self):
                 ]
             }
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -681,7 +681,7 @@ def test_condition_parser_string_equals_AWS_SourceAccount_str(self):
         condition_statement = {
             "StringEquals": {"AWS:SourceAccount": TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -689,7 +689,7 @@ def test_condition_parser_string_equals_AWS_SourceAccount_str_not_valid(self):
         condition_statement = {
             "StringEquals": {"AWS:SourceAccount": NON_TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -697,7 +697,7 @@ def test_condition_parser_string_like_AWS_SourceAccount_list(self):
         condition_statement = {
             "StringLike": {"AWS:SourceAccount": [TRUSTED_AWS_ACCOUNT_NUMBER]}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -710,7 +710,7 @@ def test_condition_parser_string_like_AWS_SourceAccount_list_not_valid(self):
                 ]
             }
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -718,7 +718,7 @@ def test_condition_parser_string_like_AWS_SourceAccount_str(self):
         condition_statement = {
             "StringLike": {"AWS:SourceAccount": TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -726,7 +726,7 @@ def test_condition_parser_string_like_AWS_SourceAccount_str_not_valid(self):
         condition_statement = {
             "StringLike": {"AWS:SourceAccount": NON_TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -734,7 +734,7 @@ def test_condition_parser_string_equals_AWS_SourceOwner_str(self):
         condition_statement = {
             "StringEquals": {"AWS:SourceOwner": TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -742,7 +742,7 @@ def test_condition_parser_string_equals_AWS_SourceOwner_str_not_valid(self):
         condition_statement = {
             "StringEquals": {"AWS:SourceOwner": NON_TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -750,7 +750,7 @@ def test_condition_parser_string_equals_AWS_SourceOwner_list(self):
         condition_statement = {
             "StringEquals": {"AWS:SourceOwner": [TRUSTED_AWS_ACCOUNT_NUMBER]}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -763,7 +763,7 @@ def test_condition_parser_string_equals_AWS_SourceOwner_list_not_valid(self):
                 ]
             }
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -771,7 +771,7 @@ def test_condition_parser_string_like_AWS_SourceOwner_list(self):
         condition_statement = {
             "StringLike": {"AWS:SourceOwner": [TRUSTED_AWS_ACCOUNT_NUMBER]}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -784,7 +784,7 @@ def test_condition_parser_string_like_AWS_SourceOwner_list_not_valid(self):
                 ]
             }
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -792,7 +792,7 @@ def test_condition_parser_string_like_AWS_SourceOwner_str(self):
         condition_statement = {
             "StringLike": {"AWS:SourceOwner": TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -800,7 +800,7 @@ def test_condition_parser_string_like_AWS_SourceOwner_str_not_valid(self):
         condition_statement = {
             "StringLike": {"AWS:SourceOwner": NON_TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -808,7 +808,7 @@ def test_condition_parser_string_equals_S3_ResourceAccount_list(self):
         condition_statement = {
             "StringEquals": {"S3:ResourceAccount": [TRUSTED_AWS_ACCOUNT_NUMBER]}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -821,7 +821,7 @@ def test_condition_parser_string_equals_S3_ResourceAccount_list_not_valid(self):
                 ]
             }
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -829,7 +829,7 @@ def test_condition_parser_string_equals_S3_ResourceAccount_str(self):
         condition_statement = {
             "StringEquals": {"S3:ResourceAccount": TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -837,7 +837,7 @@ def test_condition_parser_string_equals_S3_ResourceAccount_str_not_valid(self):
         condition_statement = {
             "StringEquals": {"S3:ResourceAccount": NON_TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -845,7 +845,7 @@ def test_condition_parser_string_equals_AWS_PrincipalAccount_list(self):
         condition_statement = {
             "StringEquals": {"AWS:PrincipalAccount": [TRUSTED_AWS_ACCOUNT_NUMBER]}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -858,7 +858,7 @@ def test_condition_parser_string_equals_AWS_PrincipalAccount_list_not_valid(self
                 ]
             }
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -866,7 +866,7 @@ def test_condition_parser_string_equals_AWS_PrincipalAccount_str(self):
         condition_statement = {
             "StringEquals": {"AWS:PrincipalAccount": TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -874,7 +874,7 @@ def test_condition_parser_string_equals_AWS_PrincipalAccount_str_not_valid(self)
         condition_statement = {
             "StringEquals": {"AWS:PrincipalAccount": NON_TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -882,7 +882,7 @@ def test_condition_parser_string_like_AWS_PrincipalAccount_list(self):
         condition_statement = {
             "StringLike": {"AWS:PrincipalAccount": [TRUSTED_AWS_ACCOUNT_NUMBER]}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -895,7 +895,7 @@ def test_condition_parser_string_like_AWS_PrincipalAccount_list_not_valid(self):
                 ]
             }
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -903,7 +903,7 @@ def test_condition_parser_string_like_AWS_PrincipalAccount_str(self):
         condition_statement = {
             "StringLike": {"AWS:PrincipalAccount": TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -911,7 +911,7 @@ def test_condition_parser_string_like_AWS_PrincipalAccount_str_not_valid(self):
         condition_statement = {
             "StringLike": {"AWS:PrincipalAccount": NON_TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -924,7 +924,7 @@ def test_condition_parser_arn_like_AWS_SourceArn_list(self):
             }
         }
 
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -938,7 +938,7 @@ def test_condition_parser_arn_like_AWS_SourceArn_list_not_valid(self):
             }
         }
 
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -949,7 +949,7 @@ def test_condition_parser_arn_like_AWS_SourceArn_str(self):
             }
         }
 
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -960,7 +960,7 @@ def test_condition_parser_arn_like_AWS_SourceArn_str_not_valid(self):
             }
         }
 
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -973,7 +973,7 @@ def test_condition_parser_arn_like_AWS_PrincipalArn_list(self):
             }
         }
 
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -987,7 +987,7 @@ def test_condition_parser_arn_like_AWS_PrincipalArn_list_not_valid(self):
             }
         }
 
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -998,7 +998,7 @@ def test_condition_parser_arn_like_AWS_PrincipalArn_str(self):
             }
         }
 
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -1009,7 +1009,7 @@ def test_condition_parser_arn_like_AWS_PrincipalArn_str_not_valid(self):
             }
         }
 
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -1022,7 +1022,7 @@ def test_condition_parser_arn_equals_AWS_SourceArn_list(self):
             }
         }
 
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -1036,7 +1036,7 @@ def test_condition_parser_arn_equals_AWS_SourceArn_list_not_valid(self):
             }
         }
 
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -1047,7 +1047,7 @@ def test_condition_parser_arn_equals_AWS_SourceArn_str(self):
             }
         }
 
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -1058,7 +1058,7 @@ def test_condition_parser_arn_equals_AWS_SourceArn_str_not_valid(self):
             }
         }
 
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -1071,7 +1071,7 @@ def test_condition_parser_arn_equals_AWS_PrincipalArn_list(self):
             }
         }
 
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -1085,7 +1085,7 @@ def test_condition_parser_arn_equals_AWS_PrincipalArn_list_not_valid(self):
             }
         }
 
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -1096,7 +1096,7 @@ def test_condition_parser_arn_equals_AWS_PrincipalArn_str(self):
             }
         }
 
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -1107,7 +1107,7 @@ def test_condition_parser_arn_equals_AWS_PrincipalArn_str_not_valid(self):
             }
         }
 
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -1120,7 +1120,7 @@ def test_condition_parser_string_like_AWS_SourceArn_list(self):
             }
         }
 
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -1134,7 +1134,7 @@ def test_condition_parser_string_like_AWS_SourceArn_list_not_valid(self):
             }
         }
 
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -1145,7 +1145,7 @@ def test_condition_parser_string_like_AWS_SourceArn_str(self):
             }
         }
 
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -1156,7 +1156,7 @@ def test_condition_parser_string_like_AWS_SourceArn_str_not_valid(self):
             }
         }
 
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -1169,7 +1169,7 @@ def test_condition_parser_string_like_AWS_PrincipalArn_list(self):
             }
         }
 
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -1183,7 +1183,7 @@ def test_condition_parser_string_like_AWS_PrincipalArn_list_not_valid(self):
             }
         }
 
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -1194,7 +1194,7 @@ def test_condition_parser_string_like_AWS_PrincipalArn_str(self):
             }
         }
 
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -1205,7 +1205,7 @@ def test_condition_parser_string_like_AWS_PrincipalArn_str_not_valid(self):
             }
         }
 
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -1213,7 +1213,7 @@ def test_condition_parser_string_equals_AWS_ResourceAccount_list(self):
         condition_statement = {
             "StringEquals": {"AWS:ResourceAccount": [TRUSTED_AWS_ACCOUNT_NUMBER]}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -1226,7 +1226,7 @@ def test_condition_parser_string_equals_AWS_ResourceAccount_list_not_valid(self)
                 ]
             }
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -1234,7 +1234,7 @@ def test_condition_parser_string_equals_AWS_ResourceAccount_str(self):
         condition_statement = {
             "StringEquals": {"AWS:ResourceAccount": TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -1242,7 +1242,7 @@ def test_condition_parser_string_equals_AWS_ResourceAccount_str_not_valid(self):
         condition_statement = {
             "StringEquals": {"AWS:ResourceAccount": NON_TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -1250,7 +1250,7 @@ def test_condition_parser_string_like_AWS_ResourceAccount_list(self):
         condition_statement = {
             "StringLike": {"AWS:ResourceAccount": [TRUSTED_AWS_ACCOUNT_NUMBER]}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -1263,7 +1263,7 @@ def test_condition_parser_string_like_AWS_ResourceAccount_list_not_valid(self):
                 ]
             }
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -1271,7 +1271,7 @@ def test_condition_parser_string_like_AWS_ResourceAccount_str(self):
         condition_statement = {
             "StringLike": {"AWS:ResourceAccount": TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -1279,7 +1279,7 @@ def test_condition_parser_string_like_AWS_ResourceAccount_str_not_valid(self):
         condition_statement = {
             "StringLike": {"AWS:ResourceAccount": NON_TRUSTED_AWS_ACCOUNT_NUMBER}
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -1298,7 +1298,7 @@ def test_condition_parser_two_lists_unrestrictive(self):
                 ]
             },
         }
-        assert not is_account_only_allowed_in_condition(
+        assert not is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -1315,7 +1315,7 @@ def test_condition_parser_two_lists_both_restrictive(self):
                 ]
             },
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -1333,7 +1333,7 @@ def test_condition_parser_two_lists_first_restrictive(self):
                 ]
             },
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
 
@@ -1351,6 +1351,18 @@ def test_condition_parser_two_lists_second_restrictive(self):
                 ]
             },
         }
-        assert is_account_only_allowed_in_condition(
+        assert is_condition_block_restrictive(
             condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER
         )
+
+    def test_condition_parser_allowing_cross_account_with_invalid_block(self):
+        condition_statement = {
+            "StringLike": {
+                "s3:prefix": [
+                    "home/",
+                ]
+            },
+        }
+        assert not is_condition_block_restrictive(
+            condition_statement, TRUSTED_AWS_ACCOUNT_NUMBER, True
+        )
diff --git a/tests/providers/aws/lib/s3/s3_test.py b/tests/providers/aws/lib/s3/s3_test.py
index 7f82c3954cb..454d83a256d 100644
--- a/tests/providers/aws/lib/s3/s3_test.py
+++ b/tests/providers/aws/lib/s3/s3_test.py
@@ -3,7 +3,7 @@
 
 import boto3
 from mock import MagicMock
-from moto import mock_s3
+from moto import mock_aws
 
 from prowler.config.config import csv_file_suffix
 from prowler.providers.aws.lib.s3.s3 import get_s3_object_path, send_to_s3_bucket
@@ -21,7 +21,7 @@
 
 
 class TestS3:
-    @mock_s3
+    @mock_aws
     def test_send_to_s3_bucket(self):
         # Mock Audit Info
         audit_info = MagicMock()
@@ -60,7 +60,7 @@ def test_send_to_s3_bucket(self):
             == "binary/octet-stream"
         )
 
-    @mock_s3
+    @mock_aws
     def test_send_to_s3_bucket_compliance(self):
         # Mock Audit Info
         audit_info = MagicMock()
diff --git a/tests/providers/aws/lib/security_hub/security_hub_test.py b/tests/providers/aws/lib/security_hub/security_hub_test.py
index 762a418241b..c4e47b21a43 100644
--- a/tests/providers/aws/lib/security_hub/security_hub_test.py
+++ b/tests/providers/aws/lib/security_hub/security_hub_test.py
@@ -1,7 +1,9 @@
+from logging import ERROR, WARNING
 from os import path
 
 import botocore
 from boto3 import session
+from botocore.client import ClientError
 from mock import MagicMock, patch
 
 from prowler.config.config import prowler_version, timestamp_utc
@@ -21,6 +23,49 @@
     set_mocked_aws_audit_info,
 )
 
+
+def get_security_hub_finding(status: str):
+    return {
+        "SchemaVersion": "2018-10-08",
+        "Id": f"prowler-iam_user_accesskey_unused-{AWS_ACCOUNT_NUMBER}-{AWS_REGION_EU_WEST_1}-ee26b0dd4",
+        "ProductArn": f"arn:aws:securityhub:{AWS_REGION_EU_WEST_1}::product/prowler/prowler",
+        "RecordState": "ACTIVE",
+        "ProductFields": {
+            "ProviderName": "Prowler",
+            "ProviderVersion": prowler_version,
+            "ProwlerResourceName": "test",
+        },
+        "GeneratorId": "prowler-iam_user_accesskey_unused",
+        "AwsAccountId": f"{AWS_ACCOUNT_NUMBER}",
+        "Types": ["Software and Configuration Checks"],
+        "FirstObservedAt": timestamp_utc.strftime("%Y-%m-%dT%H:%M:%SZ"),
+        "UpdatedAt": timestamp_utc.strftime("%Y-%m-%dT%H:%M:%SZ"),
+        "CreatedAt": timestamp_utc.strftime("%Y-%m-%dT%H:%M:%SZ"),
+        "Severity": {"Label": "LOW"},
+        "Title": "Ensure Access Keys unused are disabled",
+        "Description": "test",
+        "Resources": [
+            {
+                "Type": "AwsIamAccessAnalyzer",
+                "Id": "test",
+                "Partition": "aws",
+                "Region": f"{AWS_REGION_EU_WEST_1}",
+            }
+        ],
+        "Compliance": {
+            "Status": status,
+            "RelatedRequirements": [],
+            "AssociatedStandards": [],
+        },
+        "Remediation": {
+            "Recommendation": {
+                "Text": "Run sudo yum update and cross your fingers and toes.",
+                "Url": "https://myfp.com/recommendations/dangerous_things_and_how_to_fix_them.html",
+            }
+        },
+    }
+
+
 # Mocking Security Hub Get Findings
 make_api_call = botocore.client.BaseClient._make_api_call
 
@@ -64,10 +109,13 @@ def generate_finding(self, status, region):
 
         return finding
 
-    def set_mocked_output_options(self, is_quiet):
+    def set_mocked_output_options(
+        self, is_quiet: bool = False, send_sh_only_fails: bool = False
+    ):
         output_options = MagicMock
         output_options.bulk_checks_metadata = {}
         output_options.is_quiet = is_quiet
+        output_options.send_sh_only_fails = send_sh_only_fails
 
         return output_options
 
@@ -84,6 +132,126 @@ def test_verify_security_hub_integration_enabled_per_region(self):
             AWS_COMMERCIAL_PARTITION, AWS_REGION_EU_WEST_1, session, AWS_ACCOUNT_NUMBER
         )
 
+    def test_verify_security_hub_integration_enabled_per_region_security_hub_disabled(
+        self, caplog
+    ):
+        caplog.set_level(WARNING)
+        session = self.set_mocked_session(AWS_REGION_EU_WEST_1)
+
+        with patch(
+            "prowler.providers.aws.lib.security_hub.security_hub.session.Session.client",
+        ) as mock_security_hub:
+            error_message = f"Account {AWS_ACCOUNT_NUMBER} is not subscribed to AWS Security Hub in region {AWS_REGION_EU_WEST_1}"
+            error_code = "InvalidAccessException"
+            error_response = {
+                "Error": {
+                    "Code": error_code,
+                    "Message": error_message,
+                }
+            }
+            operation_name = "DescribeHub"
+            mock_security_hub.side_effect = ClientError(error_response, operation_name)
+
+            assert not verify_security_hub_integration_enabled_per_region(
+                AWS_COMMERCIAL_PARTITION,
+                AWS_REGION_EU_WEST_1,
+                session,
+                AWS_ACCOUNT_NUMBER,
+            )
+            assert caplog.record_tuples == [
+                (
+                    "root",
+                    WARNING,
+                    f"ClientError -- [68]: An error occurred ({error_code}) when calling the {operation_name} operation: {error_message}",
+                )
+            ]
+
+    def test_verify_security_hub_integration_enabled_per_region_prowler_not_subscribed(
+        self, caplog
+    ):
+        caplog.set_level(WARNING)
+        session = self.set_mocked_session(AWS_REGION_EU_WEST_1)
+
+        with patch(
+            "prowler.providers.aws.lib.security_hub.security_hub.session.Session.client",
+        ) as mock_security_hub:
+            mock_security_hub.describe_hub.return_value = None
+            mock_security_hub.list_enabled_products_for_import.return_value = []
+
+            assert not verify_security_hub_integration_enabled_per_region(
+                AWS_COMMERCIAL_PARTITION,
+                AWS_REGION_EU_WEST_1,
+                session,
+                AWS_ACCOUNT_NUMBER,
+            )
+            assert caplog.record_tuples == [
+                (
+                    "root",
+                    WARNING,
+                    f"Security Hub is enabled in {AWS_REGION_EU_WEST_1} but Prowler integration does not accept findings. More info: https://docs.prowler.cloud/en/latest/tutorials/aws/securityhub/",
+                )
+            ]
+
+    def test_verify_security_hub_integration_enabled_per_region_another_ClientError(
+        self, caplog
+    ):
+        caplog.set_level(WARNING)
+        session = self.set_mocked_session(AWS_REGION_EU_WEST_1)
+
+        with patch(
+            "prowler.providers.aws.lib.security_hub.security_hub.session.Session.client",
+        ) as mock_security_hub:
+            error_message = f"Another exception in region {AWS_REGION_EU_WEST_1}"
+            error_code = "AnotherException"
+            error_response = {
+                "Error": {
+                    "Code": error_code,
+                    "Message": error_message,
+                }
+            }
+            operation_name = "DescribeHub"
+            mock_security_hub.side_effect = ClientError(error_response, operation_name)
+
+            assert not verify_security_hub_integration_enabled_per_region(
+                AWS_COMMERCIAL_PARTITION,
+                AWS_REGION_EU_WEST_1,
+                session,
+                AWS_ACCOUNT_NUMBER,
+            )
+            assert caplog.record_tuples == [
+                (
+                    "root",
+                    ERROR,
+                    f"ClientError -- [68]: An error occurred ({error_code}) when calling the {operation_name} operation: {error_message}",
+                )
+            ]
+
+    def test_verify_security_hub_integration_enabled_per_region_another_Exception(
+        self, caplog
+    ):
+        caplog.set_level(WARNING)
+        session = self.set_mocked_session(AWS_REGION_EU_WEST_1)
+
+        with patch(
+            "prowler.providers.aws.lib.security_hub.security_hub.session.Session.client",
+        ) as mock_security_hub:
+            error_message = f"Another exception in region {AWS_REGION_EU_WEST_1}"
+            mock_security_hub.side_effect = Exception(error_message)
+
+            assert not verify_security_hub_integration_enabled_per_region(
+                AWS_COMMERCIAL_PARTITION,
+                AWS_REGION_EU_WEST_1,
+                session,
+                AWS_ACCOUNT_NUMBER,
+            )
+            assert caplog.record_tuples == [
+                (
+                    "root",
+                    ERROR,
+                    f"Exception -- [68]: {error_message}",
+                )
+            ]
+
     def test_prepare_security_hub_findings_enabled_region_not_quiet(self):
         enabled_regions = [AWS_REGION_EU_WEST_1]
         output_options = self.set_mocked_output_options(is_quiet=False)
@@ -98,53 +266,13 @@ def test_prepare_security_hub_findings_enabled_region_not_quiet(self):
             output_options,
             enabled_regions,
         ) == {
-            AWS_REGION_EU_WEST_1: [
-                {
-                    "SchemaVersion": "2018-10-08",
-                    "Id": f"prowler-iam_user_accesskey_unused-{AWS_ACCOUNT_NUMBER}-{AWS_REGION_EU_WEST_1}-ee26b0dd4",
-                    "ProductArn": f"arn:aws:securityhub:{AWS_REGION_EU_WEST_1}::product/prowler/prowler",
-                    "RecordState": "ACTIVE",
-                    "ProductFields": {
-                        "ProviderName": "Prowler",
-                        "ProviderVersion": prowler_version,
-                        "ProwlerResourceName": "test",
-                    },
-                    "GeneratorId": "prowler-iam_user_accesskey_unused",
-                    "AwsAccountId": f"{AWS_ACCOUNT_NUMBER}",
-                    "Types": ["Software and Configuration Checks"],
-                    "FirstObservedAt": timestamp_utc.strftime("%Y-%m-%dT%H:%M:%SZ"),
-                    "UpdatedAt": timestamp_utc.strftime("%Y-%m-%dT%H:%M:%SZ"),
-                    "CreatedAt": timestamp_utc.strftime("%Y-%m-%dT%H:%M:%SZ"),
-                    "Severity": {"Label": "LOW"},
-                    "Title": "Ensure Access Keys unused are disabled",
-                    "Description": "test",
-                    "Resources": [
-                        {
-                            "Type": "AwsIamAccessAnalyzer",
-                            "Id": "test",
-                            "Partition": "aws",
-                            "Region": f"{AWS_REGION_EU_WEST_1}",
-                        }
-                    ],
-                    "Compliance": {
-                        "Status": "PASSED",
-                        "RelatedRequirements": [],
-                        "AssociatedStandards": [],
-                    },
-                    "Remediation": {
-                        "Recommendation": {
-                            "Text": "Run sudo yum update and cross your fingers and toes.",
-                            "Url": "https://myfp.com/recommendations/dangerous_things_and_how_to_fix_them.html",
-                        }
-                    },
-                }
-            ],
+            AWS_REGION_EU_WEST_1: [get_security_hub_finding("PASSED")],
         }
 
-    def test_prepare_security_hub_findings_quiet_MANUAL_finding(self):
+    def test_prepare_security_hub_findings_quiet_INFO_finding(self):
         enabled_regions = [AWS_REGION_EU_WEST_1]
         output_options = self.set_mocked_output_options(is_quiet=False)
-        findings = [self.generate_finding("MANUAL", AWS_REGION_EU_WEST_1)]
+        findings = [self.generate_finding("INFO", AWS_REGION_EU_WEST_1)]
         audit_info = set_mocked_aws_audit_info(
             audited_regions=[AWS_REGION_EU_WEST_1, AWS_REGION_EU_WEST_2]
         )
@@ -171,7 +299,7 @@ def test_prepare_security_hub_findings_disabled_region(self):
             enabled_regions,
         ) == {AWS_REGION_EU_WEST_1: []}
 
-    def test_prepare_security_hub_findings_quiet(self):
+    def test_prepare_security_hub_findings_quiet_PASS(self):
         enabled_regions = [AWS_REGION_EU_WEST_1]
         output_options = self.set_mocked_output_options(is_quiet=True)
         findings = [self.generate_finding("PASS", AWS_REGION_EU_WEST_1)]
@@ -186,6 +314,51 @@ def test_prepare_security_hub_findings_quiet(self):
             enabled_regions,
         ) == {AWS_REGION_EU_WEST_1: []}
 
+    def test_prepare_security_hub_findings_quiet_FAIL(self):
+        enabled_regions = [AWS_REGION_EU_WEST_1]
+        output_options = self.set_mocked_output_options(is_quiet=True)
+        findings = [self.generate_finding("FAIL", AWS_REGION_EU_WEST_1)]
+        audit_info = set_mocked_aws_audit_info(
+            audited_regions=[AWS_REGION_EU_WEST_1, AWS_REGION_EU_WEST_2]
+        )
+
+        assert prepare_security_hub_findings(
+            findings,
+            audit_info,
+            output_options,
+            enabled_regions,
+        ) == {AWS_REGION_EU_WEST_1: [get_security_hub_finding("FAILED")]}
+
+    def test_prepare_security_hub_findings_send_sh_only_fails_PASS(self):
+        enabled_regions = [AWS_REGION_EU_WEST_1]
+        output_options = self.set_mocked_output_options(send_sh_only_fails=True)
+        findings = [self.generate_finding("PASS", AWS_REGION_EU_WEST_1)]
+        audit_info = set_mocked_aws_audit_info(
+            audited_regions=[AWS_REGION_EU_WEST_1, AWS_REGION_EU_WEST_2]
+        )
+
+        assert prepare_security_hub_findings(
+            findings,
+            audit_info,
+            output_options,
+            enabled_regions,
+        ) == {AWS_REGION_EU_WEST_1: []}
+
+    def test_prepare_security_hub_findings_send_sh_only_fails_FAIL(self):
+        enabled_regions = [AWS_REGION_EU_WEST_1]
+        output_options = self.set_mocked_output_options(send_sh_only_fails=True)
+        findings = [self.generate_finding("FAIL", AWS_REGION_EU_WEST_1)]
+        audit_info = set_mocked_aws_audit_info(
+            audited_regions=[AWS_REGION_EU_WEST_1, AWS_REGION_EU_WEST_2]
+        )
+
+        assert prepare_security_hub_findings(
+            findings,
+            audit_info,
+            output_options,
+            enabled_regions,
+        ) == {AWS_REGION_EU_WEST_1: [get_security_hub_finding("FAILED")]}
+
     def test_prepare_security_hub_findings_no_audited_regions(self):
         enabled_regions = [AWS_REGION_EU_WEST_1]
         output_options = self.set_mocked_output_options(is_quiet=False)
@@ -198,47 +371,7 @@ def test_prepare_security_hub_findings_no_audited_regions(self):
             output_options,
             enabled_regions,
         ) == {
-            AWS_REGION_EU_WEST_1: [
-                {
-                    "SchemaVersion": "2018-10-08",
-                    "Id": f"prowler-iam_user_accesskey_unused-{AWS_ACCOUNT_NUMBER}-{AWS_REGION_EU_WEST_1}-ee26b0dd4",
-                    "ProductArn": f"arn:aws:securityhub:{AWS_REGION_EU_WEST_1}::product/prowler/prowler",
-                    "RecordState": "ACTIVE",
-                    "ProductFields": {
-                        "ProviderName": "Prowler",
-                        "ProviderVersion": prowler_version,
-                        "ProwlerResourceName": "test",
-                    },
-                    "GeneratorId": "prowler-iam_user_accesskey_unused",
-                    "AwsAccountId": f"{AWS_ACCOUNT_NUMBER}",
-                    "Types": ["Software and Configuration Checks"],
-                    "FirstObservedAt": timestamp_utc.strftime("%Y-%m-%dT%H:%M:%SZ"),
-                    "UpdatedAt": timestamp_utc.strftime("%Y-%m-%dT%H:%M:%SZ"),
-                    "CreatedAt": timestamp_utc.strftime("%Y-%m-%dT%H:%M:%SZ"),
-                    "Severity": {"Label": "LOW"},
-                    "Title": "Ensure Access Keys unused are disabled",
-                    "Description": "test",
-                    "Resources": [
-                        {
-                            "Type": "AwsIamAccessAnalyzer",
-                            "Id": "test",
-                            "Partition": "aws",
-                            "Region": f"{AWS_REGION_EU_WEST_1}",
-                        }
-                    ],
-                    "Compliance": {
-                        "Status": "PASSED",
-                        "RelatedRequirements": [],
-                        "AssociatedStandards": [],
-                    },
-                    "Remediation": {
-                        "Recommendation": {
-                            "Text": "Run sudo yum update and cross your fingers and toes.",
-                            "Url": "https://myfp.com/recommendations/dangerous_things_and_how_to_fix_them.html",
-                        }
-                    },
-                }
-            ],
+            AWS_REGION_EU_WEST_1: [get_security_hub_finding("PASSED")],
         }
 
     @patch("botocore.client.BaseClient._make_api_call", new=mock_make_api_call)
diff --git a/tests/providers/aws/lib/service/service_test.py b/tests/providers/aws/lib/service/service_test.py
index f9f304ea40a..3ef56e745d6 100644
--- a/tests/providers/aws/lib/service/service_test.py
+++ b/tests/providers/aws/lib/service/service_test.py
@@ -1,20 +1,21 @@
-from boto3 import session
 from mock import patch
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.lib.service.service import AWSService
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_ACCOUNT_ARN = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
-AWS_PARTITION = "aws"
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_COMMERCIAL_PARTITION,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
-def mock_generate_regional_clients(service, audit_info, _):
-    regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
-    regional_client.region = AWS_REGION
-    return {AWS_REGION: regional_client}
+def mock_generate_regional_clients(service, audit_info):
+    regional_client = audit_info.audit_session.client(
+        service, region_name=AWS_REGION_US_EAST_1
+    )
+    regional_client.region = AWS_REGION_US_EAST_1
+    return {AWS_REGION_US_EAST_1: regional_client}
 
 
 @patch(
@@ -22,50 +23,40 @@ def mock_generate_regional_clients(service, audit_info, _):
     new=mock_generate_regional_clients,
 )
 class Test_AWSService:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=AWS_ACCOUNT_ARN,
-            audited_user_id=None,
-            audited_partition=AWS_PARTITION,
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=[],
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     def test_AWSService_init(self):
-        audit_info = self.set_mocked_audit_info()
-        service = AWSService("s3", audit_info)
+        service_name = "s3"
+        audit_info = set_mocked_aws_audit_info()
+        service = AWSService(service_name, audit_info)
 
         assert service.audit_info == audit_info
         assert service.audited_account == AWS_ACCOUNT_NUMBER
         assert service.audited_account_arn == AWS_ACCOUNT_ARN
-        assert service.audited_partition == AWS_PARTITION
+        assert service.audited_partition == AWS_COMMERCIAL_PARTITION
         assert service.audit_resources == []
         assert service.audited_checks == []
         assert service.session == audit_info.audit_session
-        assert service.service == "s3"
+        assert service.service == service_name
         assert len(service.regional_clients) == 1
-        assert service.regional_clients[AWS_REGION].__class__.__name__ == "S3"
-        assert service.region == AWS_REGION
-        assert service.client.__class__.__name__ == "S3"
+        assert (
+            service.regional_clients[AWS_REGION_US_EAST_1].__class__.__name__
+            == service_name.upper()
+        )
+        assert service.region == AWS_REGION_US_EAST_1
+        assert service.client.__class__.__name__ == service_name.upper()
+
+    def test_AWSService_init_global_service(self):
+        service_name = "cloudfront"
+        audit_info = set_mocked_aws_audit_info()
+        service = AWSService(service_name, audit_info, global_service=True)
+
+        assert service.audit_info == audit_info
+        assert service.audited_account == AWS_ACCOUNT_NUMBER
+        assert service.audited_account_arn == AWS_ACCOUNT_ARN
+        assert service.audited_partition == AWS_COMMERCIAL_PARTITION
+        assert service.audit_resources == []
+        assert service.audited_checks == []
+        assert service.session == audit_info.audit_session
+        assert service.service == service_name
+        assert not hasattr(service, "regional_clients")
+        assert service.region == AWS_REGION_US_EAST_1
+        assert service.client.__class__.__name__ == "CloudFront"
diff --git a/tests/providers/aws/services/accessanalyzer/accessanalyzer_service_test.py b/tests/providers/aws/services/accessanalyzer/accessanalyzer_service_test.py
index fe5f5926742..ac7ae7fa13b 100644
--- a/tests/providers/aws/services/accessanalyzer/accessanalyzer_service_test.py
+++ b/tests/providers/aws/services/accessanalyzer/accessanalyzer_service_test.py
@@ -1,19 +1,15 @@
 from unittest.mock import patch
 
 import botocore
-from boto3 import session
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.accessanalyzer.accessanalyzer_service import (
     AccessAnalyzer,
 )
-from prowler.providers.common.models import Audit_Metadata
-
-# Mock Test Region
-AWS_REGION = "eu-west-1"
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 # Mocking Access Analyzer Calls
 make_api_call = botocore.client.BaseClient._make_api_call
@@ -58,10 +54,12 @@ def mock_make_api_call(self, operation_name, kwarg):
     return make_api_call(self, operation_name, kwarg)
 
 
-def mock_generate_regional_clients(service, audit_info, _):
-    regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
-    regional_client.region = AWS_REGION
-    return {AWS_REGION: regional_client}
+def mock_generate_regional_clients(service, audit_info):
+    regional_client = audit_info.audit_session.client(
+        service, region_name=AWS_REGION_EU_WEST_1
+    )
+    regional_client.region = AWS_REGION_EU_WEST_1
+    return {AWS_REGION_EU_WEST_1: regional_client}
 
 
 # Patch every AWS call using Boto3 and generate_regional_clients to have 1 client
@@ -71,66 +69,46 @@ def mock_generate_regional_clients(service, audit_info, _):
     new=mock_generate_regional_clients,
 )
 class Test_AccessAnalyzer_Service:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test AccessAnalyzer Client
     def test__get_client__(self):
-        access_analyzer = AccessAnalyzer(self.set_mocked_audit_info())
+        access_analyzer = AccessAnalyzer(
+            set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+        )
         assert (
-            access_analyzer.regional_clients[AWS_REGION].__class__.__name__
+            access_analyzer.regional_clients[AWS_REGION_EU_WEST_1].__class__.__name__
             == "AccessAnalyzer"
         )
 
     # Test AccessAnalyzer Session
     def test__get_session__(self):
-        access_analyzer = AccessAnalyzer(self.set_mocked_audit_info())
+        access_analyzer = AccessAnalyzer(
+            set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+        )
         assert access_analyzer.session.__class__.__name__ == "Session"
 
     # Test AccessAnalyzer Service
     def test__get_service__(self):
-        access_analyzer = AccessAnalyzer(self.set_mocked_audit_info())
+        access_analyzer = AccessAnalyzer(
+            set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+        )
         assert access_analyzer.service == "accessanalyzer"
 
     def test__list_analyzers__(self):
-        access_analyzer = AccessAnalyzer(self.set_mocked_audit_info())
+        access_analyzer = AccessAnalyzer(
+            set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+        )
         assert len(access_analyzer.analyzers) == 1
         assert access_analyzer.analyzers[0].arn == "ARN"
         assert access_analyzer.analyzers[0].name == "Test Analyzer"
         assert access_analyzer.analyzers[0].status == "ACTIVE"
         assert access_analyzer.analyzers[0].tags == [{"test": "test"}]
         assert access_analyzer.analyzers[0].type == "ACCOUNT"
-        assert access_analyzer.analyzers[0].region == AWS_REGION
+        assert access_analyzer.analyzers[0].region == AWS_REGION_EU_WEST_1
 
     def test__list_findings__(self):
-        access_analyzer = AccessAnalyzer(self.set_mocked_audit_info())
+        access_analyzer = AccessAnalyzer(
+            set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+        )
         assert len(access_analyzer.analyzers) == 1
         assert len(access_analyzer.analyzers[0].findings) == 1
         assert access_analyzer.analyzers[0].findings[0].status == "ARCHIVED"
diff --git a/tests/providers/aws/services/account/account_service_test.py b/tests/providers/aws/services/account/account_service_test.py
index 61226912653..a7a7018c672 100644
--- a/tests/providers/aws/services/account/account_service_test.py
+++ b/tests/providers/aws/services/account/account_service_test.py
@@ -1,14 +1,11 @@
 import botocore
-from boto3 import session
 from mock import patch
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.account.account_service import Account, Contact
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_ACCOUNT_ARN = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    set_mocked_aws_audit_info,
+)
 
 # Mocking Access Analyzer Calls
 make_api_call = botocore.client.BaseClient._make_api_call
@@ -56,65 +53,34 @@ def mock_make_api_call(self, operation_name, kwargs):
 # Patch every AWS call using Boto3
 @patch("botocore.client.BaseClient._make_api_call", new=mock_make_api_call)
 class Test_Account_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=AWS_ACCOUNT_ARN,
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test Account Service
     def test_service(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         account = Account(audit_info)
         assert account.service == "account"
 
     # Test Account Client
     def test_client(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         account = Account(audit_info)
         assert account.client.__class__.__name__ == "Account"
 
     # Test Account Session
     def test__get_session__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         account = Account(audit_info)
         assert account.session.__class__.__name__ == "Session"
 
     # Test Account Session
     def test_audited_account(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         account = Account(audit_info)
         assert account.audited_account == AWS_ACCOUNT_NUMBER
 
     # Test Account Get Account Contacts
     def test_get_account_contacts(self):
         # Account client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         account = Account(audit_info)
         assert account.number_of_contacts == 4
         assert account.contact_base == Contact(
diff --git a/tests/providers/aws/services/acm/acm_certificates_expiration_check/acm_certificates_expiration_check_test.py b/tests/providers/aws/services/acm/acm_certificates_expiration_check/acm_certificates_expiration_check_test.py
index dee88196c58..010e84f1121 100644
--- a/tests/providers/aws/services/acm/acm_certificates_expiration_check/acm_certificates_expiration_check_test.py
+++ b/tests/providers/aws/services/acm/acm_certificates_expiration_check/acm_certificates_expiration_check_test.py
@@ -32,6 +32,7 @@ def test_acm_certificate_expirated(self):
         certificate_arn = f"arn:aws:acm:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:certificate/{certificate_id}"
         certificate_name = "test-certificate.com"
         certificate_type = "AMAZON_ISSUED"
+        expiration_days = 5
 
         acm_client = mock.MagicMock
         acm_client.certificates = [
@@ -40,7 +41,50 @@ def test_acm_certificate_expirated(self):
                 id=certificate_id,
                 name=certificate_name,
                 type=certificate_type,
-                expiration_days=5,
+                expiration_days=expiration_days,
+                transparency_logging=True,
+                region=AWS_REGION,
+            )
+        ]
+
+        with mock.patch(
+            "prowler.providers.aws.services.acm.acm_service.ACM",
+            new=acm_client,
+        ):
+            # Test Check
+            from prowler.providers.aws.services.acm.acm_certificates_expiration_check.acm_certificates_expiration_check import (
+                acm_certificates_expiration_check,
+            )
+
+            check = acm_certificates_expiration_check()
+            result = check.execute()
+
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"ACM Certificate {certificate_id} for {certificate_name} is about to expire in {expiration_days} days."
+            )
+            assert result[0].resource_id == certificate_id
+            assert result[0].resource_arn == certificate_arn
+            assert result[0].region == AWS_REGION
+            assert result[0].resource_tags == []
+
+    def test_acm_certificate_expirated_long_time(self):
+        certificate_id = str(uuid.uuid4())
+        certificate_arn = f"arn:aws:acm:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:certificate/{certificate_id}"
+        certificate_name = "test-certificate.com"
+        certificate_type = "AMAZON_ISSUED"
+        expiration_days = -400
+
+        acm_client = mock.MagicMock
+        acm_client.certificates = [
+            Certificate(
+                arn=certificate_arn,
+                id=certificate_id,
+                name=certificate_name,
+                type=certificate_type,
+                expiration_days=expiration_days,
                 transparency_logging=True,
                 region=AWS_REGION,
             )
@@ -62,7 +106,7 @@ def test_acm_certificate_expirated(self):
             assert result[0].status == "FAIL"
             assert (
                 result[0].status_extended
-                == f"ACM Certificate {certificate_id} for {certificate_name} is about to expire in {DAYS_TO_EXPIRE_THRESHOLD} days."
+                == f"ACM Certificate {certificate_id} for {certificate_name} has expired ({abs(expiration_days)} days ago)."
             )
             assert result[0].resource_id == certificate_id
             assert result[0].resource_arn == certificate_arn
diff --git a/tests/providers/aws/services/acm/acm_service_test.py b/tests/providers/aws/services/acm/acm_service_test.py
index d41197939bb..5806b1aa847 100644
--- a/tests/providers/aws/services/acm/acm_service_test.py
+++ b/tests/providers/aws/services/acm/acm_service_test.py
@@ -2,26 +2,20 @@
 from datetime import datetime
 
 import botocore
-from boto3 import session
 from freezegun import freeze_time
 from mock import patch
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.acm.acm_service import ACM
-from prowler.providers.common.models import Audit_Metadata
-
-# from moto import mock_acm
-
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 # Mocking Access Analyzer Calls
 make_api_call = botocore.client.BaseClient._make_api_call
 
-certificate_arn = (
-    f"arn:aws:acm:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:certificate/{str(uuid.uuid4())}"
-)
+certificate_arn = f"arn:aws:acm:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:certificate/{str(uuid.uuid4())}"
 certificate_name = "test-certificate.com"
 certificate_type = "AMAZON_ISSUED"
 
@@ -80,10 +74,12 @@ def mock_make_api_call(self, operation_name, kwargs):
 
 
 # Mock generate_regional_clients()
-def mock_generate_regional_clients(service, audit_info, _):
-    regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
-    regional_client.region = AWS_REGION
-    return {AWS_REGION: regional_client}
+def mock_generate_regional_clients(service, audit_info):
+    regional_client = audit_info.audit_session.client(
+        service, region_name=AWS_REGION_US_EAST_1
+    )
+    regional_client.region = AWS_REGION_US_EAST_1
+    return {AWS_REGION_US_EAST_1: regional_client}
 
 
 # Patch every AWS call using Boto3 and generate_regional_clients to have 1 client
@@ -96,42 +92,11 @@ def mock_generate_regional_clients(service, audit_info, _):
 @freeze_time("2023-01-01")
 # FIXME: Pending Moto PR to update ACM responses
 class Test_ACM_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test ACM Service
     # @mock_acm
     def test_service(self):
         # ACM client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         acm = ACM(audit_info)
         assert acm.service == "acm"
 
@@ -139,7 +104,7 @@ def test_service(self):
     # @mock_acm
     def test_client(self):
         # ACM client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         acm = ACM(audit_info)
         for regional_client in acm.regional_clients.values():
             assert regional_client.__class__.__name__ == "ACM"
@@ -148,7 +113,7 @@ def test_client(self):
     # @mock_acm
     def test__get_session__(self):
         # ACM client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         acm = ACM(audit_info)
         assert acm.session.__class__.__name__ == "Session"
 
@@ -156,7 +121,7 @@ def test__get_session__(self):
     # @mock_acm
     def test_audited_account(self):
         # ACM client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         acm = ACM(audit_info)
         assert acm.audited_account == AWS_ACCOUNT_NUMBER
 
@@ -171,7 +136,7 @@ def test__list_and_describe_certificates__(self):
         # )
 
         # ACM client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         acm = ACM(audit_info)
         assert len(acm.certificates) == 1
         assert acm.certificates[0].arn == certificate_arn
@@ -179,7 +144,7 @@ def test__list_and_describe_certificates__(self):
         assert acm.certificates[0].type == certificate_type
         assert acm.certificates[0].expiration_days == 365
         assert acm.certificates[0].transparency_logging is False
-        assert acm.certificates[0].region == AWS_REGION
+        assert acm.certificates[0].region == AWS_REGION_US_EAST_1
 
     # Test ACM List Tags
     # @mock_acm
@@ -192,7 +157,7 @@ def test__list_tags_for_certificate__(self):
         # )
 
         # ACM client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         acm = ACM(audit_info)
         assert len(acm.certificates) == 1
         assert acm.certificates[0].tags == [
diff --git a/tests/providers/aws/services/apigateway/apigateway_authorizers_enabled/apigateway_authorizers_enabled_test.py b/tests/providers/aws/services/apigateway/apigateway_authorizers_enabled/apigateway_authorizers_enabled_test.py
index e1117b8847f..402c75f84ef 100644
--- a/tests/providers/aws/services/apigateway/apigateway_authorizers_enabled/apigateway_authorizers_enabled_test.py
+++ b/tests/providers/aws/services/apigateway/apigateway_authorizers_enabled/apigateway_authorizers_enabled_test.py
@@ -1,55 +1,26 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_apigateway, mock_iam, mock_lambda
-from moto.core import DEFAULT_ACCOUNT_ID as ACCOUNT_ID
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_apigateway_restapi_authorizers_enabled:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_apigateway
+    @mock_aws
     def test_apigateway_no_rest_apis(self):
         from prowler.providers.aws.services.apigateway.apigateway_service import (
             APIGateway,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -68,13 +39,11 @@ def test_apigateway_no_rest_apis(self):
 
             assert len(result) == 0
 
-    @mock_apigateway
-    @mock_iam
-    @mock_lambda
+    @mock_aws
     def test_apigateway_one_rest_api_with_lambda_authorizer(self):
         # Create APIGateway Mocked Resources
-        apigateway_client = client("apigateway", region_name=AWS_REGION)
-        lambda_client = client("lambda", region_name=AWS_REGION)
+        apigateway_client = client("apigateway", region_name=AWS_REGION_US_EAST_1)
+        lambda_client = client("lambda", region_name=AWS_REGION_US_EAST_1)
         iam_client = client("iam")
         # Create APIGateway Rest API
         role_arn = iam_client.create_role(
@@ -97,13 +66,15 @@ def test_apigateway_one_rest_api_with_lambda_authorizer(self):
             name="test",
             restApiId=rest_api["id"],
             type="TOKEN",
-            authorizerUri=f"arn:aws:apigateway:{apigateway_client.meta.region_name}:lambda:path/2015-03-31/functions/arn:aws:lambda:{apigateway_client.meta.region_name}:{ACCOUNT_ID}:function:{authorizer['FunctionName']}/invocations",
+            authorizerUri=f"arn:aws:apigateway:{apigateway_client.meta.region_name}:lambda:path/2015-03-31/functions/arn:aws:lambda:{apigateway_client.meta.region_name}:{AWS_ACCOUNT_NUMBER}:function:{authorizer['FunctionName']}/invocations",
         )
         from prowler.providers.aws.services.apigateway.apigateway_service import (
             APIGateway,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -124,20 +95,20 @@ def test_apigateway_one_rest_api_with_lambda_authorizer(self):
             assert len(result) == 1
             assert (
                 result[0].status_extended
-                == f"API Gateway test-rest-api ID {rest_api['id']} has an authorizer configured."
+                == f"API Gateway test-rest-api ID {rest_api['id']} has an authorizer configured at api level"
             )
             assert result[0].resource_id == "test-rest-api"
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION}::/restapis/{rest_api['id']}"
+                == f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION_US_EAST_1}::/restapis/{rest_api['id']}"
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == [{}]
 
-    @mock_apigateway
+    @mock_aws
     def test_apigateway_one_rest_api_without_lambda_authorizer(self):
         # Create APIGateway Mocked Resources
-        apigateway_client = client("apigateway", region_name=AWS_REGION)
+        apigateway_client = client("apigateway", region_name=AWS_REGION_US_EAST_1)
         # Create APIGateway Rest API
         rest_api = apigateway_client.create_rest_api(
             name="test-rest-api",
@@ -146,7 +117,329 @@ def test_apigateway_one_rest_api_without_lambda_authorizer(self):
             APIGateway,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
+
+        with mock.patch(
+            "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
+            new=current_audit_info,
+        ), mock.patch(
+            "prowler.providers.aws.services.apigateway.apigateway_restapi_authorizers_enabled.apigateway_restapi_authorizers_enabled.apigateway_client",
+            new=APIGateway(current_audit_info),
+        ):
+            # Test Check
+            from prowler.providers.aws.services.apigateway.apigateway_restapi_authorizers_enabled.apigateway_restapi_authorizers_enabled import (
+                apigateway_restapi_authorizers_enabled,
+            )
+
+            check = apigateway_restapi_authorizers_enabled()
+            result = check.execute()
+
+            assert result[0].status == "FAIL"
+            assert len(result) == 1
+            assert (
+                result[0].status_extended
+                == f"API Gateway test-rest-api ID {rest_api['id']} does not have an authorizer configured at api level."
+            )
+            assert result[0].resource_id == "test-rest-api"
+            assert (
+                result[0].resource_arn
+                == f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION_US_EAST_1}::/restapis/{rest_api['id']}"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
+            assert result[0].resource_tags == [{}]
+
+    @mock_aws
+    def test_apigateway_one_rest_api_without_api_or_methods_authorizer(self):
+        # Create APIGateway Mocked Resources
+        apigateway_client = client("apigateway", region_name=AWS_REGION_US_EAST_1)
+
+        rest_api = apigateway_client.create_rest_api(
+            name="test-rest-api",
+        )
+
+        default_resource_id = apigateway_client.get_resources(restApiId=rest_api["id"])[
+            "items"
+        ][0]["id"]
+
+        api_resource = apigateway_client.create_resource(
+            restApiId=rest_api["id"], parentId=default_resource_id, pathPart="test"
+        )
+
+        apigateway_client.put_method(
+            restApiId=rest_api["id"],
+            resourceId=api_resource["id"],
+            httpMethod="GET",
+            authorizationType="NONE",
+        )
+
+        from prowler.providers.aws.services.apigateway.apigateway_service import (
+            APIGateway,
+        )
+
+        current_audit_info = current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
+
+        with mock.patch(
+            "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
+            new=current_audit_info,
+        ), mock.patch(
+            "prowler.providers.aws.services.apigateway.apigateway_restapi_authorizers_enabled.apigateway_restapi_authorizers_enabled.apigateway_client",
+            new=APIGateway(current_audit_info),
+        ):
+            # Test Check
+            from prowler.providers.aws.services.apigateway.apigateway_restapi_authorizers_enabled.apigateway_restapi_authorizers_enabled import (
+                apigateway_restapi_authorizers_enabled,
+            )
+
+            check = apigateway_restapi_authorizers_enabled()
+            result = check.execute()
+
+            assert result[0].status == "FAIL"
+            assert len(result) == 1
+            assert (
+                result[0].status_extended
+                == f"API Gateway test-rest-api ID {rest_api['id']} does not have authorizers at api level and the following paths and methods are unauthorized: /test -> GET."
+            )
+            assert result[0].resource_id == "test-rest-api"
+            assert (
+                result[0].resource_arn
+                == f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION_US_EAST_1}::/restapis/{rest_api['id']}"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
+            assert result[0].resource_tags == [{}]
+
+    @mock_aws
+    def test_apigateway_one_rest_api_without_api_auth_but_one_method_auth(self):
+        # Create APIGateway Mocked Resources
+        apigateway_client = client("apigateway", region_name=AWS_REGION_US_EAST_1)
+
+        rest_api = apigateway_client.create_rest_api(
+            name="test-rest-api",
+        )
+
+        default_resource_id = apigateway_client.get_resources(restApiId=rest_api["id"])[
+            "items"
+        ][0]["id"]
+
+        api_resource = apigateway_client.create_resource(
+            restApiId=rest_api["id"], parentId=default_resource_id, pathPart="test"
+        )
+
+        apigateway_client.put_method(
+            restApiId=rest_api["id"],
+            resourceId=api_resource["id"],
+            httpMethod="GET",
+            authorizationType="AWS_IAM",
+        )
+
+        from prowler.providers.aws.services.apigateway.apigateway_service import (
+            APIGateway,
+        )
+
+        current_audit_info = current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
+
+        with mock.patch(
+            "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
+            new=current_audit_info,
+        ), mock.patch(
+            "prowler.providers.aws.services.apigateway.apigateway_restapi_authorizers_enabled.apigateway_restapi_authorizers_enabled.apigateway_client",
+            new=APIGateway(current_audit_info),
+        ):
+            # Test Check
+            from prowler.providers.aws.services.apigateway.apigateway_restapi_authorizers_enabled.apigateway_restapi_authorizers_enabled import (
+                apigateway_restapi_authorizers_enabled,
+            )
+
+            check = apigateway_restapi_authorizers_enabled()
+            result = check.execute()
+
+            assert result[0].status == "PASS"
+            assert len(result) == 1
+            assert (
+                result[0].status_extended
+                == f"API Gateway test-rest-api ID {rest_api['id']} has all methods authorized"
+            )
+            assert result[0].resource_id == "test-rest-api"
+            assert (
+                result[0].resource_arn
+                == f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION_US_EAST_1}::/restapis/{rest_api['id']}"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
+            assert result[0].resource_tags == [{}]
+
+    @mock_aws
+    def test_apigateway_one_rest_api_without_api_auth_but_methods_auth_and_not(self):
+        # Create APIGateway Mocked Resources
+        apigateway_client = client("apigateway", region_name=AWS_REGION_US_EAST_1)
+
+        rest_api = apigateway_client.create_rest_api(
+            name="test-rest-api",
+        )
+
+        default_resource_id = apigateway_client.get_resources(restApiId=rest_api["id"])[
+            "items"
+        ][0]["id"]
+
+        api_resource = apigateway_client.create_resource(
+            restApiId=rest_api["id"], parentId=default_resource_id, pathPart="test"
+        )
+
+        apigateway_client.put_method(
+            restApiId=rest_api["id"],
+            resourceId=api_resource["id"],
+            httpMethod="POST",
+            authorizationType="AWS_IAM",
+        )
+
+        apigateway_client.put_method(
+            restApiId=rest_api["id"],
+            resourceId=api_resource["id"],
+            httpMethod="GET",
+            authorizationType="NONE",
+        )
+
+        from prowler.providers.aws.services.apigateway.apigateway_service import (
+            APIGateway,
+        )
+
+        current_audit_info = current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
+
+        with mock.patch(
+            "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
+            new=current_audit_info,
+        ), mock.patch(
+            "prowler.providers.aws.services.apigateway.apigateway_restapi_authorizers_enabled.apigateway_restapi_authorizers_enabled.apigateway_client",
+            new=APIGateway(current_audit_info),
+        ):
+            # Test Check
+            from prowler.providers.aws.services.apigateway.apigateway_restapi_authorizers_enabled.apigateway_restapi_authorizers_enabled import (
+                apigateway_restapi_authorizers_enabled,
+            )
+
+            check = apigateway_restapi_authorizers_enabled()
+            result = check.execute()
+
+            assert result[0].status == "FAIL"
+            assert len(result) == 1
+            assert (
+                result[0].status_extended
+                == f"API Gateway test-rest-api ID {rest_api['id']} does not have authorizers at api level and the following paths and methods are unauthorized: /test -> GET."
+            )
+            assert result[0].resource_id == "test-rest-api"
+            assert (
+                result[0].resource_arn
+                == f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION_US_EAST_1}::/restapis/{rest_api['id']}"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
+            assert result[0].resource_tags == [{}]
+
+    @mock_aws
+    def test_apigateway_one_rest_api_without_api_auth_but_methods_not_auth_and_auth(
+        self,
+    ):
+        # Create APIGateway Mocked Resources
+        apigateway_client = client("apigateway", region_name=AWS_REGION_US_EAST_1)
+
+        rest_api = apigateway_client.create_rest_api(
+            name="test-rest-api",
+        )
+
+        default_resource_id = apigateway_client.get_resources(restApiId=rest_api["id"])[
+            "items"
+        ][0]["id"]
+
+        api_resource = apigateway_client.create_resource(
+            restApiId=rest_api["id"], parentId=default_resource_id, pathPart="test"
+        )
+
+        apigateway_client.put_method(
+            restApiId=rest_api["id"],
+            resourceId=api_resource["id"],
+            httpMethod="GET",
+            authorizationType="NONE",
+        )
+
+        apigateway_client.put_method(
+            restApiId=rest_api["id"],
+            resourceId=api_resource["id"],
+            httpMethod="POST",
+            authorizationType="AWS_IAM",
+        )
+
+        from prowler.providers.aws.services.apigateway.apigateway_service import (
+            APIGateway,
+        )
+
+        current_audit_info = current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
+
+        with mock.patch(
+            "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
+            new=current_audit_info,
+        ), mock.patch(
+            "prowler.providers.aws.services.apigateway.apigateway_restapi_authorizers_enabled.apigateway_restapi_authorizers_enabled.apigateway_client",
+            new=APIGateway(current_audit_info),
+        ):
+            # Test Check
+            from prowler.providers.aws.services.apigateway.apigateway_restapi_authorizers_enabled.apigateway_restapi_authorizers_enabled import (
+                apigateway_restapi_authorizers_enabled,
+            )
+
+            check = apigateway_restapi_authorizers_enabled()
+            result = check.execute()
+
+            assert result[0].status == "FAIL"
+            assert len(result) == 1
+            assert (
+                result[0].status_extended
+                == f"API Gateway test-rest-api ID {rest_api['id']} does not have authorizers at api level and the following paths and methods are unauthorized: /test -> GET."
+            )
+            assert result[0].resource_id == "test-rest-api"
+            assert (
+                result[0].resource_arn
+                == f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION_US_EAST_1}::/restapis/{rest_api['id']}"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
+            assert result[0].resource_tags == [{}]
+
+    @mock_aws
+    def test_apigateway_one_rest_api_without_authorizers_with_various_resources_without_endpoints(
+        self,
+    ):
+        # Create APIGateway Mocked Resources
+        apigateway_client = client("apigateway", region_name=AWS_REGION_US_EAST_1)
+
+        rest_api = apigateway_client.create_rest_api(
+            name="test-rest-api",
+        )
+
+        default_resource_id = apigateway_client.get_resources(restApiId=rest_api["id"])[
+            "items"
+        ][0]["id"]
+
+        apigateway_client.create_resource(
+            restApiId=rest_api["id"], parentId=default_resource_id, pathPart="test"
+        )
+
+        apigateway_client.create_resource(
+            restApiId=rest_api["id"], parentId=default_resource_id, pathPart="test2"
+        )
+
+        from prowler.providers.aws.services.apigateway.apigateway_service import (
+            APIGateway,
+        )
+
+        current_audit_info = current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -167,12 +460,12 @@ def test_apigateway_one_rest_api_without_lambda_authorizer(self):
             assert len(result) == 1
             assert (
                 result[0].status_extended
-                == f"API Gateway test-rest-api ID {rest_api['id']} does not have an authorizer configured."
+                == f"API Gateway test-rest-api ID {rest_api['id']} does not have an authorizer configured at api level."
             )
             assert result[0].resource_id == "test-rest-api"
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION}::/restapis/{rest_api['id']}"
+                == f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION_US_EAST_1}::/restapis/{rest_api['id']}"
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == [{}]
diff --git a/tests/providers/aws/services/apigateway/apigateway_client_certificate_enabled/apigateway_client_certificate_enabled_test.py b/tests/providers/aws/services/apigateway/apigateway_client_certificate_enabled/apigateway_client_certificate_enabled_test.py
index cc52c3a27b1..8b16ed62815 100644
--- a/tests/providers/aws/services/apigateway/apigateway_client_certificate_enabled/apigateway_client_certificate_enabled_test.py
+++ b/tests/providers/aws/services/apigateway/apigateway_client_certificate_enabled/apigateway_client_certificate_enabled_test.py
@@ -1,52 +1,21 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_apigateway
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.apigateway.apigateway_service import Stage
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_apigateway_restapi_client_certificate_enabled:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_apigateway
+    @mock_aws
     def test_apigateway_no_stages(self):
         # Create APIGateway Mocked Resources
-        apigateway_client = client("apigateway", region_name=AWS_REGION)
+        apigateway_client = client("apigateway", region_name=AWS_REGION_US_EAST_1)
         # Create APIGateway Rest API
         apigateway_client.create_rest_api(
             name="test-rest-api",
@@ -55,7 +24,9 @@ def test_apigateway_no_stages(self):
             APIGateway,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -74,10 +45,10 @@ def test_apigateway_no_stages(self):
 
             assert len(result) == 0
 
-    @mock_apigateway
+    @mock_aws
     def test_apigateway_one_stage_without_certificate(self):
         # Create APIGateway Mocked Resources
-        apigateway_client = client("apigateway", region_name=AWS_REGION)
+        apigateway_client = client("apigateway", region_name=AWS_REGION_US_EAST_1)
         # Create APIGateway Deployment Stage
         rest_api = apigateway_client.create_rest_api(
             name="test-rest-api",
@@ -113,7 +84,9 @@ def test_apigateway_one_stage_without_certificate(self):
             APIGateway,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -139,15 +112,15 @@ def test_apigateway_one_stage_without_certificate(self):
             assert result[0].resource_id == "test-rest-api"
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION}::/restapis/{rest_api['id']}/stages/test"
+                == f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION_US_EAST_1}::/restapis/{rest_api['id']}/stages/test"
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == [None]
 
-    @mock_apigateway
+    @mock_aws
     def test_apigateway_one_stage_with_certificate(self):
         # Create APIGateway Mocked Resources
-        apigateway_client = client("apigateway", region_name=AWS_REGION)
+        apigateway_client = client("apigateway", region_name=AWS_REGION_US_EAST_1)
         # Create APIGateway Deployment Stage
         rest_api = apigateway_client.create_rest_api(
             name="test-rest-api",
@@ -156,7 +129,9 @@ def test_apigateway_one_stage_with_certificate(self):
             APIGateway,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -173,7 +148,7 @@ def test_apigateway_one_stage_with_certificate(self):
             service_client.rest_apis[0].stages.append(
                 Stage(
                     name="test",
-                    arn=f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION}::/restapis/test-rest-api/stages/test",
+                    arn=f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION_US_EAST_1}::/restapis/test-rest-api/stages/test",
                     logging=True,
                     client_certificate=True,
                     waf=True,
@@ -192,7 +167,7 @@ def test_apigateway_one_stage_with_certificate(self):
             assert result[0].resource_id == "test-rest-api"
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION}::/restapis/test-rest-api/stages/test"
+                == f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION_US_EAST_1}::/restapis/test-rest-api/stages/test"
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == []
diff --git a/tests/providers/aws/services/apigateway/apigateway_endpoint_public/apigateway_endpoint_public_test.py b/tests/providers/aws/services/apigateway/apigateway_endpoint_public/apigateway_endpoint_public_test.py
index 4a913a80b5a..2d8197ff6cf 100644
--- a/tests/providers/aws/services/apigateway/apigateway_endpoint_public/apigateway_endpoint_public_test.py
+++ b/tests/providers/aws/services/apigateway/apigateway_endpoint_public/apigateway_endpoint_public_test.py
@@ -1,54 +1,25 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_apigateway
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_apigateway_restapi_public:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_apigateway
+    @mock_aws
     def test_apigateway_no_rest_apis(self):
         from prowler.providers.aws.services.apigateway.apigateway_service import (
             APIGateway,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -67,10 +38,10 @@ def test_apigateway_no_rest_apis(self):
 
             assert len(result) == 0
 
-    @mock_apigateway
+    @mock_aws
     def test_apigateway_one_private_rest_api(self):
         # Create APIGateway Mocked Resources
-        apigateway_client = client("apigateway", region_name=AWS_REGION)
+        apigateway_client = client("apigateway", region_name=AWS_REGION_US_EAST_1)
         # Create APIGateway Deployment Stage
         rest_api = apigateway_client.create_rest_api(
             name="test-rest-api",
@@ -84,7 +55,9 @@ def test_apigateway_one_private_rest_api(self):
             APIGateway,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -110,15 +83,15 @@ def test_apigateway_one_private_rest_api(self):
             assert result[0].resource_id == "test-rest-api"
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION}::/restapis/{rest_api['id']}"
+                == f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION_US_EAST_1}::/restapis/{rest_api['id']}"
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == [{}]
 
-    @mock_apigateway
+    @mock_aws
     def test_apigateway_one_public_rest_api(self):
         # Create APIGateway Mocked Resources
-        apigateway_client = client("apigateway", region_name=AWS_REGION)
+        apigateway_client = client("apigateway", region_name=AWS_REGION_US_EAST_1)
         # Create APIGateway Deployment Stage
         rest_api = apigateway_client.create_rest_api(
             name="test-rest-api",
@@ -132,7 +105,9 @@ def test_apigateway_one_public_rest_api(self):
             APIGateway,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -158,7 +133,7 @@ def test_apigateway_one_public_rest_api(self):
             assert result[0].resource_id == "test-rest-api"
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION}::/restapis/{rest_api['id']}"
+                == f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION_US_EAST_1}::/restapis/{rest_api['id']}"
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == [{}]
diff --git a/tests/providers/aws/services/apigateway/apigateway_endpoint_public_without_authorizer/apigateway_endpoint_public_without_authorizer_test.py b/tests/providers/aws/services/apigateway/apigateway_endpoint_public_without_authorizer/apigateway_endpoint_public_without_authorizer_test.py
index 1b4c9790337..f68469c96b9 100644
--- a/tests/providers/aws/services/apigateway/apigateway_endpoint_public_without_authorizer/apigateway_endpoint_public_without_authorizer_test.py
+++ b/tests/providers/aws/services/apigateway/apigateway_endpoint_public_without_authorizer/apigateway_endpoint_public_without_authorizer_test.py
@@ -1,56 +1,27 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_apigateway
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 API_GW_NAME = "test-rest-api"
 
 
 class Test_apigateway_restapi_public_with_authorizer:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_apigateway
+    @mock_aws
     def test_apigateway_no_rest_apis(self):
         from prowler.providers.aws.services.apigateway.apigateway_service import (
             APIGateway,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -69,10 +40,10 @@ def test_apigateway_no_rest_apis(self):
 
             assert len(result) == 0
 
-    @mock_apigateway
+    @mock_aws
     def test_apigateway_one_public_rest_api_without_authorizer(self):
         # Create APIGateway Mocked Resources
-        apigateway_client = client("apigateway", region_name=AWS_REGION)
+        apigateway_client = client("apigateway", region_name=AWS_REGION_US_EAST_1)
         # Create APIGateway Deployment Stage
         rest_api = apigateway_client.create_rest_api(
             name=API_GW_NAME,
@@ -86,7 +57,9 @@ def test_apigateway_one_public_rest_api_without_authorizer(self):
             APIGateway,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -112,15 +85,15 @@ def test_apigateway_one_public_rest_api_without_authorizer(self):
             assert result[0].resource_id == API_GW_NAME
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION}::/restapis/{rest_api['id']}"
+                == f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION_US_EAST_1}::/restapis/{rest_api['id']}"
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == [{}]
 
-    @mock_apigateway
+    @mock_aws
     def test_apigateway_one_public_rest_api_with_authorizer(self):
         # Create APIGateway Mocked Resources
-        apigateway_client = client("apigateway", region_name=AWS_REGION)
+        apigateway_client = client("apigateway", region_name=AWS_REGION_US_EAST_1)
         # Create APIGateway Deployment Stage
         rest_api = apigateway_client.create_rest_api(
             name="test-rest-api",
@@ -137,7 +110,9 @@ def test_apigateway_one_public_rest_api_with_authorizer(self):
             APIGateway,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -163,7 +138,7 @@ def test_apigateway_one_public_rest_api_with_authorizer(self):
             assert result[0].resource_id == API_GW_NAME
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION}::/restapis/{rest_api['id']}"
+                == f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION_US_EAST_1}::/restapis/{rest_api['id']}"
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == [{}]
diff --git a/tests/providers/aws/services/apigateway/apigateway_logging_enabled/apigateway_logging_enabled_test.py b/tests/providers/aws/services/apigateway/apigateway_logging_enabled/apigateway_logging_enabled_test.py
index e86a547df15..8c84a5b623d 100644
--- a/tests/providers/aws/services/apigateway/apigateway_logging_enabled/apigateway_logging_enabled_test.py
+++ b/tests/providers/aws/services/apigateway/apigateway_logging_enabled/apigateway_logging_enabled_test.py
@@ -1,54 +1,25 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_apigateway
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_apigateway_restapi_logging_enabled:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_apigateway
+    @mock_aws
     def test_apigateway_no_rest_apis(self):
         from prowler.providers.aws.services.apigateway.apigateway_service import (
             APIGateway,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -67,10 +38,10 @@ def test_apigateway_no_rest_apis(self):
 
             assert len(result) == 0
 
-    @mock_apigateway
+    @mock_aws
     def test_apigateway_one_rest_api_with_logging(self):
         # Create APIGateway Mocked Resources
-        apigateway_client = client("apigateway", region_name=AWS_REGION)
+        apigateway_client = client("apigateway", region_name=AWS_REGION_US_EAST_1)
         rest_api = apigateway_client.create_rest_api(
             name="test-rest-api",
         )
@@ -116,7 +87,9 @@ def test_apigateway_one_rest_api_with_logging(self):
             APIGateway,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -142,15 +115,15 @@ def test_apigateway_one_rest_api_with_logging(self):
             assert result[0].resource_id == "test-rest-api"
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION}::/restapis/{rest_api['id']}/stages/test"
+                == f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION_US_EAST_1}::/restapis/{rest_api['id']}/stages/test"
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == [None]
 
-    @mock_apigateway
+    @mock_aws
     def test_apigateway_one_rest_api_without_logging(self):
         # Create APIGateway Mocked Resources
-        apigateway_client = client("apigateway", region_name=AWS_REGION)
+        apigateway_client = client("apigateway", region_name=AWS_REGION_US_EAST_1)
         # Create APIGateway Rest API
         rest_api = apigateway_client.create_rest_api(
             name="test-rest-api",
@@ -187,7 +160,9 @@ def test_apigateway_one_rest_api_without_logging(self):
             APIGateway,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -213,7 +188,7 @@ def test_apigateway_one_rest_api_without_logging(self):
             assert result[0].resource_id == "test-rest-api"
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION}::/restapis/{rest_api['id']}/stages/test"
+                == f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION_US_EAST_1}::/restapis/{rest_api['id']}/stages/test"
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == [None]
diff --git a/tests/providers/aws/services/apigateway/apigateway_service_test.py b/tests/providers/aws/services/apigateway/apigateway_service_test.py
index fc60d02d25d..e4156f95f82 100644
--- a/tests/providers/aws/services/apigateway/apigateway_service_test.py
+++ b/tests/providers/aws/services/apigateway/apigateway_service_test.py
@@ -1,100 +1,69 @@
-from boto3 import client, session
-from moto import mock_apigateway
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.apigateway.apigateway_service import APIGateway
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_APIGateway_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test APIGateway Service
-    @mock_apigateway
+    @mock_aws
     def test_service(self):
         # APIGateway client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         apigateway = APIGateway(audit_info)
         assert apigateway.service == "apigateway"
 
     # Test APIGateway Client
-    @mock_apigateway
+    @mock_aws
     def test_client(self):
         # APIGateway client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         apigateway = APIGateway(audit_info)
         for regional_client in apigateway.regional_clients.values():
             assert regional_client.__class__.__name__ == "APIGateway"
 
     # Test APIGateway Session
-    @mock_apigateway
+    @mock_aws
     def test__get_session__(self):
         # APIGateway client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         apigateway = APIGateway(audit_info)
         assert apigateway.session.__class__.__name__ == "Session"
 
     # Test APIGateway Session
-    @mock_apigateway
+    @mock_aws
     def test_audited_account(self):
         # APIGateway client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         apigateway = APIGateway(audit_info)
         assert apigateway.audited_account == AWS_ACCOUNT_NUMBER
 
     # Test APIGateway Get Rest APIs
-    @mock_apigateway
+    @mock_aws
     def test__get_rest_apis__(self):
         # Generate APIGateway Client
-        apigateway_client = client("apigateway", region_name=AWS_REGION)
+        apigateway_client = client("apigateway", region_name=AWS_REGION_US_EAST_1)
         # Create APIGateway Rest API
         apigateway_client.create_rest_api(
             name="test-rest-api",
         )
         # APIGateway client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         apigateway = APIGateway(audit_info)
         assert len(apigateway.rest_apis) == len(
             apigateway_client.get_rest_apis()["items"]
         )
 
     # Test APIGateway Get Authorizers
-    @mock_apigateway
+    @mock_aws
     def test__get_authorizers__(self):
         # Generate APIGateway Client
-        apigateway_client = client("apigateway", region_name=AWS_REGION)
+        apigateway_client = client("apigateway", region_name=AWS_REGION_US_EAST_1)
         # Create APIGateway Rest API
         rest_api = apigateway_client.create_rest_api(
             name="test-rest-api",
@@ -106,15 +75,15 @@ def test__get_authorizers__(self):
             type="TOKEN",
         )
         # APIGateway client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         apigateway = APIGateway(audit_info)
         assert apigateway.rest_apis[0].authorizer is True
 
     # Test APIGateway Get Rest API
-    @mock_apigateway
+    @mock_aws
     def test__get_rest_api__(self):
         # Generate APIGateway Client
-        apigateway_client = client("apigateway", region_name=AWS_REGION)
+        apigateway_client = client("apigateway", region_name=AWS_REGION_US_EAST_1)
         # Create private APIGateway Rest API
         apigateway_client.create_rest_api(
             name="test-rest-api",
@@ -122,16 +91,16 @@ def test__get_rest_api__(self):
             tags={"test": "test"},
         )
         # APIGateway client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         apigateway = APIGateway(audit_info)
         assert apigateway.rest_apis[0].public_endpoint is False
         assert apigateway.rest_apis[0].tags == [{"test": "test"}]
 
     # Test APIGateway Get Stages
-    @mock_apigateway
+    @mock_aws
     def test__get_stages__(self):
         # Generate APIGateway Client
-        apigateway_client = client("apigateway", region_name=AWS_REGION)
+        apigateway_client = client("apigateway", region_name=AWS_REGION_US_EAST_1)
         # Create APIGateway Rest API and a deployment stage
         rest_api = apigateway_client.create_rest_api(
             name="test-rest-api",
@@ -174,6 +143,48 @@ def test__get_stages__(self):
                 },
             ],
         )
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         apigateway = APIGateway(audit_info)
         assert apigateway.rest_apis[0].stages[0].logging is True
+
+    # Test APIGateway __get_resources__
+    @mock_aws
+    def test__get_resources__(self):
+        apigateway_client = client("apigateway", region_name=AWS_REGION_US_EAST_1)
+
+        rest_api = apigateway_client.create_rest_api(
+            name="test-rest-api",
+        )
+
+        default_resource_id = apigateway_client.get_resources(restApiId=rest_api["id"])[
+            "items"
+        ][0]["id"]
+
+        api_resource = apigateway_client.create_resource(
+            restApiId=rest_api["id"], parentId=default_resource_id, pathPart="test"
+        )
+
+        apigateway_client.put_method(
+            restApiId=rest_api["id"],
+            resourceId=api_resource["id"],
+            httpMethod="GET",
+            authorizationType="AWS_IAM",
+        )
+
+        apigateway_client.put_method(
+            restApiId=rest_api["id"],
+            resourceId=api_resource["id"],
+            httpMethod="OPTIONS",
+            authorizationType="AWS_IAM",
+        )
+
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
+        apigateway = APIGateway(audit_info)
+
+        # we skip OPTIONS methods
+        assert list(apigateway.rest_apis[0].resources[1].resource_methods.keys()) == [
+            "GET"
+        ]
+        assert list(apigateway.rest_apis[0].resources[1].resource_methods.values()) == [
+            "AWS_IAM"
+        ]
diff --git a/tests/providers/aws/services/apigateway/apigateway_waf_acl_attached/apigateway_waf_acl_attached_test.py b/tests/providers/aws/services/apigateway/apigateway_waf_acl_attached/apigateway_waf_acl_attached_test.py
index 5919ec829b3..8e037ec5cd9 100644
--- a/tests/providers/aws/services/apigateway/apigateway_waf_acl_attached/apigateway_waf_acl_attached_test.py
+++ b/tests/providers/aws/services/apigateway/apigateway_waf_acl_attached/apigateway_waf_acl_attached_test.py
@@ -1,54 +1,25 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_apigateway, mock_wafv2
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_apigateway_restapi_waf_acl_attached:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_apigateway
+    @mock_aws
     def test_apigateway_no_rest_apis(self):
         from prowler.providers.aws.services.apigateway.apigateway_service import (
             APIGateway,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -67,12 +38,11 @@ def test_apigateway_no_rest_apis(self):
 
             assert len(result) == 0
 
-    @mock_apigateway
-    @mock_wafv2
+    @mock_aws
     def test_apigateway_one_rest_api_with_waf(self):
         # Create APIGateway Mocked Resources
-        apigateway_client = client("apigateway", region_name=AWS_REGION)
-        waf_client = client("wafv2", region_name=AWS_REGION)
+        apigateway_client = client("apigateway", region_name=AWS_REGION_US_EAST_1)
+        waf_client = client("wafv2", region_name=AWS_REGION_US_EAST_1)
         rest_api = apigateway_client.create_rest_api(
             name="test-rest-api",
         )
@@ -122,7 +92,9 @@ def test_apigateway_one_rest_api_with_waf(self):
             APIGateway,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -148,15 +120,15 @@ def test_apigateway_one_rest_api_with_waf(self):
             assert result[0].resource_id == "test-rest-api"
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION}::/restapis/{rest_api['id']}/stages/test"
+                == f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION_US_EAST_1}::/restapis/{rest_api['id']}/stages/test"
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == [None]
 
-    @mock_apigateway
+    @mock_aws
     def test_apigateway_one_rest_api_without_waf(self):
         # Create APIGateway Mocked Resources
-        apigateway_client = client("apigateway", region_name=AWS_REGION)
+        apigateway_client = client("apigateway", region_name=AWS_REGION_US_EAST_1)
         # Create APIGateway Rest API
         rest_api = apigateway_client.create_rest_api(
             name="test-rest-api",
@@ -193,7 +165,9 @@ def test_apigateway_one_rest_api_without_waf(self):
             APIGateway,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -219,7 +193,7 @@ def test_apigateway_one_rest_api_without_waf(self):
             assert result[0].resource_id == "test-rest-api"
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION}::/restapis/{rest_api['id']}/stages/test"
+                == f"arn:{current_audit_info.audited_partition}:apigateway:{AWS_REGION_US_EAST_1}::/restapis/{rest_api['id']}/stages/test"
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == [None]
diff --git a/tests/providers/aws/services/apigatewayv2/apigatewayv2_access_logging_enabled/apigatewayv2_access_logging_enabled_test.py b/tests/providers/aws/services/apigatewayv2/apigatewayv2_access_logging_enabled/apigatewayv2_access_logging_enabled_test.py
index c06cb972f71..8b0f74aaceb 100644
--- a/tests/providers/aws/services/apigatewayv2/apigatewayv2_access_logging_enabled/apigatewayv2_access_logging_enabled_test.py
+++ b/tests/providers/aws/services/apigatewayv2/apigatewayv2_access_logging_enabled/apigatewayv2_access_logging_enabled_test.py
@@ -1,15 +1,14 @@
 from unittest import mock
 
 import botocore
-from boto3 import client, session
+from boto3 import client
 from mock import patch
-from moto import mock_apigatewayv2
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 # Mocking ApiGatewayV2 Calls
 make_api_call = botocore.client.BaseClient._make_api_call
@@ -40,44 +39,15 @@ def mock_make_api_call(self, operation_name, kwarg):
 
 @patch("botocore.client.BaseClient._make_api_call", new=mock_make_api_call)
 class Test_apigatewayv2_api_access_logging_enabled:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_apigatewayv2
+    @mock_aws
     def test_apigateway_no_apis(self):
         from prowler.providers.aws.services.apigatewayv2.apigatewayv2_service import (
             ApiGatewayV2,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -96,18 +66,21 @@ def test_apigateway_no_apis(self):
 
             assert len(result) == 0
 
-    @mock_apigatewayv2
+    @mock_aws
     def test_apigateway_one_api_with_logging_in_stage(self):
         # Create ApiGatewayV2 Mocked Resources
-        apigatewayv2_client = client("apigatewayv2", region_name=AWS_REGION)
+        apigatewayv2_client = client("apigatewayv2", region_name=AWS_REGION_US_EAST_1)
         # Create ApiGatewayV2 API
         api = apigatewayv2_client.create_api(Name="test-api", ProtocolType="HTTP")
+        api_id = api["ApiId"]
         # Get stages mock with stage with logging
         from prowler.providers.aws.services.apigatewayv2.apigatewayv2_service import (
             ApiGatewayV2,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -124,17 +97,17 @@ def test_apigateway_one_api_with_logging_in_stage(self):
             check = apigatewayv2_api_access_logging_enabled()
             result = check.execute()
 
-            assert result[0].status == "PASS"
             assert len(result) == 1
+            assert result[0].status == "PASS"
             assert (
                 result[0].status_extended
-                == f"API Gateway V2 test-api ID {api['ApiId']} in stage test-stage has access logging enabled."
+                == f"API Gateway V2 test-api ID {api_id} in stage test-stage has access logging enabled."
             )
 
-            assert result[0].resource_id == "test-api"
+            assert result[0].resource_id == "test-api-test-stage"
             assert (
                 result[0].resource_arn
-                == f"arn:aws:apigateway:{AWS_REGION}::apis/{api['ApiId']}"
+                == f"arn:aws:apigateway:{AWS_REGION_US_EAST_1}::apis/{api_id}"
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == [{}]
diff --git a/tests/providers/aws/services/apigatewayv2/apigatewayv2_authorizers_enabled/apigatewayv2_authorizers_enabled_test.py b/tests/providers/aws/services/apigatewayv2/apigatewayv2_authorizers_enabled/apigatewayv2_authorizers_enabled_test.py
index c2ae977accf..8196c21838d 100644
--- a/tests/providers/aws/services/apigatewayv2/apigatewayv2_authorizers_enabled/apigatewayv2_authorizers_enabled_test.py
+++ b/tests/providers/aws/services/apigatewayv2/apigatewayv2_authorizers_enabled/apigatewayv2_authorizers_enabled_test.py
@@ -1,15 +1,14 @@
 from unittest import mock
 
 import botocore
-from boto3 import client, session
+from boto3 import client
 from mock import patch
-from moto import mock_apigatewayv2
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 # Mocking ApiGatewayV2 Calls
 make_api_call = botocore.client.BaseClient._make_api_call
@@ -40,44 +39,15 @@ def mock_make_api_call(self, operation_name, kwarg):
 
 @patch("botocore.client.BaseClient._make_api_call", new=mock_make_api_call)
 class Test_apigatewayv2_api_authorizers_enabled:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_apigatewayv2
+    @mock_aws
     def test_apigateway_no_apis(self):
         from prowler.providers.aws.services.apigatewayv2.apigatewayv2_service import (
             ApiGatewayV2,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -96,10 +66,10 @@ def test_apigateway_no_apis(self):
 
             assert len(result) == 0
 
-    @mock_apigatewayv2
+    @mock_aws
     def test_apigateway_one_api_with_authorizer(self):
         # Create ApiGatewayV2 Mocked Resources
-        apigatewayv2_client = client("apigatewayv2", region_name=AWS_REGION)
+        apigatewayv2_client = client("apigatewayv2", region_name=AWS_REGION_US_EAST_1)
         # Create ApiGatewayV2 API
         api = apigatewayv2_client.create_api(Name="test-api", ProtocolType="HTTP")
         apigatewayv2_client.create_authorizer(
@@ -113,7 +83,9 @@ def test_apigateway_one_api_with_authorizer(self):
             ApiGatewayV2,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -130,8 +102,8 @@ def test_apigateway_one_api_with_authorizer(self):
             check = apigatewayv2_api_authorizers_enabled()
             result = check.execute()
 
-            assert result[0].status == "PASS"
             assert len(result) == 1
+            assert result[0].status == "PASS"
             assert (
                 result[0].status_extended
                 == f"API Gateway V2 test-api ID {api['ApiId']} has an authorizer configured."
@@ -139,7 +111,7 @@ def test_apigateway_one_api_with_authorizer(self):
             assert result[0].resource_id == "test-api"
             assert (
                 result[0].resource_arn
-                == f"arn:aws:apigateway:{AWS_REGION}::apis/{api['ApiId']}"
+                == f"arn:aws:apigateway:{AWS_REGION_US_EAST_1}::apis/{api['ApiId']}"
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == [{}]
diff --git a/tests/providers/aws/services/apigatewayv2/apigatewayv2_service_test.py b/tests/providers/aws/services/apigatewayv2/apigatewayv2_service_test.py
index 25dd31ace43..67234e28f6d 100644
--- a/tests/providers/aws/services/apigatewayv2/apigatewayv2_service_test.py
+++ b/tests/providers/aws/services/apigatewayv2/apigatewayv2_service_test.py
@@ -1,16 +1,16 @@
 import botocore
-from boto3 import client, session
+from boto3 import client
 from mock import patch
-from moto import mock_apigatewayv2
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.apigatewayv2.apigatewayv2_service import (
     ApiGatewayV2,
 )
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 # Mocking ApiGatewayV2 Calls
 make_api_call = botocore.client.BaseClient._make_api_call
@@ -41,90 +41,59 @@ def mock_make_api_call(self, operation_name, kwarg):
 
 @patch("botocore.client.BaseClient._make_api_call", new=mock_make_api_call)
 class Test_ApiGatewayV2_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test ApiGatewayV2 Service
-    @mock_apigatewayv2
+    @mock_aws
     def test_service(self):
         # ApiGatewayV2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         apigatewayv2 = ApiGatewayV2(audit_info)
         assert apigatewayv2.service == "apigatewayv2"
 
     # Test ApiGatewayV2 Client
-    @mock_apigatewayv2
+    @mock_aws
     def test_client(self):
         # ApiGatewayV2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         apigatewayv2 = ApiGatewayV2(audit_info)
         for regional_client in apigatewayv2.regional_clients.values():
             assert regional_client.__class__.__name__ == "ApiGatewayV2"
 
     # Test ApiGatewayV2 Session
-    @mock_apigatewayv2
+    @mock_aws
     def test__get_session__(self):
         # ApiGatewayV2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         apigatewayv2 = ApiGatewayV2(audit_info)
         assert apigatewayv2.session.__class__.__name__ == "Session"
 
     # Test ApiGatewayV2 Session
-    @mock_apigatewayv2
+    @mock_aws
     def test_audited_account(self):
         # ApiGatewayV2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         apigatewayv2 = ApiGatewayV2(audit_info)
         assert apigatewayv2.audited_account == AWS_ACCOUNT_NUMBER
 
     # Test ApiGatewayV2 Get APIs
-    @mock_apigatewayv2
+    @mock_aws
     def test__get_apis__(self):
         # Generate ApiGatewayV2 Client
-        apigatewayv2_client = client("apigatewayv2", region_name=AWS_REGION)
+        apigatewayv2_client = client("apigatewayv2", region_name=AWS_REGION_US_EAST_1)
         # Create ApiGatewayV2 API
         apigatewayv2_client.create_api(
             Name="test-api", ProtocolType="HTTP", Tags={"test": "test"}
         )
         # ApiGatewayV2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         apigatewayv2 = ApiGatewayV2(audit_info)
         assert len(apigatewayv2.apis) == len(apigatewayv2_client.get_apis()["Items"])
         assert apigatewayv2.apis[0].tags == [{"test": "test"}]
 
     # Test ApiGatewayV2 Get Authorizers
-    @mock_apigatewayv2
+    @mock_aws
     def test__get_authorizers__(self):
         # Generate ApiGatewayV2 Client
-        apigatewayv2_client = client("apigatewayv2", region_name=AWS_REGION)
+        apigatewayv2_client = client("apigatewayv2", region_name=AWS_REGION_US_EAST_1)
         # Create ApiGatewayV2 Rest API
         api = apigatewayv2_client.create_api(Name="test-api", ProtocolType="HTTP")
         # Create authorizer
@@ -136,18 +105,18 @@ def test__get_authorizers__(self):
             AuthorizerPayloadFormatVersion="2.0",
         )
         # ApiGatewayV2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         apigatewayv2 = ApiGatewayV2(audit_info)
         assert apigatewayv2.apis[0].authorizer is True
 
     # Test ApiGatewayV2 Get Stages
-    @mock_apigatewayv2
+    @mock_aws
     def test__get_stages__(self):
         # Generate ApiGatewayV2 Client
-        apigatewayv2_client = client("apigatewayv2", region_name=AWS_REGION)
+        apigatewayv2_client = client("apigatewayv2", region_name=AWS_REGION_US_EAST_1)
         # Create ApiGatewayV2 Rest API and a deployment stage
         apigatewayv2_client.create_api(Name="test-api", ProtocolType="HTTP")
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         apigatewayv2 = ApiGatewayV2(audit_info)
         assert apigatewayv2.apis[0].stages[0].logging is True
diff --git a/tests/providers/aws/services/appstream/appstream_service_test.py b/tests/providers/aws/services/appstream/appstream_service_test.py
index f00943e109f..456d87cab34 100644
--- a/tests/providers/aws/services/appstream/appstream_service_test.py
+++ b/tests/providers/aws/services/appstream/appstream_service_test.py
@@ -1,16 +1,16 @@
 from unittest.mock import patch
 
 import botocore
-from boto3 import session
-from moto.core import DEFAULT_ACCOUNT_ID
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.appstream.appstream_service import AppStream
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 # Mock Test Region
 AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
 
 # Mocking Access Analyzer Calls
 make_api_call = botocore.client.BaseClient._make_api_call
@@ -28,7 +28,7 @@ def mock_make_api_call(self, operation_name, kwarg):
         return {
             "Fleets": [
                 {
-                    "Arn": f"arn:aws:appstream:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:fleet/test-prowler3-0",
+                    "Arn": f"arn:aws:appstream:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:fleet/test-prowler3-0",
                     "Name": "test-prowler3-0",
                     "MaxUserDurationInSeconds": 100,
                     "DisconnectTimeoutInSeconds": 900,
@@ -36,7 +36,7 @@ def mock_make_api_call(self, operation_name, kwarg):
                     "EnableDefaultInternetAccess": False,
                 },
                 {
-                    "Arn": f"arn:aws:appstream:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:fleet/test-prowler3-1",
+                    "Arn": f"arn:aws:appstream:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:fleet/test-prowler3-1",
                     "Name": "test-prowler3-1",
                     "MaxUserDurationInSeconds": 57600,
                     "DisconnectTimeoutInSeconds": 900,
@@ -51,7 +51,7 @@ def mock_make_api_call(self, operation_name, kwarg):
 
 
 # Mock generate_regional_clients()
-def mock_generate_regional_clients(service, audit_info, _):
+def mock_generate_regional_clients(service, audit_info):
     regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
     regional_client.region = AWS_REGION
     return {AWS_REGION: regional_client}
@@ -64,60 +64,29 @@ def mock_generate_regional_clients(service, audit_info, _):
     new=mock_generate_regional_clients,
 )
 class Test_AppStream_Service:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
     # Test AppStream Client
     def test__get_client__(self):
-        appstream = AppStream(self.set_mocked_audit_info())
+        appstream = AppStream(set_mocked_aws_audit_info([AWS_REGION_US_EAST_1]))
         assert appstream.regional_clients[AWS_REGION].__class__.__name__ == "AppStream"
 
     # Test AppStream Session
     def test__get_session__(self):
-        appstream = AppStream(self.set_mocked_audit_info())
+        appstream = AppStream(set_mocked_aws_audit_info([AWS_REGION_US_EAST_1]))
         assert appstream.session.__class__.__name__ == "Session"
 
     # Test AppStream Session
     def test__get_service__(self):
-        appstream = AppStream(self.set_mocked_audit_info())
+        appstream = AppStream(set_mocked_aws_audit_info([AWS_REGION_US_EAST_1]))
         assert appstream.service == "appstream"
 
     def test__describe_fleets__(self):
         # Set partition for the service
-        appstream = AppStream(self.set_mocked_audit_info())
+        appstream = AppStream(set_mocked_aws_audit_info([AWS_REGION_US_EAST_1]))
         assert len(appstream.fleets) == 2
 
         assert (
             appstream.fleets[0].arn
-            == f"arn:aws:appstream:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:fleet/test-prowler3-0"
+            == f"arn:aws:appstream:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:fleet/test-prowler3-0"
         )
         assert appstream.fleets[0].name == "test-prowler3-0"
         assert appstream.fleets[0].max_user_duration_in_seconds == 100
@@ -128,7 +97,7 @@ def test__describe_fleets__(self):
 
         assert (
             appstream.fleets[1].arn
-            == f"arn:aws:appstream:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:fleet/test-prowler3-1"
+            == f"arn:aws:appstream:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:fleet/test-prowler3-1"
         )
         assert appstream.fleets[1].name == "test-prowler3-1"
         assert appstream.fleets[1].max_user_duration_in_seconds == 57600
@@ -139,7 +108,7 @@ def test__describe_fleets__(self):
 
     def test__list_tags_for_resource__(self):
         # Set partition for the service
-        appstream = AppStream(self.set_mocked_audit_info())
+        appstream = AppStream(set_mocked_aws_audit_info([AWS_REGION_US_EAST_1]))
         assert len(appstream.fleets) == 2
 
         assert appstream.fleets[0].tags == [{"test": "test"}]
diff --git a/tests/providers/aws/services/athena/athena_service_test.py b/tests/providers/aws/services/athena/athena_service_test.py
index d241d7e0f47..5daed07a273 100644
--- a/tests/providers/aws/services/athena/athena_service_test.py
+++ b/tests/providers/aws/services/athena/athena_service_test.py
@@ -1,15 +1,12 @@
-from boto3 import session
 from botocore.client import BaseClient
 from mock import patch
-from moto import mock_athena
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.athena.athena_service import Athena
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "eu-west-1"
-
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    set_mocked_aws_audit_info,
+)
 
 # Mocking Access Analyzer Calls
 make_api_call = BaseClient._make_api_call
@@ -42,10 +39,12 @@ def mock_make_api_call(self, operation_name, kwarg):
 
 
 # Mock generate_regional_clients()
-def mock_generate_regional_clients(service, audit_info, _):
-    regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
-    regional_client.region = AWS_REGION
-    return {AWS_REGION: regional_client}
+def mock_generate_regional_clients(service, audit_info):
+    regional_client = audit_info.audit_session.client(
+        service, region_name=AWS_REGION_EU_WEST_1
+    )
+    regional_client.region = AWS_REGION_EU_WEST_1
+    return {AWS_REGION_EU_WEST_1: regional_client}
 
 
 # Patch every AWS call using Boto3 and generate_regional_clients to have 1 client
@@ -54,49 +53,18 @@ def mock_generate_regional_clients(service, audit_info, _):
     new=mock_generate_regional_clients,
 )
 class Test_Athena_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test Athena Get Workgrups
-    @mock_athena
+    @mock_aws
     def test__get_workgroups__not_encrypted(self):
         default_workgroup_name = "primary"
-        audit_info = self.set_mocked_audit_info()
-        workgroup_arn = f"arn:{audit_info.audited_partition}:athena:{AWS_REGION}:{audit_info.audited_account}:workgroup/{default_workgroup_name}"
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
+        workgroup_arn = f"arn:{audit_info.audited_partition}:athena:{AWS_REGION_EU_WEST_1}:{audit_info.audited_account}:workgroup/{default_workgroup_name}"
         athena = Athena(audit_info)
         assert len(athena.workgroups) == 1
         assert athena.workgroups[workgroup_arn]
         assert athena.workgroups[workgroup_arn].arn == workgroup_arn
         assert athena.workgroups[workgroup_arn].name == default_workgroup_name
-        assert athena.workgroups[workgroup_arn].region == AWS_REGION
+        assert athena.workgroups[workgroup_arn].region == AWS_REGION_EU_WEST_1
         assert athena.workgroups[workgroup_arn].tags == []
         assert (
             athena.workgroups[workgroup_arn].encryption_configuration.encrypted is False
@@ -110,10 +78,10 @@ def test__get_workgroups__not_encrypted(self):
     # Test Athena Get Workgrups
     # We mock the get_work_group to return an encrypted workgroup
     @patch("botocore.client.BaseClient._make_api_call", new=mock_make_api_call)
-    @mock_athena
+    @mock_aws
     def test__get_workgroups__encrypted(self):
         default_workgroup_name = "primary"
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
 
         # Athena client
         # This API call is not implemented by Moto
@@ -129,13 +97,13 @@ def test__get_workgroups__encrypted(self):
         #     },
         # )
 
-        workgroup_arn = f"arn:{audit_info.audited_partition}:athena:{AWS_REGION}:{audit_info.audited_account}:workgroup/{default_workgroup_name}"
+        workgroup_arn = f"arn:{audit_info.audited_partition}:athena:{AWS_REGION_EU_WEST_1}:{audit_info.audited_account}:workgroup/{default_workgroup_name}"
         athena = Athena(audit_info)
         assert len(athena.workgroups) == 1
         assert athena.workgroups[workgroup_arn]
         assert athena.workgroups[workgroup_arn].arn == workgroup_arn
         assert athena.workgroups[workgroup_arn].name == default_workgroup_name
-        assert athena.workgroups[workgroup_arn].region == AWS_REGION
+        assert athena.workgroups[workgroup_arn].region == AWS_REGION_EU_WEST_1
         assert athena.workgroups[workgroup_arn].tags == []
         assert (
             athena.workgroups[workgroup_arn].encryption_configuration.encrypted is True
diff --git a/tests/providers/aws/services/athena/athena_workgroup_encryption/athena_workgroup_encryption_test.py b/tests/providers/aws/services/athena/athena_workgroup_encryption/athena_workgroup_encryption_test.py
index 267f1ecb91a..4753afa41ec 100644
--- a/tests/providers/aws/services/athena/athena_workgroup_encryption/athena_workgroup_encryption_test.py
+++ b/tests/providers/aws/services/athena/athena_workgroup_encryption/athena_workgroup_encryption_test.py
@@ -1,56 +1,25 @@
 from unittest import mock
 
-from boto3 import session
 from mock import patch
-from moto import mock_athena
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    set_mocked_aws_audit_info,
+)
 from tests.providers.aws.services.athena.athena_service_test import mock_make_api_call
 
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
 ATHENA_PRIMARY_WORKGROUP = "primary"
-ATHENA_PRIMARY_WORKGROUP_ARN = f"arn:aws:athena:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:workgroup/{ATHENA_PRIMARY_WORKGROUP}"
+ATHENA_PRIMARY_WORKGROUP_ARN = f"arn:aws:athena:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:workgroup/{ATHENA_PRIMARY_WORKGROUP}"
 
 
 class Test_athena_workgroup_encryption:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=[AWS_REGION],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_athena
+    @mock_aws
     def test_primary_workgroup_not_encrypted(self):
         from prowler.providers.aws.services.athena.athena_service import Athena
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -74,14 +43,14 @@ def test_primary_workgroup_not_encrypted(self):
             )
             assert result[0].resource_id == ATHENA_PRIMARY_WORKGROUP
             assert result[0].resource_arn == ATHENA_PRIMARY_WORKGROUP_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
             assert result[0].resource_tags == []
 
-    @mock_athena
+    @mock_aws
     def test_primary_workgroup_not_encrypted_ignoring(self):
         from prowler.providers.aws.services.athena.athena_service import Athena
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
         current_audit_info.ignore_unused_services = True
 
         with mock.patch(
@@ -100,13 +69,13 @@ def test_primary_workgroup_not_encrypted_ignoring(self):
 
             assert len(result) == 0
 
-    @mock_athena
+    @mock_aws
     # We mock the get_work_group to return an encrypted workgroup
     @patch("botocore.client.BaseClient._make_api_call", new=mock_make_api_call)
     def test_primary_workgroup_encrypted(self):
         from prowler.providers.aws.services.athena.athena_service import Athena
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -130,5 +99,5 @@ def test_primary_workgroup_encrypted(self):
             )
             assert result[0].resource_id == ATHENA_PRIMARY_WORKGROUP
             assert result[0].resource_arn == ATHENA_PRIMARY_WORKGROUP_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
             assert result[0].resource_tags == []
diff --git a/tests/providers/aws/services/athena/athena_workgroup_enforce_configuration/athena_workgroup_enforce_configuration_test.py b/tests/providers/aws/services/athena/athena_workgroup_enforce_configuration/athena_workgroup_enforce_configuration_test.py
index b7c81913f5f..f7bc1c0da38 100644
--- a/tests/providers/aws/services/athena/athena_workgroup_enforce_configuration/athena_workgroup_enforce_configuration_test.py
+++ b/tests/providers/aws/services/athena/athena_workgroup_enforce_configuration/athena_workgroup_enforce_configuration_test.py
@@ -1,56 +1,25 @@
 from unittest import mock
 
-from boto3 import session
 from mock import patch
-from moto import mock_athena
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    set_mocked_aws_audit_info,
+)
 from tests.providers.aws.services.athena.athena_service_test import mock_make_api_call
 
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
 ATHENA_PRIMARY_WORKGROUP = "primary"
-ATHENA_PRIMARY_WORKGROUP_ARN = f"arn:aws:athena:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:workgroup/{ATHENA_PRIMARY_WORKGROUP}"
+ATHENA_PRIMARY_WORKGROUP_ARN = f"arn:aws:athena:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:workgroup/{ATHENA_PRIMARY_WORKGROUP}"
 
 
 class Test_athena_workgroup_enforce_configuration:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=[AWS_REGION],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_athena
+    @mock_aws
     def test_primary_workgroup_configuration_not_enforced(self):
         from prowler.providers.aws.services.athena.athena_service import Athena
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -74,14 +43,14 @@ def test_primary_workgroup_configuration_not_enforced(self):
             )
             assert result[0].resource_id == ATHENA_PRIMARY_WORKGROUP
             assert result[0].resource_arn == ATHENA_PRIMARY_WORKGROUP_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
             assert result[0].resource_tags == []
 
-    @mock_athena
+    @mock_aws
     def test_primary_workgroup_configuration_not_enforced_ignoring(self):
         from prowler.providers.aws.services.athena.athena_service import Athena
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
         current_audit_info.ignore_unused_services = True
 
         with mock.patch(
@@ -100,13 +69,13 @@ def test_primary_workgroup_configuration_not_enforced_ignoring(self):
 
             assert len(result) == 0
 
-    @mock_athena
+    @mock_aws
     # We mock the get_work_group to return a workgroup not enforcing configuration
     @patch("botocore.client.BaseClient._make_api_call", new=mock_make_api_call)
     def test_primary_workgroup_configuration_enforced(self):
         from prowler.providers.aws.services.athena.athena_service import Athena
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -130,5 +99,5 @@ def test_primary_workgroup_configuration_enforced(self):
             )
             assert result[0].resource_id == ATHENA_PRIMARY_WORKGROUP
             assert result[0].resource_arn == ATHENA_PRIMARY_WORKGROUP_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
             assert result[0].resource_tags == []
diff --git a/tests/providers/aws/services/autoscaling/autoscaling_find_secrets_ec2_launch_configuration/autoscaling_find_secrets_ec2_launch_configuration_test.py b/tests/providers/aws/services/autoscaling/autoscaling_find_secrets_ec2_launch_configuration/autoscaling_find_secrets_ec2_launch_configuration_test.py
index bb24d25048a..6a40b3416ef 100644
--- a/tests/providers/aws/services/autoscaling/autoscaling_find_secrets_ec2_launch_configuration/autoscaling_find_secrets_ec2_launch_configuration_test.py
+++ b/tests/providers/aws/services/autoscaling/autoscaling_find_secrets_ec2_launch_configuration/autoscaling_find_secrets_ec2_launch_configuration_test.py
@@ -2,61 +2,29 @@
 from pathlib import Path
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_autoscaling
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 ACTUAL_DIRECTORY = Path(path.dirname(path.realpath(__file__)))
 FIXTURES_DIR_NAME = "fixtures"
 
 
 class Test_autoscaling_find_secrets_ec2_launch_configuration:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_autoscaling
+    @mock_aws
     def test_no_autoscaling(self):
-        autoscaling_client = client("autoscaling", region_name=AWS_REGION)
+        autoscaling_client = client("autoscaling", region_name=AWS_REGION_US_EAST_1)
         autoscaling_client.launch_configurations = []
 
         from prowler.providers.aws.services.autoscaling.autoscaling_service import (
             AutoScaling,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -75,11 +43,11 @@ def test_no_autoscaling(self):
 
             assert len(result) == 0
 
-    @mock_autoscaling
+    @mock_aws
     def test_one_autoscaling_with_no_secrets(self):
         # Include launch_configurations to check
         launch_configuration_name = "tester"
-        autoscaling_client = client("autoscaling", region_name=AWS_REGION)
+        autoscaling_client = client("autoscaling", region_name=AWS_REGION_US_EAST_1)
         autoscaling_client.create_launch_configuration(
             LaunchConfigurationName=launch_configuration_name,
             ImageId="ami-12c6146b",
@@ -96,7 +64,7 @@ def test_one_autoscaling_with_no_secrets(self):
             AutoScaling,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -120,13 +88,13 @@ def test_one_autoscaling_with_no_secrets(self):
             )
             assert result[0].resource_id == launch_configuration_name
             assert result[0].resource_arn == launch_configuration_arn
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_autoscaling
+    @mock_aws
     def test_one_autoscaling_with_secrets(self):
         # Include launch_configurations to check
         launch_configuration_name = "tester"
-        autoscaling_client = client("autoscaling", region_name=AWS_REGION)
+        autoscaling_client = client("autoscaling", region_name=AWS_REGION_US_EAST_1)
         autoscaling_client.create_launch_configuration(
             LaunchConfigurationName=launch_configuration_name,
             ImageId="ami-12c6146b",
@@ -143,7 +111,7 @@ def test_one_autoscaling_with_secrets(self):
             AutoScaling,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -167,9 +135,9 @@ def test_one_autoscaling_with_secrets(self):
             )
             assert result[0].resource_id == launch_configuration_name
             assert result[0].resource_arn == launch_configuration_arn
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_autoscaling
+    @mock_aws
     def test_one_autoscaling_file_with_secrets(self):
         # Include launch_configurations to check
         f = open(
@@ -178,7 +146,7 @@ def test_one_autoscaling_file_with_secrets(self):
         )
         secrets = f.read()
         launch_configuration_name = "tester"
-        autoscaling_client = client("autoscaling", region_name=AWS_REGION)
+        autoscaling_client = client("autoscaling", region_name=AWS_REGION_US_EAST_1)
         autoscaling_client.create_launch_configuration(
             LaunchConfigurationName="tester",
             ImageId="ami-12c6146b",
@@ -195,7 +163,7 @@ def test_one_autoscaling_file_with_secrets(self):
             AutoScaling,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -219,13 +187,13 @@ def test_one_autoscaling_file_with_secrets(self):
             )
             assert result[0].resource_id == launch_configuration_name
             assert result[0].resource_arn == launch_configuration_arn
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_autoscaling
+    @mock_aws
     def test_one_launch_configurations_without_user_data(self):
         # Include launch_configurations to check
         launch_configuration_name = "tester"
-        autoscaling_client = client("autoscaling", region_name=AWS_REGION)
+        autoscaling_client = client("autoscaling", region_name=AWS_REGION_US_EAST_1)
         autoscaling_client.create_launch_configuration(
             LaunchConfigurationName=launch_configuration_name,
             ImageId="ami-12c6146b",
@@ -241,7 +209,7 @@ def test_one_launch_configurations_without_user_data(self):
             AutoScaling,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -265,9 +233,9 @@ def test_one_launch_configurations_without_user_data(self):
             )
             assert result[0].resource_id == launch_configuration_name
             assert result[0].resource_arn == launch_configuration_arn
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_autoscaling
+    @mock_aws
     def test_one_autoscaling_file_with_secrets_gzip(self):
         # Include launch_configurations to check
         f = open(
@@ -277,7 +245,7 @@ def test_one_autoscaling_file_with_secrets_gzip(self):
 
         secrets = f.read()
         launch_configuration_name = "tester"
-        autoscaling_client = client("autoscaling", region_name=AWS_REGION)
+        autoscaling_client = client("autoscaling", region_name=AWS_REGION_US_EAST_1)
         autoscaling_client.create_launch_configuration(
             LaunchConfigurationName="tester",
             ImageId="ami-12c6146b",
@@ -294,7 +262,7 @@ def test_one_autoscaling_file_with_secrets_gzip(self):
             AutoScaling,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -318,4 +286,4 @@ def test_one_autoscaling_file_with_secrets_gzip(self):
             )
             assert result[0].resource_id == launch_configuration_name
             assert result[0].resource_arn == launch_configuration_arn
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/autoscaling/autoscaling_group_multiple_az/autoscaling_group_multiple_az_test.py b/tests/providers/aws/services/autoscaling/autoscaling_group_multiple_az/autoscaling_group_multiple_az_test.py
index 79d0f992893..604ed90eafe 100644
--- a/tests/providers/aws/services/autoscaling/autoscaling_group_multiple_az/autoscaling_group_multiple_az_test.py
+++ b/tests/providers/aws/services/autoscaling/autoscaling_group_multiple_az/autoscaling_group_multiple_az_test.py
@@ -1,57 +1,25 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_autoscaling
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_autoscaling_group_multiple_az:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_autoscaling
+    @mock_aws
     def test_no_autoscaling(self):
-        autoscaling_client = client("autoscaling", region_name=AWS_REGION)
+        autoscaling_client = client("autoscaling", region_name=AWS_REGION_US_EAST_1)
         autoscaling_client.groups = []
 
         from prowler.providers.aws.services.autoscaling.autoscaling_service import (
             AutoScaling,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -70,9 +38,9 @@ def test_no_autoscaling(self):
 
             assert len(result) == 0
 
-    @mock_autoscaling
+    @mock_aws
     def test_groups_with_multi_az(self):
-        autoscaling_client = client("autoscaling", region_name=AWS_REGION)
+        autoscaling_client = client("autoscaling", region_name=AWS_REGION_US_EAST_1)
         autoscaling_client.create_launch_configuration(
             LaunchConfigurationName="test",
             ImageId="ami-12c6146b",
@@ -98,7 +66,7 @@ def test_groups_with_multi_az(self):
             AutoScaling,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -123,12 +91,12 @@ def test_groups_with_multi_az(self):
             )
             assert result[0].resource_id == autoscaling_group_name
             assert result[0].resource_arn == autoscaling_group_arn
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == []
 
-    @mock_autoscaling
+    @mock_aws
     def test_groups_with_single_az(self):
-        autoscaling_client = client("autoscaling", region_name=AWS_REGION)
+        autoscaling_client = client("autoscaling", region_name=AWS_REGION_US_EAST_1)
         autoscaling_client.create_launch_configuration(
             LaunchConfigurationName="test",
             ImageId="ami-12c6146b",
@@ -154,7 +122,7 @@ def test_groups_with_single_az(self):
             AutoScaling,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -181,9 +149,9 @@ def test_groups_with_single_az(self):
             assert result[0].resource_tags == []
             assert result[0].resource_arn == autoscaling_group_arn
 
-    @mock_autoscaling
+    @mock_aws
     def test_groups_witd_and_without(self):
-        autoscaling_client = client("autoscaling", region_name=AWS_REGION)
+        autoscaling_client = client("autoscaling", region_name=AWS_REGION_US_EAST_1)
         autoscaling_client.create_launch_configuration(
             LaunchConfigurationName="test",
             ImageId="ami-12c6146b",
@@ -221,7 +189,7 @@ def test_groups_witd_and_without(self):
             AutoScaling,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -248,7 +216,7 @@ def test_groups_witd_and_without(self):
                     )
                     assert check.resource_arn == autoscaling_group_arn_1
                     assert check.resource_tags == []
-                    assert check.region == AWS_REGION
+                    assert check.region == AWS_REGION_US_EAST_1
                 if check.resource_id == autoscaling_group_name_2:
                     assert check.status == "FAIL"
                     assert (
@@ -257,4 +225,4 @@ def test_groups_witd_and_without(self):
                     )
                     assert check.resource_tags == []
                     assert check.resource_arn == autoscaling_group_arn_2
-                    assert check.region == AWS_REGION
+                    assert check.region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/autoscaling/autoscaling_service_test.py b/tests/providers/aws/services/autoscaling/autoscaling_service_test.py
index 0c6b6080fe8..230181436ed 100644
--- a/tests/providers/aws/services/autoscaling/autoscaling_service_test.py
+++ b/tests/providers/aws/services/autoscaling/autoscaling_service_test.py
@@ -1,86 +1,55 @@
 from base64 import b64decode
 
-from boto3 import client, session
-from moto import mock_autoscaling
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.autoscaling.autoscaling_service import AutoScaling
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_AutoScaling_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test AutoScaling Service
-    @mock_autoscaling
+    @mock_aws
     def test_service(self):
         # AutoScaling client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         autoscaling = AutoScaling(audit_info)
         assert autoscaling.service == "autoscaling"
 
     # Test AutoScaling Client
-    @mock_autoscaling
+    @mock_aws
     def test_client(self):
         # AutoScaling client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         autoscaling = AutoScaling(audit_info)
         for regional_client in autoscaling.regional_clients.values():
             assert regional_client.__class__.__name__ == "AutoScaling"
 
     # Test AutoScaling Session
-    @mock_autoscaling
+    @mock_aws
     def test__get_session__(self):
         # AutoScaling client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         autoscaling = AutoScaling(audit_info)
         assert autoscaling.session.__class__.__name__ == "Session"
 
     # Test AutoScaling Session
-    @mock_autoscaling
+    @mock_aws
     def test_audited_account(self):
         # AutoScaling client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         autoscaling = AutoScaling(audit_info)
         assert autoscaling.audited_account == AWS_ACCOUNT_NUMBER
 
     # Test AutoScaling Get APIs
-    @mock_autoscaling
+    @mock_aws
     def test__describe_launch_configurations__(self):
         # Generate AutoScaling Client
-        autoscaling_client = client("autoscaling", region_name=AWS_REGION)
+        autoscaling_client = client("autoscaling", region_name=AWS_REGION_US_EAST_1)
         # Create AutoScaling API
         autoscaling_client.create_launch_configuration(
             LaunchConfigurationName="tester1",
@@ -98,7 +67,7 @@ def test__describe_launch_configurations__(self):
             SecurityGroups=["default", "default2"],
         )
         # AutoScaling client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         autoscaling = AutoScaling(audit_info)
         assert len(autoscaling.launch_configurations) == 2
         assert autoscaling.launch_configurations[0].name == "tester1"
@@ -111,10 +80,10 @@ def test__describe_launch_configurations__(self):
         assert autoscaling.launch_configurations[1].name == "tester2"
 
     # Test Describe Auto Scaling Groups
-    @mock_autoscaling
+    @mock_aws
     def test__describe_auto_scaling_groups__(self):
         # Generate AutoScaling Client
-        autoscaling_client = client("autoscaling", region_name=AWS_REGION)
+        autoscaling_client = client("autoscaling", region_name=AWS_REGION_US_EAST_1)
         autoscaling_client.create_launch_configuration(
             LaunchConfigurationName="test",
             ImageId="ami-12c6146b",
@@ -138,14 +107,14 @@ def test__describe_auto_scaling_groups__(self):
         )
 
         # AutoScaling client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         autoscaling = AutoScaling(audit_info)
         print("asg", asg)
         assert len(autoscaling.groups) == 1
         # create_auto_scaling_group doesn't return the ARN, can't check it
         # assert autoscaling.groups[0].arn ==
         assert autoscaling.groups[0].name == "my-autoscaling-group"
-        assert autoscaling.groups[0].region == AWS_REGION
+        assert autoscaling.groups[0].region == AWS_REGION_US_EAST_1
         assert autoscaling.groups[0].availability_zones == ["us-east-1a", "us-east-1b"]
         assert autoscaling.groups[0].tags == [
             {
diff --git a/tests/providers/aws/services/awslambda/awslambda_function_invoke_api_operations_cloudtrail_logging_enabled/awslambda_function_invoke_api_operations_cloudtrail_logging_enabled_test.py b/tests/providers/aws/services/awslambda/awslambda_function_invoke_api_operations_cloudtrail_logging_enabled/awslambda_function_invoke_api_operations_cloudtrail_logging_enabled_test.py
index 32c678309bd..90a06de20df 100644
--- a/tests/providers/aws/services/awslambda/awslambda_function_invoke_api_operations_cloudtrail_logging_enabled/awslambda_function_invoke_api_operations_cloudtrail_logging_enabled_test.py
+++ b/tests/providers/aws/services/awslambda/awslambda_function_invoke_api_operations_cloudtrail_logging_enabled/awslambda_function_invoke_api_operations_cloudtrail_logging_enabled_test.py
@@ -2,18 +2,18 @@
 
 from boto3 import client
 from mock import patch
-from moto import mock_cloudtrail, mock_s3
-from moto.core import DEFAULT_ACCOUNT_ID
+from moto import mock_aws
 
 from prowler.providers.aws.services.awslambda.awslambda_service import Function
 from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
     AWS_REGION_US_EAST_1,
     set_mocked_aws_audit_info,
 )
 
 
 # Mock generate_regional_clients()
-def mock_generate_regional_clients(service, audit_info, _):
+def mock_generate_regional_clients(service, audit_info):
     regional_client = audit_info.audit_session.client(
         service, region_name=AWS_REGION_US_EAST_1
     )
@@ -27,7 +27,7 @@ def mock_generate_regional_clients(service, audit_info, _):
     new=mock_generate_regional_clients,
 )
 class Test_awslambda_function_invoke_api_operations_cloudtrail_logging_enabled:
-    @mock_cloudtrail
+    @mock_aws
     def test_no_functions(self):
         lambda_client = mock.MagicMock
         lambda_client.functions = {}
@@ -58,14 +58,13 @@ def test_no_functions(self):
 
             assert len(result) == 0
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_lambda_not_recorded_by_cloudtrail(self):
         # Lambda Client
         lambda_client = mock.MagicMock
         function_name = "test-lambda"
         function_runtime = "python3.9"
-        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{DEFAULT_ACCOUNT_ID}:function/{function_name}"
+        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:function/{function_name}"
         lambda_client.functions = {
             function_name: Function(
                 name=function_name,
@@ -121,14 +120,13 @@ def test_lambda_not_recorded_by_cloudtrail(self):
             )
             assert result[0].resource_tags == []
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_lambda_recorded_by_cloudtrail_classic_event_selector(self):
         # Lambda Client
         lambda_client = mock.MagicMock
         function_name = "test-lambda"
         function_runtime = "python3.9"
-        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{DEFAULT_ACCOUNT_ID}:function/{function_name}"
+        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:function/{function_name}"
         lambda_client.functions = {
             function_name: Function(
                 name=function_name,
@@ -196,14 +194,13 @@ def test_lambda_recorded_by_cloudtrail_classic_event_selector(self):
             )
             assert result[0].resource_tags == []
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_lambda_recorded_by_cloudtrail_advanced_event_selector(self):
         # Lambda Client
         lambda_client = mock.MagicMock
         function_name = "test-lambda"
         function_runtime = "python3.9"
-        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{DEFAULT_ACCOUNT_ID}:function/{function_name}"
+        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:function/{function_name}"
         lambda_client.functions = {
             function_name: Function(
                 name=function_name,
@@ -274,8 +271,7 @@ def test_lambda_recorded_by_cloudtrail_advanced_event_selector(self):
             )
             assert result[0].resource_tags == []
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_all_lambdas_recorded_by_cloudtrail(self):
         # Lambda Client
         lambda_client = mock.MagicMock
diff --git a/tests/providers/aws/services/awslambda/awslambda_function_no_secrets_in_code/awslambda_function_no_secrets_in_code_test.py b/tests/providers/aws/services/awslambda/awslambda_function_no_secrets_in_code/awslambda_function_no_secrets_in_code_test.py
index 89277d1b6f0..fa0ec88c633 100644
--- a/tests/providers/aws/services/awslambda/awslambda_function_no_secrets_in_code/awslambda_function_no_secrets_in_code_test.py
+++ b/tests/providers/aws/services/awslambda/awslambda_function_no_secrets_in_code/awslambda_function_no_secrets_in_code_test.py
@@ -1,17 +1,62 @@
 import zipfile
 from unittest import mock
 
-from awslambda_service_test import create_zip_file
-from moto.core import DEFAULT_ACCOUNT_ID
-
 from prowler.providers.aws.services.awslambda.awslambda_service import (
     Function,
     LambdaCode,
 )
 from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
     AWS_REGION_US_EAST_1,
     set_mocked_aws_audit_info,
 )
+from tests.providers.aws.services.awslambda.awslambda_service_test import (
+    create_zip_file,
+)
+
+LAMBDA_FUNCTION_NAME = "test-lambda"
+LAMBDA_FUNCTION_RUNTIME = "nodejs4.3"
+LAMBDA_FUNCTION_ARN = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:function/{LAMBDA_FUNCTION_NAME}"
+LAMBDA_FUNCTION_CODE_WITH_SECRETS = """
+def lambda_handler(event, context):
+        db_password = "test-password"
+        print("custom log event")
+        return event
+"""
+LAMBDA_FUNCTION_CODE_WITHOUT_SECRETS = """
+def lambda_handler(event, context):
+        print("custom log event")
+        return event
+"""
+
+
+def create_lambda_function() -> Function:
+    return Function(
+        name=LAMBDA_FUNCTION_NAME,
+        security_groups=[],
+        arn=LAMBDA_FUNCTION_ARN,
+        region=AWS_REGION_US_EAST_1,
+        runtime=LAMBDA_FUNCTION_RUNTIME,
+    )
+
+
+def get_lambda_code_with_secrets(code):
+    return LambdaCode(
+        location="",
+        code_zip=zipfile.ZipFile(create_zip_file(code)),
+    )
+
+
+def mock__get_function_code__with_secrets():
+    yield create_lambda_function(), get_lambda_code_with_secrets(
+        LAMBDA_FUNCTION_CODE_WITH_SECRETS
+    )
+
+
+def mock__get_function_code__without_secrets():
+    yield create_lambda_function(), get_lambda_code_with_secrets(
+        LAMBDA_FUNCTION_CODE_WITHOUT_SECRETS
+    )
 
 
 class Test_awslambda_function_no_secrets_in_code:
@@ -38,29 +83,8 @@ def test_no_functions(self):
 
     def test_function_code_with_secrets(self):
         lambda_client = mock.MagicMock
-        function_name = "test-lambda"
-        function_runtime = "nodejs4.3"
-        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{DEFAULT_ACCOUNT_ID}:function/{function_name}"
-        code_with_secrets = """
-        def lambda_handler(event, context):
-                db_password = "test-password"
-                print("custom log event")
-                return event
-        """
-        lambda_client.functions = {
-            "function_name": Function(
-                name=function_name,
-                security_groups=[],
-                arn=function_arn,
-                region=AWS_REGION_US_EAST_1,
-                runtime=function_runtime,
-                code=LambdaCode(
-                    location="",
-                    code_zip=zipfile.ZipFile(create_zip_file(code_with_secrets)),
-                ),
-            )
-        }
-
+        lambda_client.functions = {LAMBDA_FUNCTION_ARN: create_lambda_function()}
+        lambda_client.__get_function_code__ = mock__get_function_code__with_secrets
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
             set_mocked_aws_audit_info(),
@@ -78,38 +102,20 @@ def lambda_handler(event, context):
 
             assert len(result) == 1
             assert result[0].region == AWS_REGION_US_EAST_1
-            assert result[0].resource_id == function_name
-            assert result[0].resource_arn == function_arn
+            assert result[0].resource_id == LAMBDA_FUNCTION_NAME
+            assert result[0].resource_arn == LAMBDA_FUNCTION_ARN
             assert result[0].status == "FAIL"
             assert (
                 result[0].status_extended
-                == f"Potential secret found in Lambda function {function_name} code -> lambda_function.py: Secret Keyword on line 3."
+                == f"Potential secret found in Lambda function {LAMBDA_FUNCTION_NAME} code -> lambda_function.py: Secret Keyword on line 3."
             )
             assert result[0].resource_tags == []
 
     def test_function_code_without_secrets(self):
         lambda_client = mock.MagicMock
-        function_name = "test-lambda"
-        function_runtime = "nodejs4.3"
-        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{DEFAULT_ACCOUNT_ID}:function/{function_name}"
-        code_with_secrets = """
-        def lambda_handler(event, context):
-                print("custom log event")
-                return event
-        """
-        lambda_client.functions = {
-            "function_name": Function(
-                name=function_name,
-                security_groups=[],
-                arn=function_arn,
-                region=AWS_REGION_US_EAST_1,
-                runtime=function_runtime,
-                code=LambdaCode(
-                    location="",
-                    code_zip=zipfile.ZipFile(create_zip_file(code_with_secrets)),
-                ),
-            )
-        }
+        lambda_client.functions = {LAMBDA_FUNCTION_ARN: create_lambda_function()}
+
+        lambda_client.__get_function_code__ = mock__get_function_code__without_secrets
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -128,11 +134,11 @@ def lambda_handler(event, context):
 
             assert len(result) == 1
             assert result[0].region == AWS_REGION_US_EAST_1
-            assert result[0].resource_id == function_name
-            assert result[0].resource_arn == function_arn
+            assert result[0].resource_id == LAMBDA_FUNCTION_NAME
+            assert result[0].resource_arn == LAMBDA_FUNCTION_ARN
             assert result[0].status == "PASS"
             assert (
                 result[0].status_extended
-                == f"No secrets found in Lambda function {function_name} code."
+                == f"No secrets found in Lambda function {LAMBDA_FUNCTION_NAME} code."
             )
             assert result[0].resource_tags == []
diff --git a/tests/providers/aws/services/awslambda/awslambda_function_no_secrets_in_variables/awslambda_function_no_secrets_in_variables_test.py b/tests/providers/aws/services/awslambda/awslambda_function_no_secrets_in_variables/awslambda_function_no_secrets_in_variables_test.py
index ef9100c4a9d..97ba6e7ed6e 100644
--- a/tests/providers/aws/services/awslambda/awslambda_function_no_secrets_in_variables/awslambda_function_no_secrets_in_variables_test.py
+++ b/tests/providers/aws/services/awslambda/awslambda_function_no_secrets_in_variables/awslambda_function_no_secrets_in_variables_test.py
@@ -1,9 +1,8 @@
 from unittest import mock
 
-from moto.core import DEFAULT_ACCOUNT_ID
-
 from prowler.providers.aws.services.awslambda.awslambda_service import Function
 from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
     AWS_REGION_US_EAST_1,
     set_mocked_aws_audit_info,
 )
@@ -35,7 +34,7 @@ def test_function_no_variables(self):
         lambda_client = mock.MagicMock
         function_name = "test-lambda"
         function_runtime = "nodejs4.3"
-        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{DEFAULT_ACCOUNT_ID}:function/{function_name}"
+        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:function/{function_name}"
 
         lambda_client.functions = {
             "function_name": Function(
@@ -77,7 +76,7 @@ def test_function_secrets_in_variables(self):
         lambda_client = mock.MagicMock
         function_name = "test-lambda"
         function_runtime = "nodejs4.3"
-        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{DEFAULT_ACCOUNT_ID}:function/{function_name}"
+        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:function/{function_name}"
 
         lambda_client.functions = {
             "function_name": Function(
@@ -120,7 +119,7 @@ def test_function_no_secrets_in_variables(self):
         lambda_client = mock.MagicMock
         function_name = "test-lambda"
         function_runtime = "nodejs4.3"
-        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{DEFAULT_ACCOUNT_ID}:function/{function_name}"
+        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:function/{function_name}"
 
         lambda_client.functions = {
             "function_name": Function(
diff --git a/tests/providers/aws/services/awslambda/awslambda_function_not_publicly_accessible/awslambda_function_not_publicly_accessible_test.py b/tests/providers/aws/services/awslambda/awslambda_function_not_publicly_accessible/awslambda_function_not_publicly_accessible_test.py
index f4e8cbe5ab2..0d08cad4a7f 100644
--- a/tests/providers/aws/services/awslambda/awslambda_function_not_publicly_accessible/awslambda_function_not_publicly_accessible_test.py
+++ b/tests/providers/aws/services/awslambda/awslambda_function_not_publicly_accessible/awslambda_function_not_publicly_accessible_test.py
@@ -1,9 +1,8 @@
 from unittest import mock
 
-from moto.core import DEFAULT_ACCOUNT_ID
-
 from prowler.providers.aws.services.awslambda.awslambda_service import Function
 from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
     AWS_REGION_US_EAST_1,
     set_mocked_aws_audit_info,
 )
@@ -35,13 +34,13 @@ def test_function_public(self):
         lambda_client = mock.MagicMock
         function_name = "test-lambda"
         function_runtime = "nodejs4.3"
-        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{DEFAULT_ACCOUNT_ID}:function/{function_name}"
+        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:function/{function_name}"
         lambda_policy = {
             "Version": "2012-10-17",
             "Statement": [
                 {
                     "Sid": "public-access",
-                    "Principal": {"AWS": ["*", DEFAULT_ACCOUNT_ID]},
+                    "Principal": {"AWS": ["*", AWS_ACCOUNT_NUMBER]},
                     "Effect": "Allow",
                     "Action": [
                         "lambda:InvokeFunction",
@@ -92,13 +91,13 @@ def test_function_not_public(self):
         lambda_client = mock.MagicMock
         function_name = "test-lambda"
         function_runtime = "nodejs4.3"
-        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{DEFAULT_ACCOUNT_ID}:function/{function_name}"
+        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:function/{function_name}"
         lambda_policy = {
             "Version": "2012-10-17",
             "Statement": [
                 {
                     "Sid": "public-access",
-                    "Principal": {"AWS": [DEFAULT_ACCOUNT_ID]},
+                    "Principal": {"AWS": [AWS_ACCOUNT_NUMBER]},
                     "Effect": "Allow",
                     "Action": [
                         "lambda:InvokeFunction",
@@ -149,7 +148,7 @@ def test_function_public_with_canonical(self):
         lambda_client = mock.MagicMock
         function_name = "test-lambda"
         function_runtime = "nodejs4.3"
-        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{DEFAULT_ACCOUNT_ID}:function/{function_name}"
+        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:function/{function_name}"
         lambda_policy = {
             "Version": "2012-10-17",
             "Statement": [
diff --git a/tests/providers/aws/services/awslambda/awslambda_function_url_cors_policy/awslambda_function_url_cors_policy_test.py b/tests/providers/aws/services/awslambda/awslambda_function_url_cors_policy/awslambda_function_url_cors_policy_test.py
index edc80e46c27..e7d63f671c6 100644
--- a/tests/providers/aws/services/awslambda/awslambda_function_url_cors_policy/awslambda_function_url_cors_policy_test.py
+++ b/tests/providers/aws/services/awslambda/awslambda_function_url_cors_policy/awslambda_function_url_cors_policy_test.py
@@ -1,7 +1,5 @@
 from unittest import mock
 
-from moto.core import DEFAULT_ACCOUNT_ID
-
 from prowler.providers.aws.services.awslambda.awslambda_service import (
     AuthType,
     Function,
@@ -9,6 +7,7 @@
     URLConfigCORS,
 )
 from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
     AWS_REGION_US_EAST_1,
     set_mocked_aws_audit_info,
 )
@@ -40,7 +39,7 @@ def test_function_cors_asterisk(self):
         lambda_client = mock.MagicMock
         function_name = "test-lambda"
         function_runtime = "nodejs4.3"
-        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{DEFAULT_ACCOUNT_ID}:function/{function_name}"
+        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:function/{function_name}"
         lambda_client.functions = {
             "function_name": Function(
                 name=function_name,
@@ -86,7 +85,7 @@ def test_function_cors_not_wide(self):
         lambda_client = mock.MagicMock
         function_name = "test-lambda"
         function_runtime = "python3.9"
-        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{DEFAULT_ACCOUNT_ID}:function/{function_name}"
+        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:function/{function_name}"
         lambda_client.functions = {
             "function_name": Function(
                 name=function_name,
@@ -132,7 +131,7 @@ def test_function_cors_wide_with_two_origins(self):
         lambda_client = mock.MagicMock
         function_name = "test-lambda"
         function_runtime = "python3.9"
-        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{DEFAULT_ACCOUNT_ID}:function/{function_name}"
+        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:function/{function_name}"
         lambda_client.functions = {
             "function_name": Function(
                 name=function_name,
diff --git a/tests/providers/aws/services/awslambda/awslambda_function_url_public/awslambda_function_url_public_test.py b/tests/providers/aws/services/awslambda/awslambda_function_url_public/awslambda_function_url_public_test.py
index 9adbef2ea47..56a6d7414b9 100644
--- a/tests/providers/aws/services/awslambda/awslambda_function_url_public/awslambda_function_url_public_test.py
+++ b/tests/providers/aws/services/awslambda/awslambda_function_url_public/awslambda_function_url_public_test.py
@@ -1,7 +1,5 @@
 from unittest import mock
 
-from moto.core import DEFAULT_ACCOUNT_ID
-
 from prowler.providers.aws.services.awslambda.awslambda_service import (
     AuthType,
     Function,
@@ -9,6 +7,7 @@
     URLConfigCORS,
 )
 from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
     AWS_REGION_US_EAST_1,
     set_mocked_aws_audit_info,
 )
@@ -40,7 +39,7 @@ def test_function_public_url(self):
         lambda_client = mock.MagicMock
         function_name = "test-lambda"
         function_runtime = "nodejs4.3"
-        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{DEFAULT_ACCOUNT_ID}:function/{function_name}"
+        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:function/{function_name}"
         lambda_client.functions = {
             "function_name": Function(
                 name=function_name,
@@ -86,7 +85,7 @@ def test_function_private_url(self):
         lambda_client = mock.MagicMock
         function_name = "test-lambda"
         function_runtime = "python3.9"
-        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{DEFAULT_ACCOUNT_ID}:function/{function_name}"
+        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:function/{function_name}"
         lambda_client.functions = {
             "function_name": Function(
                 name=function_name,
diff --git a/tests/providers/aws/services/awslambda/awslambda_function_using_supported_runtimes/awslambda_function_using_supported_runtimes_test.py b/tests/providers/aws/services/awslambda/awslambda_function_using_supported_runtimes/awslambda_function_using_supported_runtimes_test.py
index 9e518ca96a8..773d02898a5 100644
--- a/tests/providers/aws/services/awslambda/awslambda_function_using_supported_runtimes/awslambda_function_using_supported_runtimes_test.py
+++ b/tests/providers/aws/services/awslambda/awslambda_function_using_supported_runtimes/awslambda_function_using_supported_runtimes_test.py
@@ -1,9 +1,8 @@
 from unittest import mock
 
-from moto.core import DEFAULT_ACCOUNT_ID
-
 from prowler.providers.aws.services.awslambda.awslambda_service import Function
 from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
     AWS_REGION_US_EAST_1,
     set_mocked_aws_audit_info,
 )
@@ -35,7 +34,7 @@ def test_function_obsolete_runtime(self):
         lambda_client = mock.MagicMock
         function_name = "test-lambda"
         function_runtime = "nodejs4.3"
-        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{DEFAULT_ACCOUNT_ID}:function/{function_name}"
+        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:function/{function_name}"
         lambda_client.functions = {
             "function_name": Function(
                 name=function_name,
@@ -94,7 +93,7 @@ def test_function_supported_runtime(self):
         lambda_client = mock.MagicMock
         function_name = "test-lambda"
         function_runtime = "python3.9"
-        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{DEFAULT_ACCOUNT_ID}:function/{function_name}"
+        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:function/{function_name}"
         lambda_client.functions = {
             "function_name": Function(
                 name=function_name,
@@ -152,7 +151,7 @@ def test_function_supported_runtime(self):
     def test_function_no_runtime(self):
         lambda_client = mock.MagicMock
         function_name = "test-lambda"
-        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{DEFAULT_ACCOUNT_ID}:function/{function_name}"
+        function_arn = f"arn:aws:lambda:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:function/{function_name}"
         lambda_client.functions = {
             "function_name": Function(
                 name=function_name,
diff --git a/tests/providers/aws/services/awslambda/awslambda_service_test.py b/tests/providers/aws/services/awslambda/awslambda_service_test.py
index aa8e45a6127..07e6ef175d4 100644
--- a/tests/providers/aws/services/awslambda/awslambda_service_test.py
+++ b/tests/providers/aws/services/awslambda/awslambda_service_test.py
@@ -6,17 +6,21 @@
 from unittest.mock import patch
 
 import mock
-from boto3 import client, resource, session
-from moto import mock_iam, mock_lambda, mock_s3
-from moto.core import DEFAULT_ACCOUNT_ID
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.awslambda.awslambda_service import AuthType, Lambda
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
-# Mock Test Region
-AWS_REGION = "eu-west-1"
-AWS_REGION_NORTH_VIRGINIA = "us-east-1"
+LAMBDA_FUNCTION_CODE = """def lambda_handler(event, context):
+print("custom log event")
+return event
+            """
 
 
 def create_zip_file(code: str = "") -> io.BytesIO:
@@ -25,11 +29,7 @@ def create_zip_file(code: str = "") -> io.BytesIO:
     if not code:
         zip_file.writestr(
             "lambda_function.py",
-            """
-            def lambda_handler(event, context):
-                print("custom log event")
-                return event
-            """,
+            LAMBDA_FUNCTION_CODE,
         )
     else:
         zip_file.writestr("lambda_function.py", code)
@@ -47,18 +47,18 @@ def mock_request_get(_):
 
 
 # Mock generate_regional_clients()
-def mock_generate_regional_clients(service, audit_info, _):
+def mock_generate_regional_clients(service, audit_info):
     regional_client_eu_west_1 = audit_info.audit_session.client(
-        service, region_name=AWS_REGION
+        service, region_name=AWS_REGION_EU_WEST_1
     )
     regional_client_us_east_1 = audit_info.audit_session.client(
-        service, region_name=AWS_REGION_NORTH_VIRGINIA
+        service, region_name=AWS_REGION_US_EAST_1
     )
-    regional_client_eu_west_1.region = AWS_REGION
-    regional_client_us_east_1.region = AWS_REGION_NORTH_VIRGINIA
+    regional_client_eu_west_1.region = AWS_REGION_EU_WEST_1
+    regional_client_us_east_1.region = AWS_REGION_US_EAST_1
     return {
-        AWS_REGION: regional_client_eu_west_1,
-        AWS_REGION_NORTH_VIRGINIA: regional_client_us_east_1,
+        AWS_REGION_EU_WEST_1: regional_client_eu_west_1,
+        AWS_REGION_US_EAST_1: regional_client_us_east_1,
     }
 
 
@@ -67,73 +67,44 @@ def mock_generate_regional_clients(service, audit_info, _):
     new=mock_generate_regional_clients,
 )
 class Test_Lambda_Service:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=DEFAULT_ACCOUNT_ID,
-            audited_account_arn=f"arn:aws:iam::{DEFAULT_ACCOUNT_ID}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=["awslambda_function_no_secrets_in_code"],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test Lambda Client
     def test__get_client__(self):
-        awslambda = Lambda(self.set_mocked_audit_info())
-        assert awslambda.regional_clients[AWS_REGION].__class__.__name__ == "Lambda"
+        awslambda = Lambda(set_mocked_aws_audit_info([AWS_REGION_US_EAST_1]))
+        assert (
+            awslambda.regional_clients[AWS_REGION_EU_WEST_1].__class__.__name__
+            == "Lambda"
+        )
 
     # Test Lambda Session
     def test__get_session__(self):
-        awslambda = Lambda(self.set_mocked_audit_info())
+        awslambda = Lambda(set_mocked_aws_audit_info([AWS_REGION_US_EAST_1]))
         assert awslambda.session.__class__.__name__ == "Session"
 
     # Test Lambda Service
     def test__get_service__(self):
-        awslambda = Lambda(self.set_mocked_audit_info())
+        awslambda = Lambda(set_mocked_aws_audit_info([AWS_REGION_US_EAST_1]))
         assert awslambda.service == "lambda"
 
-    @mock_lambda
-    @mock_iam
-    @mock_s3
+    @mock_aws
     def test__list_functions__(self):
         # Create IAM Lambda Role
-        iam_client = client("iam", region_name=AWS_REGION)
+        iam_client = client("iam", region_name=AWS_REGION_EU_WEST_1)
         iam_role = iam_client.create_role(
             RoleName="test-lambda-role",
             AssumeRolePolicyDocument="test-policy",
             Path="/",
         )["Role"]["Arn"]
         # Create S3 Bucket
-        s3_client = resource("s3", region_name=AWS_REGION)
+        s3_client = resource("s3", region_name=AWS_REGION_EU_WEST_1)
         s3_client.create_bucket(
             Bucket="test-bucket",
-            CreateBucketConfiguration={"LocationConstraint": AWS_REGION},
+            CreateBucketConfiguration={"LocationConstraint": AWS_REGION_EU_WEST_1},
         )
         # Create Test Lambda 1
-        lambda_client = client("lambda", region_name=AWS_REGION)
-        lambda_name = "test-lambda"
+        lambda_client = client("lambda", region_name=AWS_REGION_EU_WEST_1)
+        lambda_name_1 = "test-lambda-1"
         resp = lambda_client.create_function(
-            FunctionName=lambda_name,
+            FunctionName=lambda_name_1,
             Runtime="python3.7",
             Role=iam_role,
             Handler="lambda_function.lambda_handler",
@@ -160,20 +131,20 @@ def test__list_functions__(self):
                     "Action": "lambda:GetFunction",
                     "Principal": "*",
                     "Effect": "Allow",
-                    "Resource": f"arn:aws:lambda:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:function:{lambda_name}",
+                    "Resource": f"arn:aws:lambda:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:function:{lambda_name_1}",
                     "Sid": "test",
                 }
             ],
         }
         _ = lambda_client.add_permission(
-            FunctionName=lambda_name,
+            FunctionName=lambda_name_1,
             StatementId="test",
             Action="lambda:GetFunction",
             Principal="*",
         )
         # Create Function URL Config
         _ = lambda_client.create_function_url_config(
-            FunctionName=lambda_name,
+            FunctionName=lambda_name_1,
             AuthType=AuthType.AWS_IAM.value,
             Cors={
                 "AllowCredentials": True,
@@ -194,10 +165,10 @@ def test__list_functions__(self):
         )
 
         # Create Test Lambda 2 (with the same attributes but different region)
-        lambda_client_2 = client("lambda", region_name=AWS_REGION_NORTH_VIRGINIA)
-        lambda_name = "test-lambda"
+        lambda_client_2 = client("lambda", region_name=AWS_REGION_US_EAST_1)
+        lambda_name_2 = "test-lambda-2"
         resp_2 = lambda_client_2.create_function(
-            FunctionName=lambda_name,
+            FunctionName=lambda_name_2,
             Runtime="python3.7",
             Role=iam_role,
             Handler="lambda_function.lambda_handler",
@@ -220,25 +191,21 @@ def test__list_functions__(self):
             "prowler.providers.aws.services.awslambda.awslambda_service.requests.get",
             new=mock_request_get,
         ):
-            awslambda = Lambda(self.set_mocked_audit_info())
+            awslambda = Lambda(
+                set_mocked_aws_audit_info(audited_regions=[AWS_REGION_US_EAST_1])
+            )
             assert awslambda.functions
             assert len(awslambda.functions) == 2
             # Lambda 1
-            assert awslambda.functions[lambda_arn_1].name == lambda_name
+            assert awslambda.functions[lambda_arn_1].name == lambda_name_1
             assert awslambda.functions[lambda_arn_1].arn == lambda_arn_1
             assert awslambda.functions[lambda_arn_1].runtime == "python3.7"
             assert awslambda.functions[lambda_arn_1].environment == {
                 "db-password": "test-password"
             }
-            assert awslambda.functions[lambda_arn_1].region == AWS_REGION
+            assert awslambda.functions[lambda_arn_1].region == AWS_REGION_EU_WEST_1
             assert awslambda.functions[lambda_arn_1].policy == lambda_policy
 
-            assert awslambda.functions[lambda_arn_1].code
-            assert search(
-                f"s3://awslambda-{AWS_REGION}-tasks.s3-{AWS_REGION}.amazonaws.com",
-                awslambda.functions[lambda_arn_1].code.location,
-            )
-
             assert awslambda.functions[lambda_arn_1].url_config
             assert (
                 awslambda.functions[lambda_arn_1].url_config.auth_type
@@ -256,31 +223,14 @@ def test__list_functions__(self):
 
             assert awslambda.functions[lambda_arn_1].tags == [{"test": "test"}]
 
-            # Pending ZipFile tests
-            with tempfile.TemporaryDirectory() as tmp_dir_name:
-                awslambda.functions[lambda_arn_1].code.code_zip.extractall(tmp_dir_name)
-                files_in_zip = next(os.walk(tmp_dir_name))[2]
-                assert len(files_in_zip) == 1
-                assert files_in_zip[0] == "lambda_function.py"
-                with open(f"{tmp_dir_name}/{files_in_zip[0]}", "r") as lambda_code_file:
-                    _ = lambda_code_file
-                    # assert (
-                    #     lambda_code_file.read()
-                    #     == """
-                    # def lambda_handler(event, context):
-                    # print("custom log event")
-                    # return event
-                    # """
-                    # )
-
             # Lambda 2
-            assert awslambda.functions[lambda_arn_2].name == lambda_name
+            assert awslambda.functions[lambda_arn_2].name == lambda_name_2
             assert awslambda.functions[lambda_arn_2].arn == lambda_arn_2
             assert awslambda.functions[lambda_arn_2].runtime == "python3.7"
             assert awslambda.functions[lambda_arn_2].environment == {
                 "db-password": "test-password"
             }
-            assert awslambda.functions[lambda_arn_2].region == AWS_REGION_NORTH_VIRGINIA
+            assert awslambda.functions[lambda_arn_2].region == AWS_REGION_US_EAST_1
             # Emtpy policy
             assert awslambda.functions[lambda_arn_2].policy == {
                 "Id": "default",
@@ -288,8 +238,20 @@ def test__list_functions__(self):
                 "Version": "2012-10-17",
             }
 
-            assert awslambda.functions[lambda_arn_2].code
-            assert search(
-                f"s3://awslambda-{AWS_REGION_NORTH_VIRGINIA}-tasks.s3-{AWS_REGION_NORTH_VIRGINIA}.amazonaws.com",
-                awslambda.functions[lambda_arn_2].code.location,
-            )
+            # Lambda Code
+            with tempfile.TemporaryDirectory() as tmp_dir_name:
+                for function, function_code in awslambda.__get_function_code__():
+                    if function.arn == lambda_arn_1 or function.arn == lambda_arn_2:
+                        assert search(
+                            f"s3://awslambda-{function.region}-tasks.s3-{function.region}.amazonaws.com",
+                            function_code.location,
+                        )
+                        assert function_code
+                        function_code.code_zip.extractall(tmp_dir_name)
+                        files_in_zip = next(os.walk(tmp_dir_name))[2]
+                        assert len(files_in_zip) == 1
+                        assert files_in_zip[0] == "lambda_function.py"
+                        with open(
+                            f"{tmp_dir_name}/{files_in_zip[0]}", "r"
+                        ) as lambda_code_file:
+                            assert lambda_code_file.read() == LAMBDA_FUNCTION_CODE
diff --git a/tests/providers/aws/services/backup/backup_service_test.py b/tests/providers/aws/services/backup/backup_service_test.py
index e24f2940ec5..760d995b2e0 100644
--- a/tests/providers/aws/services/backup/backup_service_test.py
+++ b/tests/providers/aws/services/backup/backup_service_test.py
@@ -2,14 +2,12 @@
 from unittest.mock import patch
 
 import botocore
-from boto3 import session
 
-from prowler.providers.aws.lib.audit_info.audit_info import AWS_Audit_Info
 from prowler.providers.aws.services.backup.backup_service import Backup
-from prowler.providers.common.models import Audit_Metadata
-
-# Mock Test Region
-AWS_REGION = "eu-west-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    set_mocked_aws_audit_info,
+)
 
 # Mocking Backup Calls
 make_api_call = botocore.client.BaseClient._make_api_call
@@ -60,10 +58,12 @@ def mock_make_api_call(self, operation_name, kwarg):
     return make_api_call(self, operation_name, kwarg)
 
 
-def mock_generate_regional_clients(service, audit_info, _):
-    regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
-    regional_client.region = AWS_REGION
-    return {AWS_REGION: regional_client}
+def mock_generate_regional_clients(service, audit_info):
+    regional_client = audit_info.audit_session.client(
+        service, region_name=AWS_REGION_EU_WEST_1
+    )
+    regional_client.region = AWS_REGION_EU_WEST_1
+    return {AWS_REGION_EU_WEST_1: regional_client}
 
 
 # Patch every AWS call using Boto3 and generate_regional_clients to have 1 client
@@ -73,63 +73,34 @@ def mock_generate_regional_clients(service, audit_info, _):
     new=mock_generate_regional_clients,
 )
 class Test_Backup_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=None,
-            audited_account_arn=None,
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test Backup Client
     def test__get_client__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
         backup = Backup(audit_info)
-        assert backup.regional_clients[AWS_REGION].__class__.__name__ == "Backup"
+        assert (
+            backup.regional_clients[AWS_REGION_EU_WEST_1].__class__.__name__ == "Backup"
+        )
 
     # Test Backup Session
     def test__get_session__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
         access_analyzer = Backup(audit_info)
         assert access_analyzer.session.__class__.__name__ == "Session"
 
     # Test Backup Service
     def test__get_service__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
         access_analyzer = Backup(audit_info)
         assert access_analyzer.service == "backup"
 
     # Test Backup List Backup Vaults
     def test__list_backup_vaults__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
         backup = Backup(audit_info)
         assert len(backup.backup_vaults) == 1
         assert backup.backup_vaults[0].arn == "ARN"
         assert backup.backup_vaults[0].name == "Test Vault"
-        assert backup.backup_vaults[0].region == AWS_REGION
+        assert backup.backup_vaults[0].region == AWS_REGION_EU_WEST_1
         assert backup.backup_vaults[0].encryption == ""
         assert backup.backup_vaults[0].recovery_points == 0
         assert backup.backup_vaults[0].locked is True
@@ -138,12 +109,12 @@ def test__list_backup_vaults__(self):
 
     # Test Backup List Backup Plans
     def test__list_backup_plans__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
         backup = Backup(audit_info)
         assert len(backup.backup_plans) == 1
         assert backup.backup_plans[0].arn == "ARN"
         assert backup.backup_plans[0].id == "ID"
-        assert backup.backup_plans[0].region == AWS_REGION
+        assert backup.backup_plans[0].region == AWS_REGION_EU_WEST_1
         assert backup.backup_plans[0].name == "Test Plan"
         assert backup.backup_plans[0].version_id == "test_version_id"
         assert backup.backup_plans[0].last_execution_date == datetime(2015, 1, 1)
@@ -151,11 +122,11 @@ def test__list_backup_plans__(self):
 
     # Test Backup List Report Plans
     def test__list_backup_report_plans__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
         backup = Backup(audit_info)
         assert len(backup.backup_report_plans) == 1
         assert backup.backup_report_plans[0].arn == "ARN"
-        assert backup.backup_report_plans[0].region == AWS_REGION
+        assert backup.backup_report_plans[0].region == AWS_REGION_EU_WEST_1
         assert backup.backup_report_plans[0].name == "Test Report Plan"
         assert backup.backup_report_plans[0].last_attempted_execution_date == datetime(
             2015, 1, 1
diff --git a/tests/providers/aws/services/cloudformation/cloudformation_service_test.py b/tests/providers/aws/services/cloudformation/cloudformation_service_test.py
index 7bf7fbd4695..6519f0b2a8e 100644
--- a/tests/providers/aws/services/cloudformation/cloudformation_service_test.py
+++ b/tests/providers/aws/services/cloudformation/cloudformation_service_test.py
@@ -4,19 +4,17 @@
 
 import boto3
 import botocore
-from boto3 import session
 from dateutil.tz import tzutc
-from moto import mock_cloudformation
-from moto.core import DEFAULT_ACCOUNT_ID
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.audit_info import AWS_Audit_Info
 from prowler.providers.aws.services.cloudformation.cloudformation_service import (
     CloudFormation,
 )
-from prowler.providers.common.models import Audit_Metadata
-
-# Mock Test Region
-AWS_REGION = "eu-west-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    set_mocked_aws_audit_info,
+)
 
 # Dummy CloudFormation Template
 dummy_template = {
@@ -121,10 +119,12 @@ def mock_make_api_call(self, operation_name, kwarg):
 
 
 # Mock generate_regional_clients()
-def mock_generate_regional_clients(service, audit_info, _):
-    regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
-    regional_client.region = AWS_REGION
-    return {AWS_REGION: regional_client}
+def mock_generate_regional_clients(service, audit_info):
+    regional_client = audit_info.audit_session.client(
+        service, region_name=AWS_REGION_EU_WEST_1
+    )
+    regional_client.region = AWS_REGION_EU_WEST_1
+    return {AWS_REGION_EU_WEST_1: regional_client}
 
 
 # Patch every AWS call using Boto3 and generate_regional_clients to have 1 client
@@ -134,68 +134,45 @@ def mock_generate_regional_clients(service, audit_info, _):
     new=mock_generate_regional_clients,
 )
 class Test_CloudFormation_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=None,
-            audited_account_arn=None,
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test CloudFormation Client
-    @mock_cloudformation
+    @mock_aws
     def test__get_client__(self):
-        cloudformation = CloudFormation(self.set_mocked_audit_info())
+        cloudformation = CloudFormation(
+            set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
+        )
         assert (
-            cloudformation.regional_clients[AWS_REGION].__class__.__name__
+            cloudformation.regional_clients[AWS_REGION_EU_WEST_1].__class__.__name__
             == "CloudFormation"
         )
 
     # Test CloudFormation Service
-    @mock_cloudformation
+    @mock_aws
     def test__get_service__(self):
-        cloudformation = CloudFormation(self.set_mocked_audit_info())
+        cloudformation = CloudFormation(
+            set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
+        )
         assert (
-            cloudformation.regional_clients[AWS_REGION].__class__.__name__
+            cloudformation.regional_clients[AWS_REGION_EU_WEST_1].__class__.__name__
             == "CloudFormation"
         )
 
     # Test CloudFormation Session
-    @mock_cloudformation
+    @mock_aws
     def test__get_session__(self):
-        cloudformation = CloudFormation(self.set_mocked_audit_info())
+        cloudformation = CloudFormation(
+            set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
+        )
         assert cloudformation.session.__class__.__name__ == "Session"
 
-    @mock_cloudformation
+    @mock_aws
     def test__describe_stacks__(self):
-        cloudformation_client = boto3.client("cloudformation", region_name=AWS_REGION)
+        cloudformation_client = boto3.client(
+            "cloudformation", region_name=AWS_REGION_EU_WEST_1
+        )
         stack_arn = cloudformation_client.create_stack(
             StackName="Test-Stack",
             TemplateBody=json.dumps(dummy_template),
-            RoleARN=f"arn:aws:iam::{DEFAULT_ACCOUNT_ID}:role/moto",
+            RoleARN=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:role/moto",
             Tags=[
                 {"Key": "Tag1", "Value": "Value1"},
                 {"Key": "Tag2", "Value": "Value2"},
@@ -210,7 +187,9 @@ def test__describe_stacks__(self):
             ],
         )
 
-        cloudformation = CloudFormation(self.set_mocked_audit_info())
+        cloudformation = CloudFormation(
+            set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
+        )
         assert len(cloudformation.stacks) == 1
         assert cloudformation.stacks[0].arn == stack_arn["StackId"]
         assert cloudformation.stacks[0].name == "Test-Stack"
@@ -218,7 +197,7 @@ def test__describe_stacks__(self):
         assert cloudformation.stacks[0].enable_termination_protection is True
         assert cloudformation.stacks[0].is_nested_stack is False
         assert cloudformation.stacks[0].root_nested_stack == ""
-        assert cloudformation.stacks[0].region == AWS_REGION
+        assert cloudformation.stacks[0].region == AWS_REGION_EU_WEST_1
         assert cloudformation.stacks[0].tags == [
             {"Key": "Tag1", "Value": "Value1"},
             {"Key": "Tag2", "Value": "Value2"},
diff --git a/tests/providers/aws/services/cloudfront/cloudfront_distributions_field_level_encryption_enabled/cloudfront_distributions_field_level_encryption_enabled_test.py b/tests/providers/aws/services/cloudfront/cloudfront_distributions_field_level_encryption_enabled/cloudfront_distributions_field_level_encryption_enabled_test.py
index 7a508677a9c..c474a6ae46b 100644
--- a/tests/providers/aws/services/cloudfront/cloudfront_distributions_field_level_encryption_enabled/cloudfront_distributions_field_level_encryption_enabled_test.py
+++ b/tests/providers/aws/services/cloudfront/cloudfront_distributions_field_level_encryption_enabled/cloudfront_distributions_field_level_encryption_enabled_test.py
@@ -1,16 +1,15 @@
 from unittest import mock
 
-from moto.core import DEFAULT_ACCOUNT_ID
-
 from prowler.providers.aws.services.cloudfront.cloudfront_service import (
     DefaultCacheConfigBehaviour,
     Distribution,
     ViewerProtocolPolicy,
 )
+from tests.providers.aws.audit_info_utils import AWS_ACCOUNT_NUMBER
 
 DISTRIBUTION_ID = "E27LVI50CSW06W"
 DISTRIBUTION_ARN = (
-    f"arn:aws:cloudfront::{DEFAULT_ACCOUNT_ID}:distribution/{DISTRIBUTION_ID}"
+    f"arn:aws:cloudfront::{AWS_ACCOUNT_NUMBER}:distribution/{DISTRIBUTION_ID}"
 )
 REGION = "eu-west-1"
 
diff --git a/tests/providers/aws/services/cloudfront/cloudfront_distributions_geo_restrictions_enabled/cloudfront_distributions_geo_restrictions_enabled_test.py b/tests/providers/aws/services/cloudfront/cloudfront_distributions_geo_restrictions_enabled/cloudfront_distributions_geo_restrictions_enabled_test.py
index 29f6b722ade..eeec7087093 100644
--- a/tests/providers/aws/services/cloudfront/cloudfront_distributions_geo_restrictions_enabled/cloudfront_distributions_geo_restrictions_enabled_test.py
+++ b/tests/providers/aws/services/cloudfront/cloudfront_distributions_geo_restrictions_enabled/cloudfront_distributions_geo_restrictions_enabled_test.py
@@ -1,15 +1,14 @@
 from unittest import mock
 
-from moto.core import DEFAULT_ACCOUNT_ID
-
 from prowler.providers.aws.services.cloudfront.cloudfront_service import (
     Distribution,
     GeoRestrictionType,
 )
+from tests.providers.aws.audit_info_utils import AWS_ACCOUNT_NUMBER
 
 DISTRIBUTION_ID = "E27LVI50CSW06W"
 DISTRIBUTION_ARN = (
-    f"arn:aws:cloudfront::{DEFAULT_ACCOUNT_ID}:distribution/{DISTRIBUTION_ID}"
+    f"arn:aws:cloudfront::{AWS_ACCOUNT_NUMBER}:distribution/{DISTRIBUTION_ID}"
 )
 REGION = "eu-west-1"
 
diff --git a/tests/providers/aws/services/cloudfront/cloudfront_distributions_https_enabled/cloudfront_distributions_https_enabled_test.py b/tests/providers/aws/services/cloudfront/cloudfront_distributions_https_enabled/cloudfront_distributions_https_enabled_test.py
index 051295ae8bc..70b5966820c 100644
--- a/tests/providers/aws/services/cloudfront/cloudfront_distributions_https_enabled/cloudfront_distributions_https_enabled_test.py
+++ b/tests/providers/aws/services/cloudfront/cloudfront_distributions_https_enabled/cloudfront_distributions_https_enabled_test.py
@@ -1,16 +1,15 @@
 from unittest import mock
 
-from moto.core import DEFAULT_ACCOUNT_ID
-
 from prowler.providers.aws.services.cloudfront.cloudfront_service import (
     DefaultCacheConfigBehaviour,
     Distribution,
     ViewerProtocolPolicy,
 )
+from tests.providers.aws.audit_info_utils import AWS_ACCOUNT_NUMBER
 
 DISTRIBUTION_ID = "E27LVI50CSW06W"
 DISTRIBUTION_ARN = (
-    f"arn:aws:cloudfront::{DEFAULT_ACCOUNT_ID}:distribution/{DISTRIBUTION_ID}"
+    f"arn:aws:cloudfront::{AWS_ACCOUNT_NUMBER}:distribution/{DISTRIBUTION_ID}"
 )
 REGION = "eu-west-1"
 
diff --git a/tests/providers/aws/services/cloudfront/cloudfront_distributions_logging_enabled/cloudfront_distributions_logging_enabled_test.py b/tests/providers/aws/services/cloudfront/cloudfront_distributions_logging_enabled/cloudfront_distributions_logging_enabled_test.py
index cbb770f08f8..23db912d9ed 100644
--- a/tests/providers/aws/services/cloudfront/cloudfront_distributions_logging_enabled/cloudfront_distributions_logging_enabled_test.py
+++ b/tests/providers/aws/services/cloudfront/cloudfront_distributions_logging_enabled/cloudfront_distributions_logging_enabled_test.py
@@ -1,16 +1,15 @@
 from unittest import mock
 
-from moto.core import DEFAULT_ACCOUNT_ID
-
 from prowler.providers.aws.services.cloudfront.cloudfront_service import (
     DefaultCacheConfigBehaviour,
     Distribution,
     ViewerProtocolPolicy,
 )
+from tests.providers.aws.audit_info_utils import AWS_ACCOUNT_NUMBER
 
 DISTRIBUTION_ID = "E27LVI50CSW06W"
 DISTRIBUTION_ARN = (
-    f"arn:aws:cloudfront::{DEFAULT_ACCOUNT_ID}:distribution/{DISTRIBUTION_ID}"
+    f"arn:aws:cloudfront::{AWS_ACCOUNT_NUMBER}:distribution/{DISTRIBUTION_ID}"
 )
 REGION = "eu-west-1"
 
diff --git a/tests/providers/aws/services/cloudfront/cloudfront_distributions_using_deprecated_ssl_protocols/cloudfront_distributions_using_deprecated_ssl_protocols_test.py b/tests/providers/aws/services/cloudfront/cloudfront_distributions_using_deprecated_ssl_protocols/cloudfront_distributions_using_deprecated_ssl_protocols_test.py
index fc00ab858ab..6f70e746cff 100644
--- a/tests/providers/aws/services/cloudfront/cloudfront_distributions_using_deprecated_ssl_protocols/cloudfront_distributions_using_deprecated_ssl_protocols_test.py
+++ b/tests/providers/aws/services/cloudfront/cloudfront_distributions_using_deprecated_ssl_protocols/cloudfront_distributions_using_deprecated_ssl_protocols_test.py
@@ -1,12 +1,11 @@
 from unittest import mock
 
-from moto.core import DEFAULT_ACCOUNT_ID
-
 from prowler.providers.aws.services.cloudfront.cloudfront_service import Distribution
+from tests.providers.aws.audit_info_utils import AWS_ACCOUNT_NUMBER
 
 DISTRIBUTION_ID = "E27LVI50CSW06W"
 DISTRIBUTION_ARN = (
-    f"arn:aws:cloudfront::{DEFAULT_ACCOUNT_ID}:distribution/{DISTRIBUTION_ID}"
+    f"arn:aws:cloudfront::{AWS_ACCOUNT_NUMBER}:distribution/{DISTRIBUTION_ID}"
 )
 REGION = "eu-west-1"
 
diff --git a/tests/providers/aws/services/cloudfront/cloudfront_distributions_using_waf/cloudfront_distributions_using_waf_test.py b/tests/providers/aws/services/cloudfront/cloudfront_distributions_using_waf/cloudfront_distributions_using_waf_test.py
index 79eff595e9a..f408ebdc530 100644
--- a/tests/providers/aws/services/cloudfront/cloudfront_distributions_using_waf/cloudfront_distributions_using_waf_test.py
+++ b/tests/providers/aws/services/cloudfront/cloudfront_distributions_using_waf/cloudfront_distributions_using_waf_test.py
@@ -1,12 +1,11 @@
 from unittest import mock
 
-from moto.core import DEFAULT_ACCOUNT_ID
-
 from prowler.providers.aws.services.cloudfront.cloudfront_service import Distribution
+from tests.providers.aws.audit_info_utils import AWS_ACCOUNT_NUMBER
 
 DISTRIBUTION_ID = "E27LVI50CSW06W"
 DISTRIBUTION_ARN = (
-    f"arn:aws:cloudfront::{DEFAULT_ACCOUNT_ID}:distribution/{DISTRIBUTION_ID}"
+    f"arn:aws:cloudfront::{AWS_ACCOUNT_NUMBER}:distribution/{DISTRIBUTION_ID}"
 )
 REGION = "eu-west-1"
 
diff --git a/tests/providers/aws/services/cloudfront/cloudfront_service_test.py b/tests/providers/aws/services/cloudfront/cloudfront_service_test.py
index 725137c17ae..0718c02d7a5 100644
--- a/tests/providers/aws/services/cloudfront/cloudfront_service_test.py
+++ b/tests/providers/aws/services/cloudfront/cloudfront_service_test.py
@@ -1,20 +1,18 @@
 from unittest.mock import patch
 
 import botocore
-from boto3 import client, session
-from moto import mock_cloudfront
-from moto.core import DEFAULT_ACCOUNT_ID
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.cloudfront.cloudfront_service import (
     CloudFront,
     GeoRestrictionType,
     ViewerProtocolPolicy,
 )
-from prowler.providers.common.models import Audit_Metadata
-
-# Mock Test Region
-AWS_REGION = "eu-west-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 def example_distribution_config(ref):
@@ -149,76 +147,41 @@ def mock_make_api_call(self, operation_name, kwarg):
     return make_api_call(self, operation_name, kwarg)
 
 
-# PENDING PR TO GET THE PARAMETERS USING MOTO
-
-
 # Patch every AWS call using Boto3
 @patch("botocore.client.BaseClient._make_api_call", new=mock_make_api_call)
 class Test_CloudFront_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-                region_name=AWS_REGION,
-            ),
-            audited_account=DEFAULT_ACCOUNT_ID,
-            audited_account_arn=f"arn:aws:iam::{DEFAULT_ACCOUNT_ID}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=AWS_REGION,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test CloudFront Client
-    @mock_cloudfront
+    @mock_aws
     def test__get_client__(self):
-        cloudfront = CloudFront(self.set_mocked_audit_info())
+        cloudfront = CloudFront(set_mocked_aws_audit_info())
         assert cloudfront.client.__class__.__name__ == "CloudFront"
 
     # Test CloudFront Session
-    @mock_cloudfront
+    @mock_aws
     def test__get_session__(self):
-        cloudfront = CloudFront(self.set_mocked_audit_info())
+        cloudfront = CloudFront(set_mocked_aws_audit_info())
         assert cloudfront.session.__class__.__name__ == "Session"
 
     # Test CloudFront Service
-    @mock_cloudfront
+    @mock_aws
     def test__get_service__(self):
-        cloudfront = CloudFront(self.set_mocked_audit_info())
+        cloudfront = CloudFront(set_mocked_aws_audit_info())
         assert cloudfront.service == "cloudfront"
 
-    @mock_cloudfront
+    @mock_aws
     def test__list_distributions__zero(self):
-        cloudfront = CloudFront(self.set_mocked_audit_info())
+        cloudfront = CloudFront(set_mocked_aws_audit_info())
 
         assert len(cloudfront.distributions) == 0
 
-    @mock_cloudfront
+    @mock_aws
     def test__list_distributions__complete(self):
         cloudfront_client = client("cloudfront")
         config = example_distribution_config("ref")
         response = cloudfront_client.create_distribution(DistributionConfig=config)
         cloudfront_distribution_id = response["Distribution"]["Id"]
         cloudfront_distribution_arn = response["Distribution"]["ARN"]
-        cloudfront = CloudFront(self.set_mocked_audit_info())
+        cloudfront = CloudFront(set_mocked_aws_audit_info())
 
         assert len(cloudfront.distributions) == 1
         assert (
@@ -231,7 +194,7 @@ def test__list_distributions__complete(self):
         )
         assert (
             cloudfront.distributions[cloudfront_distribution_id].region
-            == self.set_mocked_audit_info().audit_session.region_name
+            == AWS_REGION_US_EAST_1
         )
         assert (
             cloudfront.distributions[cloudfront_distribution_id].logging_enabled is True
diff --git a/tests/providers/aws/services/cloudtrail/cloudtrail_bucket_requires_mfa_delete/cloudtrail_bucket_requires_mfa_delete_test.py b/tests/providers/aws/services/cloudtrail/cloudtrail_bucket_requires_mfa_delete/cloudtrail_bucket_requires_mfa_delete_test.py
index 87410db0898..0be7e0988f9 100644
--- a/tests/providers/aws/services/cloudtrail/cloudtrail_bucket_requires_mfa_delete/cloudtrail_bucket_requires_mfa_delete_test.py
+++ b/tests/providers/aws/services/cloudtrail/cloudtrail_bucket_requires_mfa_delete/cloudtrail_bucket_requires_mfa_delete_test.py
@@ -2,54 +2,27 @@
 from unittest.mock import patch
 
 import botocore
-from boto3 import client, session
-from moto import mock_cloudtrail, mock_iam, mock_s3
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.cloudtrail.cloudtrail_service import Cloudtrail
 from prowler.providers.aws.services.s3.s3_service import S3
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 # Mocking Backup Calls
 make_api_call = botocore.client.BaseClient._make_api_call
 
 
 class Test_cloudtrail_bucket_requires_mfa_delete:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
-    @mock_cloudtrail
+    @mock_aws
     def test_no_trails(self):
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -67,13 +40,16 @@ def test_no_trails(self):
             result = check.execute()
             assert len(result) == 0
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_trails_with_no_mfa_bucket(self):
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
 
-        cloudtrail_client_us_east_1 = client("cloudtrail", region_name="us-east-1")
-        s3_client_us_east_1 = client("s3", region_name="us-east-1")
+        cloudtrail_client_us_east_1 = client(
+            "cloudtrail", region_name=AWS_REGION_US_EAST_1
+        )
+        s3_client_us_east_1 = client("s3", region_name=AWS_REGION_US_EAST_1)
         trail_name_us = "trail_test_us_with_no_mfa_bucket"
         bucket_name_us = "bucket_test_us_with_no_mfa"
         s3_client_us_east_1.create_bucket(Bucket=bucket_name_us)
@@ -107,7 +83,7 @@ def test_trails_with_no_mfa_bucket(self):
                 == f"Trail {trail_name_us} bucket ({bucket_name_us}) does not have MFA delete enabled."
             )
             assert result[0].resource_id == trail_name_us
-            assert result[0].region == "us-east-1"
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_arn == trail_us["TrailARN"]
             assert result[0].resource_tags == []
 
@@ -122,19 +98,21 @@ def mock_make_api_call_getbucketversioning_mfadelete_enabled(
             return {"MFADelete": "Enabled", "Status": "Enabled"}
         return make_api_call(self, operation_name, kwarg)
 
-    @mock_cloudtrail
-    @mock_s3
-    @mock_iam
+    @mock_aws
     # Patch with mock_make_api_call_getbucketversioning_mfadelete_enabled:
     @patch(
         "botocore.client.BaseClient._make_api_call",
         new=mock_make_api_call_getbucketversioning_mfadelete_enabled,
     )
     def test_trails_with_mfa_bucket(self):
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
 
-        cloudtrail_client_us_east_1 = client("cloudtrail", region_name="us-east-1")
-        s3_client_us_east_1 = client("s3", region_name="us-east-1")
+        cloudtrail_client_us_east_1 = client(
+            "cloudtrail", region_name=AWS_REGION_US_EAST_1
+        )
+        s3_client_us_east_1 = client("s3", region_name=AWS_REGION_US_EAST_1)
         trail_name_us = "trail_test_us_with_mfa_bucket"
         bucket_name_us = "bucket_test_us_with_mfa"
         s3_client_us_east_1.create_bucket(Bucket=bucket_name_us)
@@ -168,17 +146,20 @@ def test_trails_with_mfa_bucket(self):
                 == f"Trail {trail_name_us} bucket ({bucket_name_us}) has MFA delete enabled."
             )
             assert result[0].resource_id == trail_name_us
-            assert result[0].region == "us-east-1"
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_arn == trail_us["TrailARN"]
             assert result[0].resource_tags == []
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_trails_with_no_mfa_bucket_cross(self):
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
 
-        cloudtrail_client_us_east_1 = client("cloudtrail", region_name="us-east-1")
-        s3_client_us_east_1 = client("s3", region_name="us-east-1")
+        cloudtrail_client_us_east_1 = client(
+            "cloudtrail", region_name=AWS_REGION_US_EAST_1
+        )
+        s3_client_us_east_1 = client("s3", region_name=AWS_REGION_US_EAST_1)
         trail_name_us = "trail_test_us_with_no_mfa_bucket"
         bucket_name_us = "bucket_test_us_with_no_mfa"
         s3_client_us_east_1.create_bucket(Bucket=bucket_name_us)
@@ -215,23 +196,25 @@ def test_trails_with_no_mfa_bucket_cross(self):
                 == f"Trail {trail_name_us} bucket ({bucket_name_us}) is a cross-account bucket in another account out of Prowler's permissions scope, please check it manually."
             )
             assert result[0].resource_id == trail_name_us
-            assert result[0].region == "us-east-1"
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_arn == trail_us["TrailARN"]
             assert result[0].resource_tags == []
 
-    @mock_cloudtrail
-    @mock_s3
-    @mock_iam
+    @mock_aws
     # Patch with mock_make_api_call_getbucketversioning_mfadelete_enabled:
     @patch(
         "botocore.client.BaseClient._make_api_call",
         new=mock_make_api_call_getbucketversioning_mfadelete_enabled,
     )
     def test_trails_with_mfa_bucket_cross(self):
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
 
-        cloudtrail_client_us_east_1 = client("cloudtrail", region_name="us-east-1")
-        s3_client_us_east_1 = client("s3", region_name="us-east-1")
+        cloudtrail_client_us_east_1 = client(
+            "cloudtrail", region_name=AWS_REGION_US_EAST_1
+        )
+        s3_client_us_east_1 = client("s3", region_name=AWS_REGION_US_EAST_1)
         trail_name_us = "trail_test_us_with_mfa_bucket"
         bucket_name_us = "bucket_test_us_with_mfa"
         s3_client_us_east_1.create_bucket(Bucket=bucket_name_us)
@@ -268,6 +251,6 @@ def test_trails_with_mfa_bucket_cross(self):
                 == f"Trail {trail_name_us} bucket ({bucket_name_us}) is a cross-account bucket in another account out of Prowler's permissions scope, please check it manually."
             )
             assert result[0].resource_id == trail_name_us
-            assert result[0].region == "us-east-1"
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_arn == trail_us["TrailARN"]
             assert result[0].resource_tags == []
diff --git a/tests/providers/aws/services/cloudtrail/cloudtrail_cloudwatch_logging_enabled/cloudtrail_cloudwatch_logging_enabled_test.py b/tests/providers/aws/services/cloudtrail/cloudtrail_cloudwatch_logging_enabled/cloudtrail_cloudwatch_logging_enabled_test.py
index 80eddc6ac27..b79997dd9f4 100644
--- a/tests/providers/aws/services/cloudtrail/cloudtrail_cloudwatch_logging_enabled/cloudtrail_cloudwatch_logging_enabled_test.py
+++ b/tests/providers/aws/services/cloudtrail/cloudtrail_cloudwatch_logging_enabled/cloudtrail_cloudwatch_logging_enabled_test.py
@@ -2,50 +2,22 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_cloudtrail, mock_s3
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_cloudtrail_cloudwatch_logging_enabled:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_no_trails(self):
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
 
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
             Cloudtrail,
@@ -68,13 +40,16 @@ def test_no_trails(self):
                 result = check.execute()
                 assert len(result) == 0
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_trails_sending_logs_during_and_not_last_day(self):
-        cloudtrail_client_us_east_1 = client("cloudtrail", region_name="us-east-1")
-        s3_client_us_east_1 = client("s3", region_name="us-east-1")
-        cloudtrail_client_eu_west_1 = client("cloudtrail", region_name="eu-west-1")
-        s3_client_eu_west_1 = client("s3", region_name="eu-west-1")
+        cloudtrail_client_us_east_1 = client(
+            "cloudtrail", region_name=AWS_REGION_US_EAST_1
+        )
+        s3_client_us_east_1 = client("s3", region_name=AWS_REGION_US_EAST_1)
+        cloudtrail_client_eu_west_1 = client(
+            "cloudtrail", region_name=AWS_REGION_EU_WEST_1
+        )
+        s3_client_eu_west_1 = client("s3", region_name=AWS_REGION_EU_WEST_1)
         trail_name_us = "trail_test_us"
         bucket_name_us = "bucket_test_us"
         trail_name_eu = "trail_test_eu"
@@ -82,7 +57,7 @@ def test_trails_sending_logs_during_and_not_last_day(self):
         s3_client_us_east_1.create_bucket(Bucket=bucket_name_us)
         s3_client_eu_west_1.create_bucket(
             Bucket=bucket_name_eu,
-            CreateBucketConfiguration={"LocationConstraint": "eu-west-1"},
+            CreateBucketConfiguration={"LocationConstraint": AWS_REGION_EU_WEST_1},
         )
         trail_us = cloudtrail_client_us_east_1.create_trail(
             Name=trail_name_us, S3BucketName=bucket_name_us, IsMultiRegionTrail=False
@@ -97,11 +72,15 @@ def test_trails_sending_logs_during_and_not_last_day(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]),
         ):
             with mock.patch(
                 "prowler.providers.aws.services.cloudtrail.cloudtrail_cloudwatch_logging_enabled.cloudtrail_cloudwatch_logging_enabled.cloudtrail_client",
-                new=Cloudtrail(self.set_mocked_audit_info()),
+                new=Cloudtrail(
+                    set_mocked_aws_audit_info(
+                        [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+                    )
+                ),
             ) as service_client:
                 # Test Check
                 from prowler.providers.aws.services.cloudtrail.cloudtrail_cloudwatch_logging_enabled.cloudtrail_cloudwatch_logging_enabled import (
@@ -136,7 +115,7 @@ def test_trails_sending_logs_during_and_not_last_day(self):
                             f"Single region trail {trail_name_us} has been logging the last 24h.",
                         )
                         assert report.resource_tags == []
-                        assert report.region == "us-east-1"
+                        assert report.region == AWS_REGION_US_EAST_1
                     if report.resource_id == trail_name_eu:
                         assert report.resource_id == trail_name_eu
                         assert report.resource_arn == trail_eu["TrailARN"]
@@ -146,15 +125,18 @@ def test_trails_sending_logs_during_and_not_last_day(self):
                             f"Single region trail {trail_name_eu} is not logging in the last 24h.",
                         )
                         assert report.resource_tags == []
-                        assert report.region == "eu-west-1"
+                        assert report.region == AWS_REGION_EU_WEST_1
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_multi_region_and_single_region_logging_and_not(self):
-        cloudtrail_client_us_east_1 = client("cloudtrail", region_name="us-east-1")
-        s3_client_us_east_1 = client("s3", region_name="us-east-1")
-        cloudtrail_client_eu_west_1 = client("cloudtrail", region_name="eu-west-1")
-        s3_client_eu_west_1 = client("s3", region_name="eu-west-1")
+        cloudtrail_client_us_east_1 = client(
+            "cloudtrail", region_name=AWS_REGION_US_EAST_1
+        )
+        s3_client_us_east_1 = client("s3", region_name=AWS_REGION_US_EAST_1)
+        cloudtrail_client_eu_west_1 = client(
+            "cloudtrail", region_name=AWS_REGION_EU_WEST_1
+        )
+        s3_client_eu_west_1 = client("s3", region_name=AWS_REGION_EU_WEST_1)
         trail_name_us = "trail_test_us"
         bucket_name_us = "bucket_test_us"
         trail_name_eu = "trail_test_eu"
@@ -162,7 +144,7 @@ def test_multi_region_and_single_region_logging_and_not(self):
         s3_client_us_east_1.create_bucket(Bucket=bucket_name_us)
         s3_client_eu_west_1.create_bucket(
             Bucket=bucket_name_eu,
-            CreateBucketConfiguration={"LocationConstraint": "eu-west-1"},
+            CreateBucketConfiguration={"LocationConstraint": AWS_REGION_EU_WEST_1},
         )
         trail_us = cloudtrail_client_us_east_1.create_trail(
             Name=trail_name_us, S3BucketName=bucket_name_us, IsMultiRegionTrail=True
@@ -177,11 +159,15 @@ def test_multi_region_and_single_region_logging_and_not(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]),
         ):
             with mock.patch(
                 "prowler.providers.aws.services.cloudtrail.cloudtrail_cloudwatch_logging_enabled.cloudtrail_cloudwatch_logging_enabled.cloudtrail_client",
-                new=Cloudtrail(self.set_mocked_audit_info()),
+                new=Cloudtrail(
+                    set_mocked_aws_audit_info(
+                        [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+                    )
+                ),
             ) as service_client:
                 # Test Check
                 from prowler.providers.aws.services.cloudtrail.cloudtrail_cloudwatch_logging_enabled.cloudtrail_cloudwatch_logging_enabled import (
@@ -218,7 +204,7 @@ def test_multi_region_and_single_region_logging_and_not(self):
                         assert report.resource_tags == []
                     if (
                         report.resource_id == trail_name_eu
-                        and report.region == "eu-west-1"
+                        and report.region == AWS_REGION_EU_WEST_1
                     ):
                         assert report.resource_id == trail_name_eu
                         assert report.resource_arn == trail_eu["TrailARN"]
@@ -229,13 +215,16 @@ def test_multi_region_and_single_region_logging_and_not(self):
                         )
                         assert report.resource_tags == []
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_trails_sending_and_not_sending_logs(self):
-        cloudtrail_client_us_east_1 = client("cloudtrail", region_name="us-east-1")
-        s3_client_us_east_1 = client("s3", region_name="us-east-1")
-        cloudtrail_client_eu_west_1 = client("cloudtrail", region_name="eu-west-1")
-        s3_client_eu_west_1 = client("s3", region_name="eu-west-1")
+        cloudtrail_client_us_east_1 = client(
+            "cloudtrail", region_name=AWS_REGION_US_EAST_1
+        )
+        s3_client_us_east_1 = client("s3", region_name=AWS_REGION_US_EAST_1)
+        cloudtrail_client_eu_west_1 = client(
+            "cloudtrail", region_name=AWS_REGION_EU_WEST_1
+        )
+        s3_client_eu_west_1 = client("s3", region_name=AWS_REGION_EU_WEST_1)
         trail_name_us = "trail_test_us"
         bucket_name_us = "bucket_test_us"
         trail_name_eu = "trail_test_eu"
@@ -243,7 +232,7 @@ def test_trails_sending_and_not_sending_logs(self):
         s3_client_us_east_1.create_bucket(Bucket=bucket_name_us)
         s3_client_eu_west_1.create_bucket(
             Bucket=bucket_name_eu,
-            CreateBucketConfiguration={"LocationConstraint": "eu-west-1"},
+            CreateBucketConfiguration={"LocationConstraint": AWS_REGION_EU_WEST_1},
         )
         trail_us = cloudtrail_client_us_east_1.create_trail(
             Name=trail_name_us, S3BucketName=bucket_name_us, IsMultiRegionTrail=False
@@ -258,11 +247,15 @@ def test_trails_sending_and_not_sending_logs(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]),
         ):
             with mock.patch(
                 "prowler.providers.aws.services.cloudtrail.cloudtrail_cloudwatch_logging_enabled.cloudtrail_cloudwatch_logging_enabled.cloudtrail_client",
-                new=Cloudtrail(self.set_mocked_audit_info()),
+                new=Cloudtrail(
+                    set_mocked_aws_audit_info(
+                        [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+                    )
+                ),
             ) as service_client:
                 # Test Check
                 from prowler.providers.aws.services.cloudtrail.cloudtrail_cloudwatch_logging_enabled.cloudtrail_cloudwatch_logging_enabled import (
diff --git a/tests/providers/aws/services/cloudtrail/cloudtrail_insights_exist/cloudtrail_insights_exist_test.py b/tests/providers/aws/services/cloudtrail/cloudtrail_insights_exist/cloudtrail_insights_exist_test.py
index e40274dc4fd..828bd6ed8a8 100644
--- a/tests/providers/aws/services/cloudtrail/cloudtrail_insights_exist/cloudtrail_insights_exist_test.py
+++ b/tests/providers/aws/services/cloudtrail/cloudtrail_insights_exist/cloudtrail_insights_exist_test.py
@@ -1,49 +1,22 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_cloudtrail, mock_s3
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.cloudtrail.cloudtrail_service import Cloudtrail
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_cloudtrail_insights_exist:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
-    @mock_cloudtrail
+    @mock_aws
     def test_no_trails(self):
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -62,13 +35,16 @@ def test_no_trails(self):
                 result = check.execute()
                 assert len(result) == 0
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_trails_with_no_insight_selector(self):
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
 
-        cloudtrail_client_us_east_1 = client("cloudtrail", region_name="us-east-1")
-        s3_client_us_east_1 = client("s3", region_name="us-east-1")
+        cloudtrail_client_us_east_1 = client(
+            "cloudtrail", region_name=AWS_REGION_US_EAST_1
+        )
+        s3_client_us_east_1 = client("s3", region_name=AWS_REGION_US_EAST_1)
         trail_name_us = "trail_test_us_with_no_insight_selector"
         bucket_name_us = "bucket_test_us"
         s3_client_us_east_1.create_bucket(Bucket=bucket_name_us)
@@ -100,17 +76,20 @@ def test_trails_with_no_insight_selector(self):
                     == f"Trail {trail_name_us} does not have insight selectors and it is logging."
                 )
                 assert result[0].resource_id == trail_name_us
-                assert result[0].region == "us-east-1"
+                assert result[0].region == AWS_REGION_US_EAST_1
                 assert result[0].resource_arn == trail_us["TrailARN"]
                 assert result[0].resource_tags == []
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_trails_with_insight_selector(self):
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
 
-        cloudtrail_client_us_east_1 = client("cloudtrail", region_name="us-east-1")
-        s3_client_us_east_1 = client("s3", region_name="us-east-1")
+        cloudtrail_client_us_east_1 = client(
+            "cloudtrail", region_name=AWS_REGION_US_EAST_1
+        )
+        s3_client_us_east_1 = client("s3", region_name=AWS_REGION_US_EAST_1)
         trail_name_us = "trail_test_us_with_insight_selector"
         bucket_name_us = "bucket_test_us"
         s3_client_us_east_1.create_bucket(Bucket=bucket_name_us)
@@ -146,6 +125,6 @@ def test_trails_with_insight_selector(self):
                     == f"Trail {trail_name_us} has insight selectors and it is logging."
                 )
                 assert result[0].resource_id == trail_name_us
-                assert result[0].region == "us-east-1"
+                assert result[0].region == AWS_REGION_US_EAST_1
                 assert result[0].resource_arn == trail_us["TrailARN"]
                 assert result[0].resource_tags == []
diff --git a/tests/providers/aws/services/cloudtrail/cloudtrail_kms_encryption_enabled/cloudtrail_kms_encryption_enabled_test.py b/tests/providers/aws/services/cloudtrail/cloudtrail_kms_encryption_enabled/cloudtrail_kms_encryption_enabled_test.py
index 4328f3ff600..d8e971e8798 100644
--- a/tests/providers/aws/services/cloudtrail/cloudtrail_kms_encryption_enabled/cloudtrail_kms_encryption_enabled_test.py
+++ b/tests/providers/aws/services/cloudtrail/cloudtrail_kms_encryption_enabled/cloudtrail_kms_encryption_enabled_test.py
@@ -1,48 +1,18 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_cloudtrail, mock_kms, mock_s3
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_cloudtrail_kms_encryption_enabled:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_no_trails(self):
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
             Cloudtrail,
@@ -50,10 +20,12 @@ def test_no_trails(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.cloudtrail.cloudtrail_kms_encryption_enabled.cloudtrail_kms_encryption_enabled.cloudtrail_client",
-            new=Cloudtrail(self.set_mocked_audit_info()),
+            new=Cloudtrail(
+                set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1])
+            ),
         ):
             # Test Check
             from prowler.providers.aws.services.cloudtrail.cloudtrail_kms_encryption_enabled.cloudtrail_kms_encryption_enabled import (
@@ -65,11 +37,12 @@ def test_no_trails(self):
 
             assert len(result) == 0
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_trail_no_kms(self):
-        cloudtrail_client_us_east_1 = client("cloudtrail", region_name="us-east-1")
-        s3_client_us_east_1 = client("s3", region_name="us-east-1")
+        cloudtrail_client_us_east_1 = client(
+            "cloudtrail", region_name=AWS_REGION_US_EAST_1
+        )
+        s3_client_us_east_1 = client("s3", region_name=AWS_REGION_US_EAST_1)
         trail_name_us = "trail_test_us"
         bucket_name_us = "bucket_test_us"
         s3_client_us_east_1.create_bucket(Bucket=bucket_name_us)
@@ -83,10 +56,12 @@ def test_trail_no_kms(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.cloudtrail.cloudtrail_kms_encryption_enabled.cloudtrail_kms_encryption_enabled.cloudtrail_client",
-            new=Cloudtrail(self.set_mocked_audit_info()),
+            new=Cloudtrail(
+                set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1])
+            ),
         ):
             # Test Check
             from prowler.providers.aws.services.cloudtrail.cloudtrail_kms_encryption_enabled.cloudtrail_kms_encryption_enabled import (
@@ -105,15 +80,15 @@ def test_trail_no_kms(self):
             assert result[0].resource_id == trail_name_us
             assert result[0].resource_arn == trail_us["TrailARN"]
             assert result[0].resource_tags == []
-            assert result[0].region == "us-east-1"
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_cloudtrail
-    @mock_s3
-    @mock_kms
+    @mock_aws
     def test_trail_kms(self):
-        cloudtrail_client_us_east_1 = client("cloudtrail", region_name="us-east-1")
-        s3_client_us_east_1 = client("s3", region_name="us-east-1")
-        kms_client = client("kms", region_name="us-east-1")
+        cloudtrail_client_us_east_1 = client(
+            "cloudtrail", region_name=AWS_REGION_US_EAST_1
+        )
+        s3_client_us_east_1 = client("s3", region_name=AWS_REGION_US_EAST_1)
+        kms_client = client("kms", region_name=AWS_REGION_US_EAST_1)
         trail_name_us = "trail_test_us"
         bucket_name_us = "bucket_test_us"
         s3_client_us_east_1.create_bucket(Bucket=bucket_name_us)
@@ -131,10 +106,12 @@ def test_trail_kms(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.cloudtrail.cloudtrail_kms_encryption_enabled.cloudtrail_kms_encryption_enabled.cloudtrail_client",
-            new=Cloudtrail(self.set_mocked_audit_info()),
+            new=Cloudtrail(
+                set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1])
+            ),
         ):
             # Test Check
             from prowler.providers.aws.services.cloudtrail.cloudtrail_kms_encryption_enabled.cloudtrail_kms_encryption_enabled import (
@@ -153,4 +130,4 @@ def test_trail_kms(self):
             assert result[0].resource_id == trail_name_us
             assert result[0].resource_arn == trail_us["TrailARN"]
             assert result[0].resource_tags == []
-            assert result[0].region == "us-east-1"
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/cloudtrail/cloudtrail_log_file_validation_enabled/cloudtrail_log_file_validation_enabled_test.py b/tests/providers/aws/services/cloudtrail/cloudtrail_log_file_validation_enabled/cloudtrail_log_file_validation_enabled_test.py
index 2e1042b2ae9..360009793be 100644
--- a/tests/providers/aws/services/cloudtrail/cloudtrail_log_file_validation_enabled/cloudtrail_log_file_validation_enabled_test.py
+++ b/tests/providers/aws/services/cloudtrail/cloudtrail_log_file_validation_enabled/cloudtrail_log_file_validation_enabled_test.py
@@ -1,48 +1,18 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_cloudtrail, mock_s3
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_cloudtrail_log_file_validation_enabled:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_no_trails(self):
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
             Cloudtrail,
@@ -50,10 +20,12 @@ def test_no_trails(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.cloudtrail.cloudtrail_log_file_validation_enabled.cloudtrail_log_file_validation_enabled.cloudtrail_client",
-            new=Cloudtrail(self.set_mocked_audit_info()),
+            new=Cloudtrail(
+                set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1])
+            ),
         ):
             # Test Check
             from prowler.providers.aws.services.cloudtrail.cloudtrail_log_file_validation_enabled.cloudtrail_log_file_validation_enabled import (
@@ -65,11 +37,12 @@ def test_no_trails(self):
 
             assert len(result) == 0
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_no_logging_validation(self):
-        cloudtrail_client_us_east_1 = client("cloudtrail", region_name="us-east-1")
-        s3_client_us_east_1 = client("s3", region_name="us-east-1")
+        cloudtrail_client_us_east_1 = client(
+            "cloudtrail", region_name=AWS_REGION_US_EAST_1
+        )
+        s3_client_us_east_1 = client("s3", region_name=AWS_REGION_US_EAST_1)
         trail_name_us = "trail_test_us"
         bucket_name_us = "bucket_test_us"
         s3_client_us_east_1.create_bucket(Bucket=bucket_name_us)
@@ -82,10 +55,12 @@ def test_no_logging_validation(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.cloudtrail.cloudtrail_log_file_validation_enabled.cloudtrail_log_file_validation_enabled.cloudtrail_client",
-            new=Cloudtrail(self.set_mocked_audit_info()),
+            new=Cloudtrail(
+                set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1])
+            ),
         ):
             # Test Check
             from prowler.providers.aws.services.cloudtrail.cloudtrail_log_file_validation_enabled.cloudtrail_log_file_validation_enabled import (
@@ -101,15 +76,18 @@ def test_no_logging_validation(self):
             assert result[0].resource_id == trail_name_us
             assert result[0].resource_arn == trail_us["TrailARN"]
             assert result[0].resource_tags == []
-            assert result[0].region == "us-east-1"
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_various_trails_with_and_without_logging_validation(self):
-        cloudtrail_client_us_east_1 = client("cloudtrail", region_name="us-east-1")
-        s3_client_us_east_1 = client("s3", region_name="us-east-1")
-        cloudtrail_client_eu_west_1 = client("cloudtrail", region_name="eu-west-1")
-        s3_client_eu_west_1 = client("s3", region_name="eu-west-1")
+        cloudtrail_client_us_east_1 = client(
+            "cloudtrail", region_name=AWS_REGION_US_EAST_1
+        )
+        s3_client_us_east_1 = client("s3", region_name=AWS_REGION_US_EAST_1)
+        cloudtrail_client_eu_west_1 = client(
+            "cloudtrail", region_name=AWS_REGION_EU_WEST_1
+        )
+        s3_client_eu_west_1 = client("s3", region_name=AWS_REGION_EU_WEST_1)
         trail_name_us = "trail_test_us"
         bucket_name_us = "bucket_test_us"
         trail_name_eu = "trail_test_eu"
@@ -117,7 +95,7 @@ def test_various_trails_with_and_without_logging_validation(self):
         s3_client_us_east_1.create_bucket(Bucket=bucket_name_us)
         s3_client_eu_west_1.create_bucket(
             Bucket=bucket_name_eu,
-            CreateBucketConfiguration={"LocationConstraint": "eu-west-1"},
+            CreateBucketConfiguration={"LocationConstraint": AWS_REGION_EU_WEST_1},
         )
         trail_us = cloudtrail_client_us_east_1.create_trail(
             Name=trail_name_us,
@@ -135,10 +113,12 @@ def test_various_trails_with_and_without_logging_validation(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.cloudtrail.cloudtrail_log_file_validation_enabled.cloudtrail_log_file_validation_enabled.cloudtrail_client",
-            new=Cloudtrail(self.set_mocked_audit_info()),
+            new=Cloudtrail(
+                set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1])
+            ),
         ) as service_client:
             # Test Check
             from prowler.providers.aws.services.cloudtrail.cloudtrail_log_file_validation_enabled.cloudtrail_log_file_validation_enabled import (
@@ -159,7 +139,7 @@ def test_various_trails_with_and_without_logging_validation(self):
                     assert report.resource_id == trail_name_us
                     assert report.resource_arn == trail_us["TrailARN"]
                     assert report.resource_tags == []
-                    assert report.region == "us-east-1"
+                    assert report.region == AWS_REGION_US_EAST_1
                 elif report.resource_id == trail_name_eu:
                     assert report.status == "FAIL"
                     assert search(
@@ -168,4 +148,4 @@ def test_various_trails_with_and_without_logging_validation(self):
                     assert report.resource_id == trail_name_eu
                     assert report.resource_arn == trail_eu["TrailARN"]
                     assert report.resource_tags == []
-                    assert report.region == "eu-west-1"
+                    assert report.region == AWS_REGION_EU_WEST_1
diff --git a/tests/providers/aws/services/cloudtrail/cloudtrail_logs_s3_bucket_access_logging_enabled/cloudtrail_logs_s3_bucket_access_logging_enabled_test.py b/tests/providers/aws/services/cloudtrail/cloudtrail_logs_s3_bucket_access_logging_enabled/cloudtrail_logs_s3_bucket_access_logging_enabled_test.py
index bbbe4b4c72a..bf6b149dbac 100644
--- a/tests/providers/aws/services/cloudtrail/cloudtrail_logs_s3_bucket_access_logging_enabled/cloudtrail_logs_s3_bucket_access_logging_enabled_test.py
+++ b/tests/providers/aws/services/cloudtrail/cloudtrail_logs_s3_bucket_access_logging_enabled/cloudtrail_logs_s3_bucket_access_logging_enabled_test.py
@@ -1,48 +1,18 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_cloudtrail, mock_s3
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_cloudtrail_logs_s3_bucket_access_logging_enabled:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_no_trails(self):
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
             Cloudtrail,
@@ -51,13 +21,17 @@ def test_no_trails(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.cloudtrail.cloudtrail_logs_s3_bucket_access_logging_enabled.cloudtrail_logs_s3_bucket_access_logging_enabled.cloudtrail_client",
-            new=Cloudtrail(self.set_mocked_audit_info()),
+            new=Cloudtrail(
+                set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1])
+            ),
         ), mock.patch(
             "prowler.providers.aws.services.cloudtrail.cloudtrail_logs_s3_bucket_access_logging_enabled.cloudtrail_logs_s3_bucket_access_logging_enabled.s3_client",
-            new=S3(self.set_mocked_audit_info()),
+            new=S3(
+                set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1])
+            ),
         ):
             # Test Check
             from prowler.providers.aws.services.cloudtrail.cloudtrail_logs_s3_bucket_access_logging_enabled.cloudtrail_logs_s3_bucket_access_logging_enabled import (
@@ -69,11 +43,12 @@ def test_no_trails(self):
 
             assert len(result) == 0
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_bucket_not_logging(self):
-        cloudtrail_client_us_east_1 = client("cloudtrail", region_name="us-east-1")
-        s3_client_us_east_1 = client("s3", region_name="us-east-1")
+        cloudtrail_client_us_east_1 = client(
+            "cloudtrail", region_name=AWS_REGION_US_EAST_1
+        )
+        s3_client_us_east_1 = client("s3", region_name=AWS_REGION_US_EAST_1)
         trail_name_us = "trail_test_us"
         bucket_name_us = "bucket_test_us"
         s3_client_us_east_1.create_bucket(Bucket=bucket_name_us)
@@ -88,13 +63,17 @@ def test_bucket_not_logging(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.cloudtrail.cloudtrail_logs_s3_bucket_access_logging_enabled.cloudtrail_logs_s3_bucket_access_logging_enabled.cloudtrail_client",
-            new=Cloudtrail(self.set_mocked_audit_info()),
+            new=Cloudtrail(
+                set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1])
+            ),
         ), mock.patch(
             "prowler.providers.aws.services.cloudtrail.cloudtrail_logs_s3_bucket_access_logging_enabled.cloudtrail_logs_s3_bucket_access_logging_enabled.s3_client",
-            new=S3(self.set_mocked_audit_info()),
+            new=S3(
+                set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1])
+            ),
         ):
             # Test Check
             from prowler.providers.aws.services.cloudtrail.cloudtrail_logs_s3_bucket_access_logging_enabled.cloudtrail_logs_s3_bucket_access_logging_enabled import (
@@ -113,13 +92,14 @@ def test_bucket_not_logging(self):
             assert result[0].resource_id == trail_name_us
             assert result[0].resource_arn == trail_us["TrailARN"]
             assert result[0].resource_tags == []
-            assert result[0].region == "us-east-1"
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_bucket_logging(self):
-        cloudtrail_client_us_east_1 = client("cloudtrail", region_name="us-east-1")
-        s3_client_us_east_1 = client("s3", region_name="us-east-1")
+        cloudtrail_client_us_east_1 = client(
+            "cloudtrail", region_name=AWS_REGION_US_EAST_1
+        )
+        s3_client_us_east_1 = client("s3", region_name=AWS_REGION_US_EAST_1)
         trail_name_us = "trail_test_us"
         bucket_name_us = "bucket_test_us"
         logging_bucket = "logging"
@@ -154,13 +134,17 @@ def test_bucket_logging(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.cloudtrail.cloudtrail_logs_s3_bucket_access_logging_enabled.cloudtrail_logs_s3_bucket_access_logging_enabled.cloudtrail_client",
-            new=Cloudtrail(self.set_mocked_audit_info()),
+            new=Cloudtrail(
+                set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1])
+            ),
         ), mock.patch(
             "prowler.providers.aws.services.cloudtrail.cloudtrail_logs_s3_bucket_access_logging_enabled.cloudtrail_logs_s3_bucket_access_logging_enabled.s3_client",
-            new=S3(self.set_mocked_audit_info()),
+            new=S3(
+                set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1])
+            ),
         ):
             # Test Check
             from prowler.providers.aws.services.cloudtrail.cloudtrail_logs_s3_bucket_access_logging_enabled.cloudtrail_logs_s3_bucket_access_logging_enabled import (
@@ -179,13 +163,14 @@ def test_bucket_logging(self):
             assert result[0].resource_id == trail_name_us
             assert result[0].resource_arn == trail_us["TrailARN"]
             assert result[0].resource_tags == []
-            assert result[0].region == "us-east-1"
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_bucket_cross_account(self):
-        cloudtrail_client_us_east_1 = client("cloudtrail", region_name="us-east-1")
-        s3_client_us_east_1 = client("s3", region_name="us-east-1")
+        cloudtrail_client_us_east_1 = client(
+            "cloudtrail", region_name=AWS_REGION_US_EAST_1
+        )
+        s3_client_us_east_1 = client("s3", region_name=AWS_REGION_US_EAST_1)
         trail_name_us = "trail_test_us"
         bucket_name_us = "bucket_test_us"
         s3_client_us_east_1.create_bucket(Bucket=bucket_name_us)
@@ -200,13 +185,17 @@ def test_bucket_cross_account(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.cloudtrail.cloudtrail_logs_s3_bucket_access_logging_enabled.cloudtrail_logs_s3_bucket_access_logging_enabled.cloudtrail_client",
-            new=Cloudtrail(self.set_mocked_audit_info()),
+            new=Cloudtrail(
+                set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1])
+            ),
         ), mock.patch(
             "prowler.providers.aws.services.cloudtrail.cloudtrail_logs_s3_bucket_access_logging_enabled.cloudtrail_logs_s3_bucket_access_logging_enabled.s3_client",
-            new=S3(self.set_mocked_audit_info()),
+            new=S3(
+                set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1])
+            ),
         ) as s3_client:
             # Test Check
             from prowler.providers.aws.services.cloudtrail.cloudtrail_logs_s3_bucket_access_logging_enabled.cloudtrail_logs_s3_bucket_access_logging_enabled import (
@@ -228,4 +217,4 @@ def test_bucket_cross_account(self):
             assert result[0].resource_id == trail_name_us
             assert result[0].resource_arn == trail_us["TrailARN"]
             assert result[0].resource_tags == []
-            assert result[0].region == "us-east-1"
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/cloudtrail/cloudtrail_logs_s3_bucket_is_not_publicly_accessible/cloudtrail_logs_s3_bucket_is_not_publicly_accessible_test.py b/tests/providers/aws/services/cloudtrail/cloudtrail_logs_s3_bucket_is_not_publicly_accessible/cloudtrail_logs_s3_bucket_is_not_publicly_accessible_test.py
index e1a682fd80d..19655f959e7 100644
--- a/tests/providers/aws/services/cloudtrail/cloudtrail_logs_s3_bucket_is_not_publicly_accessible/cloudtrail_logs_s3_bucket_is_not_publicly_accessible_test.py
+++ b/tests/providers/aws/services/cloudtrail/cloudtrail_logs_s3_bucket_is_not_publicly_accessible/cloudtrail_logs_s3_bucket_is_not_publicly_accessible_test.py
@@ -1,48 +1,18 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_cloudtrail, mock_s3
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_cloudtrail_logs_s3_bucket_is_not_publicly_accessible:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_not_trails(self):
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
             Cloudtrail,
@@ -51,13 +21,17 @@ def test_not_trails(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.cloudtrail.cloudtrail_logs_s3_bucket_is_not_publicly_accessible.cloudtrail_logs_s3_bucket_is_not_publicly_accessible.cloudtrail_client",
-            new=Cloudtrail(self.set_mocked_audit_info()),
+            new=Cloudtrail(
+                set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1])
+            ),
         ), mock.patch(
             "prowler.providers.aws.services.cloudtrail.cloudtrail_logs_s3_bucket_is_not_publicly_accessible.cloudtrail_logs_s3_bucket_is_not_publicly_accessible.s3_client",
-            new=S3(self.set_mocked_audit_info()),
+            new=S3(
+                set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1])
+            ),
         ):
             # Test Check
             from prowler.providers.aws.services.cloudtrail.cloudtrail_logs_s3_bucket_is_not_publicly_accessible.cloudtrail_logs_s3_bucket_is_not_publicly_accessible import (
@@ -69,11 +43,10 @@ def test_not_trails(self):
 
             assert len(result) == 0
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_trail_bucket_no_acl(self):
-        cloudtrail_client = client("cloudtrail", region_name="us-east-1")
-        s3_client = client("s3", region_name="us-east-1")
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         trail_name_us = "trail_test_us"
         bucket_name_us = "bucket_test_us"
         s3_client.create_bucket(Bucket=bucket_name_us)
@@ -88,13 +61,17 @@ def test_trail_bucket_no_acl(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.cloudtrail.cloudtrail_logs_s3_bucket_is_not_publicly_accessible.cloudtrail_logs_s3_bucket_is_not_publicly_accessible.cloudtrail_client",
-            new=Cloudtrail(self.set_mocked_audit_info()),
+            new=Cloudtrail(
+                set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1])
+            ),
         ), mock.patch(
             "prowler.providers.aws.services.cloudtrail.cloudtrail_logs_s3_bucket_is_not_publicly_accessible.cloudtrail_logs_s3_bucket_is_not_publicly_accessible.s3_client",
-            new=S3(self.set_mocked_audit_info()),
+            new=S3(
+                set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1])
+            ),
         ):
             # Test Check
             from prowler.providers.aws.services.cloudtrail.cloudtrail_logs_s3_bucket_is_not_publicly_accessible.cloudtrail_logs_s3_bucket_is_not_publicly_accessible import (
@@ -114,12 +91,11 @@ def test_trail_bucket_no_acl(self):
                 f"S3 Bucket {bucket_name_us} from single region trail {trail_name_us} is not publicly accessible.",
             )
             assert result[0].resource_tags == []
-            assert result[0].region == "us-east-1"
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_trail_bucket_public_acl(self):
-        s3_client = client("s3", region_name="us-east-1")
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         bucket_name_us = "bucket_test_us"
         s3_client.create_bucket(Bucket=bucket_name_us)
         s3_client.put_bucket_acl(
@@ -142,7 +118,7 @@ def test_trail_bucket_public_acl(self):
         )
 
         trail_name_us = "trail_test_us"
-        cloudtrail_client = client("cloudtrail", region_name="us-east-1")
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
         trail_us = cloudtrail_client.create_trail(
             Name=trail_name_us, S3BucketName=bucket_name_us, IsMultiRegionTrail=False
         )
@@ -154,13 +130,17 @@ def test_trail_bucket_public_acl(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.cloudtrail.cloudtrail_logs_s3_bucket_is_not_publicly_accessible.cloudtrail_logs_s3_bucket_is_not_publicly_accessible.cloudtrail_client",
-            new=Cloudtrail(self.set_mocked_audit_info()),
+            new=Cloudtrail(
+                set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1])
+            ),
         ), mock.patch(
             "prowler.providers.aws.services.cloudtrail.cloudtrail_logs_s3_bucket_is_not_publicly_accessible.cloudtrail_logs_s3_bucket_is_not_publicly_accessible.s3_client",
-            new=S3(self.set_mocked_audit_info()),
+            new=S3(
+                set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1])
+            ),
         ):
             # Test Check
             from prowler.providers.aws.services.cloudtrail.cloudtrail_logs_s3_bucket_is_not_publicly_accessible.cloudtrail_logs_s3_bucket_is_not_publicly_accessible import (
@@ -179,13 +159,12 @@ def test_trail_bucket_public_acl(self):
                 f"S3 Bucket {bucket_name_us} from single region trail {trail_name_us} is publicly accessible.",
             )
             assert result[0].resource_tags == []
-            assert result[0].region == "us-east-1"
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_trail_bucket_not_public_acl(self):
-        cloudtrail_client = client("cloudtrail", region_name="us-east-1")
-        s3_client = client("s3", region_name="us-east-1")
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         trail_name_us = "trail_test_us"
         bucket_name_us = "bucket_test_us"
         s3_client.create_bucket(Bucket=bucket_name_us)
@@ -218,13 +197,17 @@ def test_trail_bucket_not_public_acl(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.cloudtrail.cloudtrail_logs_s3_bucket_is_not_publicly_accessible.cloudtrail_logs_s3_bucket_is_not_publicly_accessible.cloudtrail_client",
-            new=Cloudtrail(self.set_mocked_audit_info()),
+            new=Cloudtrail(
+                set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1])
+            ),
         ), mock.patch(
             "prowler.providers.aws.services.cloudtrail.cloudtrail_logs_s3_bucket_is_not_publicly_accessible.cloudtrail_logs_s3_bucket_is_not_publicly_accessible.s3_client",
-            new=S3(self.set_mocked_audit_info()),
+            new=S3(
+                set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1])
+            ),
         ):
             # Test Check
             from prowler.providers.aws.services.cloudtrail.cloudtrail_logs_s3_bucket_is_not_publicly_accessible.cloudtrail_logs_s3_bucket_is_not_publicly_accessible import (
@@ -243,13 +226,12 @@ def test_trail_bucket_not_public_acl(self):
                 f"S3 Bucket {bucket_name_us} from single region trail {trail_name_us} is not publicly accessible.",
             )
             assert result[0].resource_tags == []
-            assert result[0].region == "us-east-1"
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_trail_bucket_cross_account(self):
-        cloudtrail_client = client("cloudtrail", region_name="us-east-1")
-        s3_client = client("s3", region_name="us-east-1")
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         trail_name_us = "trail_test_us"
         bucket_name_us = "bucket_test_us"
         s3_client.create_bucket(Bucket=bucket_name_us)
@@ -264,13 +246,17 @@ def test_trail_bucket_cross_account(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.cloudtrail.cloudtrail_logs_s3_bucket_is_not_publicly_accessible.cloudtrail_logs_s3_bucket_is_not_publicly_accessible.cloudtrail_client",
-            new=Cloudtrail(self.set_mocked_audit_info()),
+            new=Cloudtrail(
+                set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1])
+            ),
         ), mock.patch(
             "prowler.providers.aws.services.cloudtrail.cloudtrail_logs_s3_bucket_is_not_publicly_accessible.cloudtrail_logs_s3_bucket_is_not_publicly_accessible.s3_client",
-            new=S3(self.set_mocked_audit_info()),
+            new=S3(
+                set_mocked_aws_audit_info([AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1])
+            ),
         ) as s3_client:
             # Test Check
             from prowler.providers.aws.services.cloudtrail.cloudtrail_logs_s3_bucket_is_not_publicly_accessible.cloudtrail_logs_s3_bucket_is_not_publicly_accessible import (
@@ -292,4 +278,4 @@ def test_trail_bucket_cross_account(self):
                 result[0].status_extended,
             )
             assert result[0].resource_tags == []
-            assert result[0].region == "us-east-1"
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/cloudtrail/cloudtrail_multi_region_enabled/cloudtrail_multi_region_enabled_test.py b/tests/providers/aws/services/cloudtrail/cloudtrail_multi_region_enabled/cloudtrail_multi_region_enabled_test.py
index 13b39513fe3..cebbe0c808a 100644
--- a/tests/providers/aws/services/cloudtrail/cloudtrail_multi_region_enabled/cloudtrail_multi_region_enabled_test.py
+++ b/tests/providers/aws/services/cloudtrail/cloudtrail_multi_region_enabled/cloudtrail_multi_region_enabled_test.py
@@ -1,55 +1,27 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_cloudtrail, mock_s3
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION_US_EAST_1 = "us-east-1"
-AWS_REGION_EU_WEST_1 = "eu-west-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_cloudtrail_multi_region_enabled:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=[AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
-    @mock_cloudtrail
+    @mock_aws
     def test_no_trails(self):
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
             Cloudtrail,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -93,8 +65,7 @@ def test_no_trails(self):
                         )
                         assert report.resource_tags == []
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_various_trails_no_logging(self):
         cloudtrail_client_us_east_1 = client(
             "cloudtrail", region_name=AWS_REGION_US_EAST_1
@@ -124,7 +95,9 @@ def test_various_trails_no_logging(self):
             Cloudtrail,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -168,8 +141,7 @@ def test_various_trails_no_logging(self):
                         )
                         assert report.resource_tags == []
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_various_trails_with_and_without_logging(self):
         cloudtrail_client_us_east_1 = client(
             "cloudtrail", region_name=AWS_REGION_US_EAST_1
@@ -201,7 +173,9 @@ def test_various_trails_with_and_without_logging(self):
             Cloudtrail,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -244,8 +218,7 @@ def test_various_trails_with_and_without_logging(self):
                         assert report.resource_tags == []
                         assert report.region == AWS_REGION_EU_WEST_1
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_trail_multiregion_logging_and_single_region_not_logging(self):
         cloudtrail_client_us_east_1 = client(
             "cloudtrail", region_name=AWS_REGION_US_EAST_1
@@ -277,7 +250,9 @@ def test_trail_multiregion_logging_and_single_region_not_logging(self):
             Cloudtrail,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
diff --git a/tests/providers/aws/services/cloudtrail/cloudtrail_multi_region_enabled_logging_management_events/cloudtrail_multi_region_enabled_logging_management_events_test.py b/tests/providers/aws/services/cloudtrail/cloudtrail_multi_region_enabled_logging_management_events/cloudtrail_multi_region_enabled_logging_management_events_test.py
index 46de6580c83..66506867301 100644
--- a/tests/providers/aws/services/cloudtrail/cloudtrail_multi_region_enabled_logging_management_events/cloudtrail_multi_region_enabled_logging_management_events_test.py
+++ b/tests/providers/aws/services/cloudtrail/cloudtrail_multi_region_enabled_logging_management_events/cloudtrail_multi_region_enabled_logging_management_events_test.py
@@ -1,54 +1,24 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_cloudtrail, mock_s3
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_ACCOUNT_ARN = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_cloudtrail_multi_region_enabled_logging_management_events:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=AWS_ACCOUNT_ARN,
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=[AWS_REGION],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
-    @mock_cloudtrail
+    @mock_aws
     def test_no_trails(self):
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
             Cloudtrail,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -68,18 +38,19 @@ def test_no_trails(self):
                 assert len(result) == 1
                 assert result[0].resource_id == AWS_ACCOUNT_NUMBER
                 assert result[0].resource_arn == AWS_ACCOUNT_ARN
-                assert result[0].region == AWS_REGION
+                assert result[0].region == AWS_REGION_US_EAST_1
                 assert result[0].status == "FAIL"
                 assert (
                     result[0].status_extended
                     == "No trail found with multi-region enabled and logging management events."
                 )
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_compliant_trail_advanced_event_selector(self):
-        cloudtrail_client_us_east_1 = client("cloudtrail", region_name=AWS_REGION)
-        s3_client_us_east_1 = client("s3", region_name=AWS_REGION)
+        cloudtrail_client_us_east_1 = client(
+            "cloudtrail", region_name=AWS_REGION_US_EAST_1
+        )
+        s3_client_us_east_1 = client("s3", region_name=AWS_REGION_US_EAST_1)
         trail_name_us = "trail_test_us"
         bucket_name_us = "bucket_test_us"
         s3_client_us_east_1.create_bucket(Bucket=bucket_name_us)
@@ -103,7 +74,7 @@ def test_compliant_trail_advanced_event_selector(self):
             Cloudtrail,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -123,18 +94,19 @@ def test_compliant_trail_advanced_event_selector(self):
                 assert len(result) == 1
                 assert result[0].resource_id == trail_name_us
                 assert result[0].resource_arn == trail_us["TrailARN"]
-                assert result[0].region == AWS_REGION
+                assert result[0].region == AWS_REGION_US_EAST_1
                 assert result[0].status == "PASS"
                 assert (
                     result[0].status_extended
-                    == f"Trail {trail_name_us} from home region {AWS_REGION} is multi-region, is logging and have management events enabled."
+                    == f"Trail {trail_name_us} from home region {AWS_REGION_US_EAST_1} is multi-region, is logging and have management events enabled."
                 )
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_non_compliant_trail_advanced_event_selector(self):
-        cloudtrail_client_us_east_1 = client("cloudtrail", region_name=AWS_REGION)
-        s3_client_us_east_1 = client("s3", region_name=AWS_REGION)
+        cloudtrail_client_us_east_1 = client(
+            "cloudtrail", region_name=AWS_REGION_US_EAST_1
+        )
+        s3_client_us_east_1 = client("s3", region_name=AWS_REGION_US_EAST_1)
         trail_name_us = "trail_test_us"
         bucket_name_us = "bucket_test_us"
         s3_client_us_east_1.create_bucket(Bucket=bucket_name_us)
@@ -159,7 +131,7 @@ def test_non_compliant_trail_advanced_event_selector(self):
             Cloudtrail,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -178,18 +150,19 @@ def test_non_compliant_trail_advanced_event_selector(self):
                 result = check.execute()
                 assert result[0].resource_id == AWS_ACCOUNT_NUMBER
                 assert result[0].resource_arn == AWS_ACCOUNT_ARN
-                assert result[0].region == AWS_REGION
+                assert result[0].region == AWS_REGION_US_EAST_1
                 assert result[0].status == "FAIL"
                 assert (
                     result[0].status_extended
                     == "No trail found with multi-region enabled and logging management events."
                 )
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_compliant_trail_classic_event_selector(self):
-        cloudtrail_client_us_east_1 = client("cloudtrail", region_name=AWS_REGION)
-        s3_client_us_east_1 = client("s3", region_name=AWS_REGION)
+        cloudtrail_client_us_east_1 = client(
+            "cloudtrail", region_name=AWS_REGION_US_EAST_1
+        )
+        s3_client_us_east_1 = client("s3", region_name=AWS_REGION_US_EAST_1)
         trail_name_us = "trail_test_us"
         bucket_name_us = "bucket_test_us"
         s3_client_us_east_1.create_bucket(Bucket=bucket_name_us)
@@ -212,7 +185,7 @@ def test_compliant_trail_classic_event_selector(self):
             Cloudtrail,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -232,18 +205,19 @@ def test_compliant_trail_classic_event_selector(self):
                 assert len(result) == 1
                 assert result[0].resource_id == trail_name_us
                 assert result[0].resource_arn == trail_us["TrailARN"]
-                assert result[0].region == AWS_REGION
+                assert result[0].region == AWS_REGION_US_EAST_1
                 assert result[0].status == "PASS"
                 assert (
                     result[0].status_extended
-                    == f"Trail {trail_name_us} from home region {AWS_REGION} is multi-region, is logging and have management events enabled."
+                    == f"Trail {trail_name_us} from home region {AWS_REGION_US_EAST_1} is multi-region, is logging and have management events enabled."
                 )
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_non_compliant_trail_classic_event_selector(self):
-        cloudtrail_client_us_east_1 = client("cloudtrail", region_name=AWS_REGION)
-        s3_client_us_east_1 = client("s3", region_name=AWS_REGION)
+        cloudtrail_client_us_east_1 = client(
+            "cloudtrail", region_name=AWS_REGION_US_EAST_1
+        )
+        s3_client_us_east_1 = client("s3", region_name=AWS_REGION_US_EAST_1)
         trail_name_us = "trail_test_us"
         bucket_name_us = "bucket_test_us"
         s3_client_us_east_1.create_bucket(Bucket=bucket_name_us)
@@ -266,7 +240,7 @@ def test_non_compliant_trail_classic_event_selector(self):
             Cloudtrail,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -285,7 +259,7 @@ def test_non_compliant_trail_classic_event_selector(self):
                 result = check.execute()
                 assert result[0].resource_id == AWS_ACCOUNT_NUMBER
                 assert result[0].resource_arn == AWS_ACCOUNT_ARN
-                assert result[0].region == AWS_REGION
+                assert result[0].region == AWS_REGION_US_EAST_1
                 assert result[0].status == "FAIL"
                 assert (
                     result[0].status_extended
diff --git a/tests/providers/aws/services/cloudtrail/cloudtrail_s3_dataevents_read_enabled/cloudtrail_s3_dataevents_read_enabled_test.py b/tests/providers/aws/services/cloudtrail/cloudtrail_s3_dataevents_read_enabled/cloudtrail_s3_dataevents_read_enabled_test.py
index cc5e6609454..ba711f1e31d 100644
--- a/tests/providers/aws/services/cloudtrail/cloudtrail_s3_dataevents_read_enabled/cloudtrail_s3_dataevents_read_enabled_test.py
+++ b/tests/providers/aws/services/cloudtrail/cloudtrail_s3_dataevents_read_enabled/cloudtrail_s3_dataevents_read_enabled_test.py
@@ -1,7 +1,7 @@
 from unittest import mock
 
 from boto3 import client
-from moto import mock_cloudtrail, mock_s3
+from moto import mock_aws
 
 from tests.providers.aws.audit_info_utils import (
     AWS_ACCOUNT_NUMBER,
@@ -11,8 +11,7 @@
 
 
 class Test_cloudtrail_s3_dataevents_read_enabled:
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_trail_without_data_events(self):
         cloudtrail_client_us_east_1 = client(
             "cloudtrail", region_name=AWS_REGION_US_EAST_1
@@ -61,8 +60,7 @@ def test_trail_without_data_events(self):
             assert result[0].resource_tags == []
             assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_trail_without_data_events_ignoring(self):
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
             Cloudtrail,
@@ -92,8 +90,7 @@ def test_trail_without_data_events_ignoring(self):
 
             assert len(result) == 0
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_trail_without_data_events_ignoring_with_buckets(self):
         s3_client_us_east_1 = client("s3", region_name=AWS_REGION_US_EAST_1)
         bucket_name_us = "bucket_test_us"
@@ -136,8 +133,7 @@ def test_trail_without_data_events_ignoring_with_buckets(self):
             assert result[0].resource_tags == []
             assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_trail_without_s3_data_events(self):
         cloudtrail_client_us_east_1 = client(
             "cloudtrail", region_name=AWS_REGION_US_EAST_1
@@ -198,8 +194,7 @@ def test_trail_without_s3_data_events(self):
             assert result[0].resource_tags == []
             assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_trail_with_s3_classic_data_events(self):
         cloudtrail_client_us_east_1 = client(
             "cloudtrail", region_name=AWS_REGION_US_EAST_1
@@ -260,8 +255,7 @@ def test_trail_with_s3_classic_data_events(self):
             assert result[0].resource_tags == []
             assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_trail_with_s3_advanced_data_events(self):
         cloudtrail_client_us_east_1 = client(
             "cloudtrail", region_name=AWS_REGION_US_EAST_1
@@ -322,8 +316,7 @@ def test_trail_with_s3_advanced_data_events(self):
             assert result[0].resource_tags == []
             assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_trail_with_s3_three_colons(self):
         cloudtrail_client_us_east_1 = client(
             "cloudtrail", region_name=AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/cloudtrail/cloudtrail_s3_dataevents_write_enabled/cloudtrail_s3_dataevents_write_enabled_test.py b/tests/providers/aws/services/cloudtrail/cloudtrail_s3_dataevents_write_enabled/cloudtrail_s3_dataevents_write_enabled_test.py
index a7def7b8cd6..f686d773bd8 100644
--- a/tests/providers/aws/services/cloudtrail/cloudtrail_s3_dataevents_write_enabled/cloudtrail_s3_dataevents_write_enabled_test.py
+++ b/tests/providers/aws/services/cloudtrail/cloudtrail_s3_dataevents_write_enabled/cloudtrail_s3_dataevents_write_enabled_test.py
@@ -1,7 +1,7 @@
 from unittest import mock
 
 from boto3 import client
-from moto import mock_cloudtrail, mock_s3
+from moto import mock_aws
 
 from tests.providers.aws.audit_info_utils import (
     AWS_ACCOUNT_NUMBER,
@@ -11,8 +11,7 @@
 
 
 class Test_cloudtrail_s3_dataevents_write_enabled:
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_trail_without_data_events(self):
         cloudtrail_client_us_east_1 = client(
             "cloudtrail", region_name=AWS_REGION_US_EAST_1
@@ -61,8 +60,7 @@ def test_trail_without_data_events(self):
             assert result[0].resource_tags == []
             assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_trail_without_s3_data_events(self):
         cloudtrail_client_us_east_1 = client(
             "cloudtrail", region_name=AWS_REGION_US_EAST_1
@@ -123,8 +121,7 @@ def test_trail_without_s3_data_events(self):
             assert result[0].resource_tags == []
             assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_trail_without_s3_data_events_ignoring(self):
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
             Cloudtrail,
@@ -154,8 +151,7 @@ def test_trail_without_s3_data_events_ignoring(self):
 
             assert len(result) == 0
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_trail_without_s3_data_events_ignoring_with_buckets(self):
         s3_client_us_east_1 = client("s3", region_name=AWS_REGION_US_EAST_1)
         bucket_name_us = "bucket_test_us"
@@ -197,8 +193,7 @@ def test_trail_without_s3_data_events_ignoring_with_buckets(self):
             assert result[0].resource_tags == []
             assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_trail_with_s3_data_events(self):
         cloudtrail_client_us_east_1 = client(
             "cloudtrail", region_name=AWS_REGION_US_EAST_1
@@ -259,8 +254,7 @@ def test_trail_with_s3_data_events(self):
             assert result[0].resource_tags == []
             assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_trail_with_s3_advanced_data_events(self):
         cloudtrail_client_us_east_1 = client(
             "cloudtrail", region_name=AWS_REGION_US_EAST_1
@@ -320,8 +314,7 @@ def test_trail_with_s3_advanced_data_events(self):
             assert result[0].resource_tags == []
             assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_trail_with_s3_three_colons(self):
         cloudtrail_client_us_east_1 = client(
             "cloudtrail", region_name=AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/cloudtrail/cloudtrail_service_test.py b/tests/providers/aws/services/cloudtrail/cloudtrail_service_test.py
index 2eb5c61ff7c..37470b47674 100644
--- a/tests/providers/aws/services/cloudtrail/cloudtrail_service_test.py
+++ b/tests/providers/aws/services/cloudtrail/cloudtrail_service_test.py
@@ -1,81 +1,63 @@
-from boto3 import client, session
-from moto import mock_cloudtrail, mock_s3
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.cloudtrail.cloudtrail_service import Cloudtrail
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_Cloudtrail_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["eu-west-1", "us-east-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test Cloudtrail Service
-    @mock_cloudtrail
+    @mock_aws
     def test_service(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
         cloudtrail = Cloudtrail(audit_info)
         assert cloudtrail.service == "cloudtrail"
 
     # Test Cloudtrail client
-    @mock_cloudtrail
+    @mock_aws
     def test_client(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
         cloudtrail = Cloudtrail(audit_info)
         for regional_client in cloudtrail.regional_clients.values():
             assert regional_client.__class__.__name__ == "CloudTrail"
 
     # Test Cloudtrail session
-    @mock_cloudtrail
+    @mock_aws
     def test__get_session__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
         cloudtrail = Cloudtrail(audit_info)
         assert cloudtrail.session.__class__.__name__ == "Session"
 
     # Test Cloudtrail Session
-    @mock_cloudtrail
+    @mock_aws
     def test_audited_account(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
         cloudtrail = Cloudtrail(audit_info)
         assert cloudtrail.audited_account == AWS_ACCOUNT_NUMBER
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_describe_trails(self):
-        cloudtrail_client_us_east_1 = client("cloudtrail", region_name="us-east-1")
-        s3_client_us_east_1 = client("s3", region_name="us-east-1")
-        cloudtrail_client_eu_west_1 = client("cloudtrail", region_name="eu-west-1")
-        s3_client_eu_west_1 = client("s3", region_name="eu-west-1")
+        cloudtrail_client_us_east_1 = client(
+            "cloudtrail", region_name=AWS_REGION_US_EAST_1
+        )
+        s3_client_us_east_1 = client("s3", region_name=AWS_REGION_US_EAST_1)
+        cloudtrail_client_eu_west_1 = client(
+            "cloudtrail", region_name=AWS_REGION_EU_WEST_1
+        )
+        s3_client_eu_west_1 = client("s3", region_name=AWS_REGION_EU_WEST_1)
         trail_name_us = "trail_test_us"
         bucket_name_us = "bucket_test_us"
         trail_name_eu = "trail_test_eu"
@@ -83,7 +65,7 @@ def test_describe_trails(self):
         s3_client_us_east_1.create_bucket(Bucket=bucket_name_us)
         s3_client_eu_west_1.create_bucket(
             Bucket=bucket_name_eu,
-            CreateBucketConfiguration={"LocationConstraint": "eu-west-1"},
+            CreateBucketConfiguration={"LocationConstraint": AWS_REGION_EU_WEST_1},
         )
         cloudtrail_client_us_east_1.create_trail(
             Name=trail_name_us,
@@ -101,7 +83,9 @@ def test_describe_trails(self):
                 {"Key": "test", "Value": "test"},
             ],
         )
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
         cloudtrail = Cloudtrail(audit_info)
         assert len(cloudtrail.trails) == 2
         for trail in cloudtrail.trails:
@@ -109,9 +93,13 @@ def test_describe_trails(self):
                 assert trail.name == trail_name_us or trail.name == trail_name_eu
                 assert not trail.is_multiregion
                 assert (
-                    trail.home_region == "us-east-1" or trail.home_region == "eu-west-1"
+                    trail.home_region == AWS_REGION_US_EAST_1
+                    or trail.home_region == AWS_REGION_EU_WEST_1
+                )
+                assert (
+                    trail.region == AWS_REGION_US_EAST_1
+                    or trail.region == AWS_REGION_EU_WEST_1
                 )
-                assert trail.region == "us-east-1" or trail.region == "eu-west-1"
                 assert not trail.is_logging
                 assert not trail.log_file_validation_enabled
                 assert not trail.latest_cloudwatch_delivery_time
@@ -123,13 +111,16 @@ def test_describe_trails(self):
                     {"Key": "test", "Value": "test"},
                 ]
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_status_trails(self):
-        cloudtrail_client_us_east_1 = client("cloudtrail", region_name="us-east-1")
-        s3_client_us_east_1 = client("s3", region_name="us-east-1")
-        cloudtrail_client_eu_west_1 = client("cloudtrail", region_name="eu-west-1")
-        s3_client_eu_west_1 = client("s3", region_name="eu-west-1")
+        cloudtrail_client_us_east_1 = client(
+            "cloudtrail", region_name=AWS_REGION_US_EAST_1
+        )
+        s3_client_us_east_1 = client("s3", region_name=AWS_REGION_US_EAST_1)
+        cloudtrail_client_eu_west_1 = client(
+            "cloudtrail", region_name=AWS_REGION_EU_WEST_1
+        )
+        s3_client_eu_west_1 = client("s3", region_name=AWS_REGION_EU_WEST_1)
         trail_name_us = "trail_test_us"
         bucket_name_us = "bucket_test_us"
         trail_name_eu = "trail_test_eu"
@@ -137,7 +128,7 @@ def test_status_trails(self):
         s3_client_us_east_1.create_bucket(Bucket=bucket_name_us)
         s3_client_eu_west_1.create_bucket(
             Bucket=bucket_name_eu,
-            CreateBucketConfiguration={"LocationConstraint": "eu-west-1"},
+            CreateBucketConfiguration={"LocationConstraint": AWS_REGION_EU_WEST_1},
         )
         cloudtrail_client_us_east_1.create_trail(
             Name=trail_name_us,
@@ -149,25 +140,28 @@ def test_status_trails(self):
         cloudtrail_client_eu_west_1.create_trail(
             Name=trail_name_eu, S3BucketName=bucket_name_eu, IsMultiRegionTrail=False
         )
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
         cloudtrail = Cloudtrail(audit_info)
         assert len(cloudtrail.trails) == len(audit_info.audited_regions)
         for trail in cloudtrail.trails:
             if trail.name:
                 if trail.name == trail_name_us:
                     assert not trail.is_multiregion
-                    assert trail.home_region == "us-east-1"
-                    assert trail.region == "us-east-1"
+                    assert trail.home_region == AWS_REGION_US_EAST_1
+                    assert trail.region == AWS_REGION_US_EAST_1
                     assert trail.is_logging
                     assert trail.log_file_validation_enabled
                     assert not trail.latest_cloudwatch_delivery_time
                     assert trail.s3_bucket == bucket_name_us
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_get_classic_event_selectors(self):
-        cloudtrail_client_us_east_1 = client("cloudtrail", region_name="us-east-1")
-        s3_client_us_east_1 = client("s3", region_name="us-east-1")
+        cloudtrail_client_us_east_1 = client(
+            "cloudtrail", region_name=AWS_REGION_US_EAST_1
+        )
+        s3_client_us_east_1 = client("s3", region_name=AWS_REGION_US_EAST_1)
         trail_name_us = "trail_test_us"
         bucket_name_us = "bucket_test_us"
         s3_client_us_east_1.create_bucket(Bucket=bucket_name_us)
@@ -190,15 +184,17 @@ def test_get_classic_event_selectors(self):
                 }
             ],
         )["EventSelectors"]
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
         cloudtrail = Cloudtrail(audit_info)
         assert len(cloudtrail.trails) == len(audit_info.audited_regions)
         for trail in cloudtrail.trails:
             if trail.name:
                 if trail.name == trail_name_us:
                     assert not trail.is_multiregion
-                    assert trail.home_region == "us-east-1"
-                    assert trail.region == "us-east-1"
+                    assert trail.home_region == AWS_REGION_US_EAST_1
+                    assert trail.region == AWS_REGION_US_EAST_1
                     assert trail.is_logging
                     assert trail.log_file_validation_enabled
                     assert not trail.latest_cloudwatch_delivery_time
@@ -208,11 +204,12 @@ def test_get_classic_event_selectors(self):
                     )
                     assert not trail.data_events[0].is_advanced
 
-    @mock_cloudtrail
-    @mock_s3
+    @mock_aws
     def test_get_advanced_event_selectors(self):
-        cloudtrail_client_us_east_1 = client("cloudtrail", region_name="us-east-1")
-        s3_client_us_east_1 = client("s3", region_name="us-east-1")
+        cloudtrail_client_us_east_1 = client(
+            "cloudtrail", region_name=AWS_REGION_US_EAST_1
+        )
+        s3_client_us_east_1 = client("s3", region_name=AWS_REGION_US_EAST_1)
         trail_name_us = "trail_test_us"
         bucket_name_us = "bucket_test_us"
         s3_client_us_east_1.create_bucket(Bucket=bucket_name_us)
@@ -235,15 +232,17 @@ def test_get_advanced_event_selectors(self):
                 },
             ],
         )["AdvancedEventSelectors"]
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
         cloudtrail = Cloudtrail(audit_info)
         assert len(cloudtrail.trails) == len(audit_info.audited_regions)
         for trail in cloudtrail.trails:
             if trail.name:
                 if trail.name == trail_name_us:
                     assert not trail.is_multiregion
-                    assert trail.home_region == "us-east-1"
-                    assert trail.region == "us-east-1"
+                    assert trail.home_region == AWS_REGION_US_EAST_1
+                    assert trail.region == AWS_REGION_US_EAST_1
                     assert trail.is_logging
                     assert trail.log_file_validation_enabled
                     assert not trail.latest_cloudwatch_delivery_time
diff --git a/tests/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_acls_alarm_configured/cloudwatch_changes_to_network_acls_alarm_configured_test.py b/tests/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_acls_alarm_configured/cloudwatch_changes_to_network_acls_alarm_configured_test.py
index c1a96b06a9e..1ddb0d1adcb 100644
--- a/tests/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_acls_alarm_configured/cloudwatch_changes_to_network_acls_alarm_configured_test.py
+++ b/tests/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_acls_alarm_configured/cloudwatch_changes_to_network_acls_alarm_configured_test.py
@@ -1,51 +1,19 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_cloudtrail, mock_cloudwatch, mock_logs, mock_s3
-from moto.core import DEFAULT_ACCOUNT_ID
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_cloudwatch_changes_to_network_acls_alarm_configured:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
+    @mock_aws
     def test_cloudwatch_no_log_groups(self):
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
             Cloudtrail,
@@ -55,7 +23,9 @@ def test_cloudwatch_no_log_groups(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -94,15 +64,14 @@ def test_cloudwatch_no_log_groups(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_no_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         cloudtrail_client.create_trail(Name="test_trail", S3BucketName="test")
 
@@ -114,7 +83,9 @@ def test_cloudwatch_trail_no_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -153,22 +124,21 @@ def test_cloudwatch_trail_no_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
 
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
@@ -179,7 +149,9 @@ def test_cloudwatch_trail_with_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -218,22 +190,21 @@ def test_cloudwatch_trail_with_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -256,7 +227,9 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -296,22 +269,24 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter but no alarms associated."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -345,7 +320,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -385,22 +362,24 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -434,7 +413,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -474,22 +455,24 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -523,7 +506,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -563,3 +548,8 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_gateways_alarm_configured/cloudwatch_changes_to_network_gateways_alarm_configured_test.py b/tests/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_gateways_alarm_configured/cloudwatch_changes_to_network_gateways_alarm_configured_test.py
index e72e2952407..f807e7519db 100644
--- a/tests/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_gateways_alarm_configured/cloudwatch_changes_to_network_gateways_alarm_configured_test.py
+++ b/tests/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_gateways_alarm_configured/cloudwatch_changes_to_network_gateways_alarm_configured_test.py
@@ -1,51 +1,19 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_cloudtrail, mock_cloudwatch, mock_logs, mock_s3
-from moto.core import DEFAULT_ACCOUNT_ID
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_cloudwatch_changes_to_network_gateways_alarm_configured:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
+    @mock_aws
     def test_cloudwatch_no_log_groups(self):
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
             Cloudtrail,
@@ -55,7 +23,9 @@ def test_cloudwatch_no_log_groups(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -94,15 +64,14 @@ def test_cloudwatch_no_log_groups(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_no_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         cloudtrail_client.create_trail(Name="test_trail", S3BucketName="test")
 
@@ -114,7 +83,9 @@ def test_cloudwatch_trail_no_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -153,22 +124,21 @@ def test_cloudwatch_trail_no_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
 
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
@@ -179,7 +149,9 @@ def test_cloudwatch_trail_with_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -218,22 +190,21 @@ def test_cloudwatch_trail_with_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -256,7 +227,9 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -296,22 +269,24 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter but no alarms associated."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -345,7 +320,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -385,22 +362,24 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -434,7 +413,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -474,22 +455,24 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -523,7 +506,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -563,3 +548,8 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_route_tables_alarm_configured/cloudwatch_changes_to_network_route_tables_alarm_configured_test.py b/tests/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_route_tables_alarm_configured/cloudwatch_changes_to_network_route_tables_alarm_configured_test.py
index 7361219cef8..2e8a4264cef 100644
--- a/tests/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_route_tables_alarm_configured/cloudwatch_changes_to_network_route_tables_alarm_configured_test.py
+++ b/tests/providers/aws/services/cloudwatch/cloudwatch_changes_to_network_route_tables_alarm_configured/cloudwatch_changes_to_network_route_tables_alarm_configured_test.py
@@ -1,51 +1,19 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_cloudtrail, mock_cloudwatch, mock_logs, mock_s3
-from moto.core import DEFAULT_ACCOUNT_ID
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_cloudwatch_changes_to_network_route_tables_alarm_configured:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
+    @mock_aws
     def test_cloudwatch_no_log_groups(self):
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
             Cloudtrail,
@@ -55,7 +23,9 @@ def test_cloudwatch_no_log_groups(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -94,15 +64,14 @@ def test_cloudwatch_no_log_groups(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_no_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         cloudtrail_client.create_trail(Name="test_trail", S3BucketName="test")
 
@@ -114,7 +83,9 @@ def test_cloudwatch_trail_no_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -153,22 +124,21 @@ def test_cloudwatch_trail_no_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
 
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
@@ -179,7 +149,9 @@ def test_cloudwatch_trail_with_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -218,27 +190,26 @@ def test_cloudwatch_trail_with_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
             filterName="test-filter",
-            filterPattern="{($.eventName = CreateRoute) || ($.eventName = CreateRouteTable) || ($.eventName = ReplaceRoute) || ($.eventName = ReplaceRouteTableAssociation)|| ($.eventName = DeleteRouteTable) || ($.eventName = DeleteRoute) || ($.eventName = DisassociateRouteTable) }",
+            filterPattern="{($.eventSource = ec2.amazonaws.com) && ($.eventName = CreateRoute) || ($.eventName = CreateRouteTable) || ($.eventName = ReplaceRoute) || ($.eventName = ReplaceRouteTableAssociation)|| ($.eventName = DeleteRouteTable) || ($.eventName = DeleteRoute) || ($.eventName = DisassociateRouteTable) }",
             metricTransformations=[
                 {
                     "metricName": "my-metric",
@@ -256,7 +227,9 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -296,27 +269,29 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter but no alarms associated."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
             filterName="test-filter",
-            filterPattern="{($.eventName = CreateRoute) || ($.eventName = CreateRouteTable) || ($.eventName = ReplaceRoute) || ($.eventName = ReplaceRouteTableAssociation)|| ($.eventName = DeleteRouteTable) || ($.eventName = DeleteRoute) || ($.eventName = DisassociateRouteTable) }",
+            filterPattern="{($.eventSource = ec2.amazonaws.com) && ($.eventName = CreateRoute) || ($.eventName = CreateRouteTable) || ($.eventName = ReplaceRoute) || ($.eventName = ReplaceRouteTableAssociation)|| ($.eventName = DeleteRouteTable) || ($.eventName = DeleteRoute) || ($.eventName = DisassociateRouteTable) }",
             metricTransformations=[
                 {
                     "metricName": "my-metric",
@@ -345,7 +320,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -385,27 +362,29 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
             filterName="test-filter",
-            filterPattern='{($.eventName = "CreateRoute") || ($.eventName = "CreateRouteTable") || ($.eventName = "ReplaceRoute") || ($.eventName = "ReplaceRouteTableAssociation")|| ($.eventName = "DeleteRouteTable") || ($.eventName = "DeleteRoute") || ($.eventName = "DisassociateRouteTable") }',
+            filterPattern='{($.eventSource = ec2.amazonaws.com) && ($.eventName = CreateRoute) || ($.eventName = "CreateRouteTable") || ($.eventName = "ReplaceRoute") || ($.eventName = "ReplaceRouteTableAssociation")|| ($.eventName = "DeleteRouteTable") || ($.eventName = "DeleteRoute") || ($.eventName = "DisassociateRouteTable") }',
             metricTransformations=[
                 {
                     "metricName": "my-metric",
@@ -434,7 +413,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -474,27 +455,29 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
             filterName="test-filter",
-            filterPattern='{($.eventName = "CreateRoute") ||\n ($.eventName = "CreateRouteTable") ||\n ($.eventName = "ReplaceRoute") ||\n ($.eventName = "ReplaceRouteTableAssociation")||\n ($.eventName = "DeleteRouteTable") ||\n ($.eventName = "DeleteRoute") ||\n ($.eventName = "DisassociateRouteTable") }',
+            filterPattern='{($.eventSource = ec2.amazonaws.com) && ($.eventName = CreateRoute) ||\n ($.eventName = "CreateRouteTable") ||\n ($.eventName = "ReplaceRoute") ||\n ($.eventName = "ReplaceRouteTableAssociation")||\n ($.eventName = "DeleteRouteTable") ||\n ($.eventName = "DeleteRoute") ||\n ($.eventName = "DisassociateRouteTable") }',
             metricTransformations=[
                 {
                     "metricName": "my-metric",
@@ -523,7 +506,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -563,3 +548,8 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/cloudwatch/cloudwatch_changes_to_vpcs_alarm_configured/cloudwatch_changes_to_vpcs_alarm_configured_test.py b/tests/providers/aws/services/cloudwatch/cloudwatch_changes_to_vpcs_alarm_configured/cloudwatch_changes_to_vpcs_alarm_configured_test.py
index ee3d906061a..89cabfa2e5d 100644
--- a/tests/providers/aws/services/cloudwatch/cloudwatch_changes_to_vpcs_alarm_configured/cloudwatch_changes_to_vpcs_alarm_configured_test.py
+++ b/tests/providers/aws/services/cloudwatch/cloudwatch_changes_to_vpcs_alarm_configured/cloudwatch_changes_to_vpcs_alarm_configured_test.py
@@ -1,51 +1,19 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_cloudtrail, mock_cloudwatch, mock_logs, mock_s3
-from moto.core import DEFAULT_ACCOUNT_ID
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_cloudwatch_changes_to_vpcs_alarm_configured:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
+    @mock_aws
     def test_cloudwatch_no_log_groups(self):
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
             Cloudtrail,
@@ -55,7 +23,9 @@ def test_cloudwatch_no_log_groups(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -94,15 +64,14 @@ def test_cloudwatch_no_log_groups(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_no_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         cloudtrail_client.create_trail(Name="test_trail", S3BucketName="test")
 
@@ -114,7 +83,9 @@ def test_cloudwatch_trail_no_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -153,22 +124,21 @@ def test_cloudwatch_trail_no_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
 
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
@@ -179,7 +149,9 @@ def test_cloudwatch_trail_with_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -218,22 +190,21 @@ def test_cloudwatch_trail_with_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -256,7 +227,9 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -296,22 +269,24 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter but no alarms associated."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -345,7 +320,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -385,22 +362,24 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -434,7 +413,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -474,22 +455,24 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -523,7 +506,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -563,3 +548,8 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/cloudwatch/cloudwatch_cross_account_sharing_disabled/cloudwatch_cross_account_sharing_disabled_test.py b/tests/providers/aws/services/cloudwatch/cloudwatch_cross_account_sharing_disabled/cloudwatch_cross_account_sharing_disabled_test.py
index 60c665730fb..96557868632 100644
--- a/tests/providers/aws/services/cloudwatch/cloudwatch_cross_account_sharing_disabled/cloudwatch_cross_account_sharing_disabled_test.py
+++ b/tests/providers/aws/services/cloudwatch/cloudwatch_cross_account_sharing_disabled/cloudwatch_cross_account_sharing_disabled_test.py
@@ -1,52 +1,24 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_iam
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_cloudwatch_cross_account_sharing_disabled:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_iam
+    @mock_aws
     def test_cloudwatch_without_cross_account_role(self):
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -81,17 +53,19 @@ def test_cloudwatch_without_cross_account_role(self):
             )
             assert result[0].resource_id == AWS_ACCOUNT_NUMBER
 
-    @mock_iam
+    @mock_aws
     def test_cloudwatch_log_group_with_cross_account_role(self):
         # Generate Logs Client
-        iam_client = client("iam", region_name=AWS_REGION)
+        iam_client = client("iam", region_name=AWS_REGION_US_EAST_1)
         # Request Logs group
         iam_client.create_role(
             RoleName="CloudWatch-CrossAccountSharingRole", AssumeRolePolicyDocument="{}"
         )
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
diff --git a/tests/providers/aws/services/cloudwatch/cloudwatch_log_group_kms_encryption_enabled/cloudwatch_log_group_kms_encryption_enabled_test.py b/tests/providers/aws/services/cloudwatch/cloudwatch_log_group_kms_encryption_enabled/cloudwatch_log_group_kms_encryption_enabled_test.py
index df1d423a4e3..106c3094487 100644
--- a/tests/providers/aws/services/cloudwatch/cloudwatch_log_group_kms_encryption_enabled/cloudwatch_log_group_kms_encryption_enabled_test.py
+++ b/tests/providers/aws/services/cloudwatch/cloudwatch_log_group_kms_encryption_enabled/cloudwatch_log_group_kms_encryption_enabled_test.py
@@ -1,51 +1,22 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_logs
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_cloudwatch_log_group_kms_encryption_enabled:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
     def test_cloudwatch_no_log_groups(self):
         from prowler.providers.aws.services.cloudwatch.cloudwatch_service import Logs
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -74,10 +45,10 @@ def test_cloudwatch_no_log_groups(self):
 
             assert len(result) == 0
 
-    @mock_logs
+    @mock_aws
     def test_cloudwatch_log_group_without_kms_key(self):
         # Generate Logs Client
-        logs_client = client("logs", region_name=AWS_REGION)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
         # Request Logs group
         logs_client.create_log_group(
             logGroupName="test",
@@ -85,7 +56,9 @@ def test_cloudwatch_log_group_without_kms_key(self):
 
         from prowler.providers.aws.services.cloudwatch.cloudwatch_service import Logs
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -120,16 +93,18 @@ def test_cloudwatch_log_group_without_kms_key(self):
             )
             assert result[0].resource_id == "test"
 
-    @mock_logs
+    @mock_aws
     def test_cloudwatch_log_group_with_kms_key(self):
         # Generate Logs Client
-        logs_client = client("logs", region_name=AWS_REGION)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
         # Request Logs group
         logs_client.create_log_group(logGroupName="test", kmsKeyId="test_kms_id")
 
         from prowler.providers.aws.services.cloudwatch.cloudwatch_service import Logs
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
diff --git a/tests/providers/aws/services/cloudwatch/cloudwatch_log_group_no_secrets_in_logs/cloudwatch_log_group_no_secrets_in_logs_test.py b/tests/providers/aws/services/cloudwatch/cloudwatch_log_group_no_secrets_in_logs/cloudwatch_log_group_no_secrets_in_logs_test.py
index a409e5535fc..eeb6720c01b 100644
--- a/tests/providers/aws/services/cloudwatch/cloudwatch_log_group_no_secrets_in_logs/cloudwatch_log_group_no_secrets_in_logs_test.py
+++ b/tests/providers/aws/services/cloudwatch/cloudwatch_log_group_no_secrets_in_logs/cloudwatch_log_group_no_secrets_in_logs_test.py
@@ -1,53 +1,24 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_logs
+from boto3 import client
+from moto import mock_aws
 from moto.core.utils import unix_time_millis
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_cloudwatch_log_group_no_secrets_in_logs:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
     def test_cloudwatch_no_log_groups(self):
         from prowler.providers.aws.services.cloudwatch.cloudwatch_service import Logs
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -76,10 +47,10 @@ def test_cloudwatch_no_log_groups(self):
 
             assert len(result) == 0
 
-    @mock_logs
+    @mock_aws
     def test_cloudwatch_log_group_without_secrets(self):
         # Generate Logs Client
-        logs_client = client("logs", region_name=AWS_REGION)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
         # Request Logs group
         logs_client.create_log_group(logGroupName="test")
         logs_client.create_log_stream(logGroupName="test", logStreamName="test stream")
@@ -95,7 +66,9 @@ def test_cloudwatch_log_group_without_secrets(self):
         )
         from prowler.providers.aws.services.cloudwatch.cloudwatch_service import Logs
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -127,10 +100,10 @@ def test_cloudwatch_log_group_without_secrets(self):
             assert result[0].status_extended == "No secrets found in test log group."
             assert result[0].resource_id == "test"
 
-    @mock_logs
+    @mock_aws
     def test_cloudwatch_log_group_with_secrets(self):
         # Generate Logs Client
-        logs_client = client("logs", region_name=AWS_REGION)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
         # Request Logs group
         logs_client.create_log_group(logGroupName="test")
         logs_client.create_log_stream(logGroupName="test", logStreamName="test stream")
@@ -146,7 +119,9 @@ def test_cloudwatch_log_group_with_secrets(self):
         )
         from prowler.providers.aws.services.cloudwatch.cloudwatch_service import Logs
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
diff --git a/tests/providers/aws/services/cloudwatch/cloudwatch_log_group_retention_policy_specific_days_enabled/cloudwatch_log_group_retention_policy_specific_days_enabled_test.py b/tests/providers/aws/services/cloudwatch/cloudwatch_log_group_retention_policy_specific_days_enabled/cloudwatch_log_group_retention_policy_specific_days_enabled_test.py
index 17aaac34ed6..ba77b98489c 100644
--- a/tests/providers/aws/services/cloudwatch/cloudwatch_log_group_retention_policy_specific_days_enabled/cloudwatch_log_group_retention_policy_specific_days_enabled_test.py
+++ b/tests/providers/aws/services/cloudwatch/cloudwatch_log_group_retention_policy_specific_days_enabled/cloudwatch_log_group_retention_policy_specific_days_enabled_test.py
@@ -1,51 +1,23 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_logs
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_cloudwatch_log_group_retention_policy_specific_days_enabled:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
     def test_cloudwatch_no_log_groups(self):
         from prowler.providers.aws.services.cloudwatch.cloudwatch_service import Logs
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         current_audit_info.audit_config = {"log_group_retention_days": 365}
 
         from prowler.providers.common.models import Audit_Metadata
@@ -75,17 +47,19 @@ def test_cloudwatch_no_log_groups(self):
 
             assert len(result) == 0
 
-    @mock_logs
+    @mock_aws
     def test_cloudwatch_log_group_without_retention_days_never_expires(self):
         # Generate Logs Client
-        logs_client = client("logs", region_name=AWS_REGION)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
         # Request Logs group
         logs_client.create_log_group(
             logGroupName="test",
         )
         from prowler.providers.aws.services.cloudwatch.cloudwatch_service import Logs
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         current_audit_info.audit_config = {"log_group_retention_days": 365}
 
         from prowler.providers.common.models import Audit_Metadata
@@ -122,14 +96,14 @@ def test_cloudwatch_log_group_without_retention_days_never_expires(self):
             assert result[0].resource_id == "test"
             assert (
                 result[0].resource_arn
-                == f"arn:aws:logs:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:log-group:test"
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:test"
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
+    @mock_aws
     def test_cloudwatch_log_group_with_compliant_retention_days(self):
         # Generate Logs Client
-        logs_client = client("logs", region_name=AWS_REGION)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
         # Request Logs group
         logs_client.create_log_group(
             logGroupName="test",
@@ -137,7 +111,9 @@ def test_cloudwatch_log_group_with_compliant_retention_days(self):
         logs_client.put_retention_policy(logGroupName="test", retentionInDays=400)
         from prowler.providers.aws.services.cloudwatch.cloudwatch_service import Logs
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         current_audit_info.audit_config = {"log_group_retention_days": 365}
 
         from prowler.providers.common.models import Audit_Metadata
@@ -174,14 +150,14 @@ def test_cloudwatch_log_group_with_compliant_retention_days(self):
             assert result[0].resource_id == "test"
             assert (
                 result[0].resource_arn
-                == f"arn:aws:logs:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:log-group:test"
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:test"
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
+    @mock_aws
     def test_cloudwatch_log_group_with_no_compliant_retention_days(self):
         # Generate Logs Client
-        logs_client = client("logs", region_name=AWS_REGION)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
         # Request Logs group
         logs_client.create_log_group(
             logGroupName="test",
@@ -189,7 +165,9 @@ def test_cloudwatch_log_group_with_no_compliant_retention_days(self):
         logs_client.put_retention_policy(logGroupName="test", retentionInDays=7)
         from prowler.providers.aws.services.cloudwatch.cloudwatch_service import Logs
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         current_audit_info.audit_config = {"log_group_retention_days": 365}
 
         from prowler.providers.common.models import Audit_Metadata
@@ -226,6 +204,6 @@ def test_cloudwatch_log_group_with_no_compliant_retention_days(self):
             assert result[0].resource_id == "test"
             assert (
                 result[0].resource_arn
-                == f"arn:aws:logs:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:log-group:test"
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:test"
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled/cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled_test.py b/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled/cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled_test.py
index 7710fbd71c1..d51e206b9e4 100644
--- a/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled/cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled_test.py
+++ b/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled/cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled_test.py
@@ -1,51 +1,19 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_cloudtrail, mock_cloudwatch, mock_logs, mock_s3
-from moto.core import DEFAULT_ACCOUNT_ID
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_cloudwatch_log_metric_filter_and_alarm_for_aws_config_configuration_changes_enabled:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
+    @mock_aws
     def test_cloudwatch_no_log_groups(self):
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
             Cloudtrail,
@@ -55,7 +23,9 @@ def test_cloudwatch_no_log_groups(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -96,15 +66,14 @@ def test_cloudwatch_no_log_groups(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_no_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         cloudtrail_client.create_trail(Name="test_trail", S3BucketName="test")
 
@@ -116,7 +85,9 @@ def test_cloudwatch_trail_no_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -157,22 +128,21 @@ def test_cloudwatch_trail_no_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
 
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
@@ -183,7 +153,9 @@ def test_cloudwatch_trail_with_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -224,22 +196,21 @@ def test_cloudwatch_trail_with_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -262,7 +233,9 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -304,22 +277,24 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter but no alarms associated."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -353,7 +328,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -395,22 +372,24 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -444,7 +423,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -486,22 +467,24 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -535,7 +518,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -577,3 +562,8 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled/cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled_test.py b/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled/cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled_test.py
index 4bcb257ca3e..fc1c4b9e621 100644
--- a/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled/cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled_test.py
+++ b/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled/cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled_test.py
@@ -1,51 +1,19 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_cloudtrail, mock_cloudwatch, mock_logs, mock_s3
-from moto.core import DEFAULT_ACCOUNT_ID
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_cloudwatch_log_metric_filter_and_alarm_for_cloudtrail_configuration_changes_enabled:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
+    @mock_aws
     def test_cloudwatch_no_log_groups(self):
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
             Cloudtrail,
@@ -55,7 +23,9 @@ def test_cloudwatch_no_log_groups(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -96,15 +66,14 @@ def test_cloudwatch_no_log_groups(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_no_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         cloudtrail_client.create_trail(Name="test_trail", S3BucketName="test")
 
@@ -116,7 +85,9 @@ def test_cloudwatch_trail_no_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -157,22 +128,21 @@ def test_cloudwatch_trail_no_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
 
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
@@ -183,7 +153,9 @@ def test_cloudwatch_trail_with_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -224,22 +196,21 @@ def test_cloudwatch_trail_with_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -262,7 +233,9 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -304,22 +277,24 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter but no alarms associated."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -353,7 +328,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -395,22 +372,24 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -444,7 +423,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -486,22 +467,24 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -535,7 +518,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -577,3 +562,8 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_authentication_failures/cloudwatch_log_metric_filter_authentication_failures_test.py b/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_authentication_failures/cloudwatch_log_metric_filter_authentication_failures_test.py
index 478b5c6d6be..d825830fbf9 100644
--- a/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_authentication_failures/cloudwatch_log_metric_filter_authentication_failures_test.py
+++ b/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_authentication_failures/cloudwatch_log_metric_filter_authentication_failures_test.py
@@ -1,51 +1,19 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_cloudtrail, mock_cloudwatch, mock_logs, mock_s3
-from moto.core import DEFAULT_ACCOUNT_ID
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_cloudwatch_log_metric_filter_authentication_failures:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
+    @mock_aws
     def test_cloudwatch_no_log_groups(self):
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
             Cloudtrail,
@@ -55,7 +23,9 @@ def test_cloudwatch_no_log_groups(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -94,15 +64,14 @@ def test_cloudwatch_no_log_groups(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_no_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         cloudtrail_client.create_trail(Name="test_trail", S3BucketName="test")
 
@@ -114,7 +83,9 @@ def test_cloudwatch_trail_no_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -153,22 +124,21 @@ def test_cloudwatch_trail_no_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
 
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
@@ -179,7 +149,9 @@ def test_cloudwatch_trail_with_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -218,22 +190,21 @@ def test_cloudwatch_trail_with_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -256,7 +227,9 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -296,22 +269,24 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter but no alarms associated."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -345,7 +320,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -385,22 +362,24 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -434,7 +413,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -474,22 +455,24 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -523,7 +506,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -563,3 +548,8 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_aws_organizations_changes/cloudwatch_log_metric_filter_aws_organizations_changes_test.py b/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_aws_organizations_changes/cloudwatch_log_metric_filter_aws_organizations_changes_test.py
index d8fab8f2ba3..3bc9b82f26f 100644
--- a/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_aws_organizations_changes/cloudwatch_log_metric_filter_aws_organizations_changes_test.py
+++ b/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_aws_organizations_changes/cloudwatch_log_metric_filter_aws_organizations_changes_test.py
@@ -1,51 +1,19 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_cloudtrail, mock_cloudwatch, mock_logs, mock_s3
-from moto.core import DEFAULT_ACCOUNT_ID
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_cloudwatch_log_metric_filter_aws_organizations_changes:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
+    @mock_aws
     def test_cloudwatch_no_log_groups(self):
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
             Cloudtrail,
@@ -55,7 +23,9 @@ def test_cloudwatch_no_log_groups(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -94,15 +64,14 @@ def test_cloudwatch_no_log_groups(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_no_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         cloudtrail_client.create_trail(Name="test_trail", S3BucketName="test")
 
@@ -114,7 +83,9 @@ def test_cloudwatch_trail_no_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -153,22 +124,21 @@ def test_cloudwatch_trail_no_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
 
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
@@ -179,7 +149,9 @@ def test_cloudwatch_trail_with_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -218,22 +190,21 @@ def test_cloudwatch_trail_with_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -256,7 +227,9 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -296,22 +269,24 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter but no alarms associated."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -345,7 +320,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -385,22 +362,24 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -434,7 +413,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -474,22 +455,24 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -523,7 +506,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -563,3 +548,8 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk/cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk_test.py b/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk/cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk_test.py
index ef3929e5489..583af0d1955 100644
--- a/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk/cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk_test.py
+++ b/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk/cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk_test.py
@@ -1,51 +1,19 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_cloudtrail, mock_cloudwatch, mock_logs, mock_s3
-from moto.core import DEFAULT_ACCOUNT_ID
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_cloudwatch_log_metric_filter_disable_or_scheduled_deletion_of_kms_cmk:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
+    @mock_aws
     def test_cloudwatch_no_log_groups(self):
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
             Cloudtrail,
@@ -55,7 +23,9 @@ def test_cloudwatch_no_log_groups(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -96,15 +66,14 @@ def test_cloudwatch_no_log_groups(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_no_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         cloudtrail_client.create_trail(Name="test_trail", S3BucketName="test")
 
@@ -116,7 +85,9 @@ def test_cloudwatch_trail_no_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -157,22 +128,21 @@ def test_cloudwatch_trail_no_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
 
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
@@ -183,7 +153,9 @@ def test_cloudwatch_trail_with_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -224,22 +196,21 @@ def test_cloudwatch_trail_with_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -262,7 +233,9 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -304,22 +277,24 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter but no alarms associated."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -353,7 +328,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -395,22 +372,24 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -444,7 +423,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -486,22 +467,24 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -535,7 +518,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -577,3 +562,8 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_for_s3_bucket_policy_changes/cloudwatch_log_metric_filter_for_s3_bucket_policy_changes_test.py b/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_for_s3_bucket_policy_changes/cloudwatch_log_metric_filter_for_s3_bucket_policy_changes_test.py
index 1938528bf9c..86ebed4a33b 100644
--- a/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_for_s3_bucket_policy_changes/cloudwatch_log_metric_filter_for_s3_bucket_policy_changes_test.py
+++ b/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_for_s3_bucket_policy_changes/cloudwatch_log_metric_filter_for_s3_bucket_policy_changes_test.py
@@ -1,51 +1,19 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_cloudtrail, mock_cloudwatch, mock_logs, mock_s3
-from moto.core import DEFAULT_ACCOUNT_ID
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_cloudwatch_log_metric_filter_for_s3_bucket_policy_changes:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
+    @mock_aws
     def test_cloudwatch_no_log_groups(self):
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
             Cloudtrail,
@@ -55,7 +23,9 @@ def test_cloudwatch_no_log_groups(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -94,15 +64,14 @@ def test_cloudwatch_no_log_groups(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_no_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         cloudtrail_client.create_trail(Name="test_trail", S3BucketName="test")
 
@@ -114,7 +83,9 @@ def test_cloudwatch_trail_no_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -153,22 +124,21 @@ def test_cloudwatch_trail_no_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
 
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
@@ -179,7 +149,9 @@ def test_cloudwatch_trail_with_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -218,22 +190,21 @@ def test_cloudwatch_trail_with_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -256,7 +227,9 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -296,22 +269,24 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter but no alarms associated."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -345,7 +320,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -385,22 +362,24 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -434,7 +413,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -474,22 +455,24 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -523,7 +506,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -563,3 +548,8 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_policy_changes/cloudwatch_log_metric_filter_policy_changes_test.py b/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_policy_changes/cloudwatch_log_metric_filter_policy_changes_test.py
index c4eab9e94b9..d3a7bd9f940 100644
--- a/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_policy_changes/cloudwatch_log_metric_filter_policy_changes_test.py
+++ b/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_policy_changes/cloudwatch_log_metric_filter_policy_changes_test.py
@@ -1,51 +1,19 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_cloudtrail, mock_cloudwatch, mock_logs, mock_s3
-from moto.core import DEFAULT_ACCOUNT_ID
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_cloudwatch_log_metric_filter_unauthorized_api_calls:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
+    @mock_aws
     def test_cloudwatch_no_log_groups(self):
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
             Cloudtrail,
@@ -55,7 +23,9 @@ def test_cloudwatch_no_log_groups(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -94,15 +64,14 @@ def test_cloudwatch_no_log_groups(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_no_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         cloudtrail_client.create_trail(Name="test_trail", S3BucketName="test")
 
@@ -114,7 +83,9 @@ def test_cloudwatch_trail_no_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -153,22 +124,21 @@ def test_cloudwatch_trail_no_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
 
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
@@ -179,7 +149,9 @@ def test_cloudwatch_trail_with_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -218,22 +190,21 @@ def test_cloudwatch_trail_with_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -256,7 +227,9 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -296,22 +269,24 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter but no alarms associated."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -345,7 +320,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -385,22 +362,24 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -434,7 +413,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -474,22 +455,24 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -523,7 +506,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -563,3 +548,8 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_root_usage/cloudwatch_log_metric_filter_root_usage_test.py b/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_root_usage/cloudwatch_log_metric_filter_root_usage_test.py
index 9047d3baf27..ec1abf59a27 100644
--- a/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_root_usage/cloudwatch_log_metric_filter_root_usage_test.py
+++ b/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_root_usage/cloudwatch_log_metric_filter_root_usage_test.py
@@ -1,51 +1,19 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_cloudtrail, mock_cloudwatch, mock_logs, mock_s3
-from moto.core import DEFAULT_ACCOUNT_ID
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_cloudwatch_log_metric_filter_root_usage:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
+    @mock_aws
     def test_cloudwatch_no_log_groups(self):
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
             Cloudtrail,
@@ -55,7 +23,9 @@ def test_cloudwatch_no_log_groups(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -94,15 +64,14 @@ def test_cloudwatch_no_log_groups(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_no_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         cloudtrail_client.create_trail(Name="test_trail", S3BucketName="test")
 
@@ -114,7 +83,9 @@ def test_cloudwatch_trail_no_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -153,22 +124,21 @@ def test_cloudwatch_trail_no_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
 
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
@@ -179,7 +149,9 @@ def test_cloudwatch_trail_with_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -218,22 +190,21 @@ def test_cloudwatch_trail_with_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -256,7 +227,9 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -296,22 +269,24 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter but no alarms associated."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -345,7 +320,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -385,22 +362,24 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -434,7 +413,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -474,22 +455,24 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -523,7 +506,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -563,3 +548,8 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_security_group_changes/cloudwatch_log_metric_filter_security_group_changes_test.py b/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_security_group_changes/cloudwatch_log_metric_filter_security_group_changes_test.py
index 2c5e0010983..455b10f5429 100644
--- a/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_security_group_changes/cloudwatch_log_metric_filter_security_group_changes_test.py
+++ b/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_security_group_changes/cloudwatch_log_metric_filter_security_group_changes_test.py
@@ -1,51 +1,19 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_cloudtrail, mock_cloudwatch, mock_logs, mock_s3
-from moto.core import DEFAULT_ACCOUNT_ID
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_cloudwatch_log_metric_filter_unauthorized_api_calls:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
+    @mock_aws
     def test_cloudwatch_no_log_groups(self):
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
             Cloudtrail,
@@ -55,7 +23,9 @@ def test_cloudwatch_no_log_groups(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -94,15 +64,14 @@ def test_cloudwatch_no_log_groups(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_no_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         cloudtrail_client.create_trail(Name="test_trail", S3BucketName="test")
 
@@ -114,7 +83,9 @@ def test_cloudwatch_trail_no_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -153,22 +124,21 @@ def test_cloudwatch_trail_no_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
 
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
@@ -179,7 +149,9 @@ def test_cloudwatch_trail_with_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -218,22 +190,21 @@ def test_cloudwatch_trail_with_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -256,7 +227,9 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -296,22 +269,24 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter but no alarms associated."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -345,7 +320,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -385,22 +362,24 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -434,7 +413,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -474,22 +455,24 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -523,7 +506,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -563,3 +548,8 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_sign_in_without_mfa/cloudwatch_log_metric_filter_sign_in_without_mfa_test.py b/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_sign_in_without_mfa/cloudwatch_log_metric_filter_sign_in_without_mfa_test.py
index df12dd5869d..309033539fd 100644
--- a/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_sign_in_without_mfa/cloudwatch_log_metric_filter_sign_in_without_mfa_test.py
+++ b/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_sign_in_without_mfa/cloudwatch_log_metric_filter_sign_in_without_mfa_test.py
@@ -1,51 +1,19 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_cloudtrail, mock_cloudwatch, mock_logs, mock_s3
-from moto.core import DEFAULT_ACCOUNT_ID
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_cloudwatch_log_metric_filter_sign_in_without_mfa:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
+    @mock_aws
     def test_cloudwatch_no_log_groups(self):
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
             Cloudtrail,
@@ -55,7 +23,9 @@ def test_cloudwatch_no_log_groups(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -94,15 +64,14 @@ def test_cloudwatch_no_log_groups(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_no_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         cloudtrail_client.create_trail(Name="test_trail", S3BucketName="test")
 
@@ -114,7 +83,9 @@ def test_cloudwatch_trail_no_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -153,22 +124,21 @@ def test_cloudwatch_trail_no_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
 
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
@@ -179,7 +149,9 @@ def test_cloudwatch_trail_with_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -218,22 +190,21 @@ def test_cloudwatch_trail_with_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -256,7 +227,9 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -296,22 +269,24 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter but no alarms associated."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -345,7 +320,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -385,22 +362,24 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -434,7 +413,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -474,22 +455,24 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -523,7 +506,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -563,3 +548,8 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_unauthorized_api_calls/cloudwatch_log_metric_filter_unauthorized_api_calls_test.py b/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_unauthorized_api_calls/cloudwatch_log_metric_filter_unauthorized_api_calls_test.py
index e860c145038..bb4de7181cd 100644
--- a/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_unauthorized_api_calls/cloudwatch_log_metric_filter_unauthorized_api_calls_test.py
+++ b/tests/providers/aws/services/cloudwatch/cloudwatch_log_metric_filter_unauthorized_api_calls/cloudwatch_log_metric_filter_unauthorized_api_calls_test.py
@@ -1,51 +1,19 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_cloudtrail, mock_cloudwatch, mock_logs, mock_s3
-from moto.core import DEFAULT_ACCOUNT_ID
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_cloudwatch_log_metric_filter_unauthorized_api_calls:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
+    @mock_aws
     def test_cloudwatch_no_log_groups(self):
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
             Cloudtrail,
@@ -55,7 +23,9 @@ def test_cloudwatch_no_log_groups(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -94,15 +64,14 @@ def test_cloudwatch_no_log_groups(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_no_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         cloudtrail_client.create_trail(Name="test_trail", S3BucketName="test")
 
@@ -114,7 +83,9 @@ def test_cloudwatch_trail_no_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -153,22 +124,21 @@ def test_cloudwatch_trail_no_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
 
         from prowler.providers.aws.services.cloudtrail.cloudtrail_service import (
@@ -179,7 +149,9 @@ def test_cloudwatch_trail_with_log_group(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -218,22 +190,21 @@ def test_cloudwatch_trail_with_log_group(self):
                 result[0].status_extended
                 == "No CloudWatch log groups found with metric filters or alarms associated."
             )
-            assert result[0].resource_id == current_audit_info.audited_account
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == AWS_ACCOUNT_ARN
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -256,7 +227,9 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -296,22 +269,24 @@ def test_cloudwatch_trail_with_log_group_with_metric(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter but no alarms associated."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -345,7 +320,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -385,22 +362,24 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm(self):
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -434,7 +413,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -474,22 +455,24 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_quotes(self)
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_logs
-    @mock_cloudtrail
-    @mock_cloudwatch
-    @mock_s3
+    @mock_aws
     def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(self):
-        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION)
-        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION)
-        logs_client = client("logs", region_name=AWS_REGION)
-        s3_client = client("s3", region_name=AWS_REGION)
+        cloudtrail_client = client("cloudtrail", region_name=AWS_REGION_US_EAST_1)
+        cloudwatch_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
+        s3_client = client("s3", region_name=AWS_REGION_US_EAST_1)
         s3_client.create_bucket(Bucket="test")
         logs_client.create_log_group(logGroupName="/log-group/test")
         cloudtrail_client.create_trail(
             Name="test_trail",
             S3BucketName="test",
-            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:log-group:/log-group/test:*",
+            CloudWatchLogsLogGroupArn=f"arn:aws:logs:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test:*",
         )
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
@@ -523,7 +506,9 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
             Logs,
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         from prowler.providers.common.models import Audit_Metadata
 
@@ -563,3 +548,8 @@ def test_cloudwatch_trail_with_log_group_with_metric_and_alarm_with_newlines(sel
                 == "CloudWatch log group /log-group/test found with metric filter test-filter and alarms set."
             )
             assert result[0].resource_id == "/log-group/test"
+            assert (
+                result[0].resource_arn
+                == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:metric-filter/test-filter"
+            )
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/cloudwatch/cloudwatch_service_test.py b/tests/providers/aws/services/cloudwatch/cloudwatch_service_test.py
index 43e8999cc18..b339c6c06e7 100644
--- a/tests/providers/aws/services/cloudwatch/cloudwatch_service_test.py
+++ b/tests/providers/aws/services/cloudwatch/cloudwatch_service_test.py
@@ -1,121 +1,105 @@
-from boto3 import client, session
-from moto import mock_cloudwatch, mock_logs
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.cloudwatch.cloudwatch_service import (
     CloudWatch,
     Logs,
 )
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_CloudWatch_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                # We need to set this check to call __describe_log_groups__
-                expected_checks=["cloudwatch_log_group_no_secrets_in_logs"],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test CloudWatch Service
-    @mock_cloudwatch
+    @mock_aws
     def test_service(self):
         # CloudWatch client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            expected_checks=["cloudwatch_log_group_no_secrets_in_logs"]
+        )
         cloudwatch = CloudWatch(audit_info)
         assert cloudwatch.service == "cloudwatch"
 
     # Test CloudWatch Client
-    @mock_cloudwatch
+    @mock_aws
     def test_client(self):
         # CloudWatch client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            expected_checks=["cloudwatch_log_group_no_secrets_in_logs"]
+        )
         cloudwatch = CloudWatch(audit_info)
         for client_ in cloudwatch.regional_clients.values():
             assert client_.__class__.__name__ == "CloudWatch"
 
     # Test CloudWatch Session
-    @mock_cloudwatch
+    @mock_aws
     def test__get_session__(self):
         # CloudWatch client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            expected_checks=["cloudwatch_log_group_no_secrets_in_logs"]
+        )
         cloudwatch = CloudWatch(audit_info)
         assert cloudwatch.session.__class__.__name__ == "Session"
 
     # Test CloudWatch Session
-    @mock_cloudwatch
+    @mock_aws
     def test_audited_account(self):
         # CloudWatch client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            expected_checks=["cloudwatch_log_group_no_secrets_in_logs"]
+        )
         cloudwatch = CloudWatch(audit_info)
         assert cloudwatch.audited_account == AWS_ACCOUNT_NUMBER
 
     # Test Logs Service
-    @mock_logs
+    @mock_aws
     def test_logs_service(self):
         # Logs client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            expected_checks=["cloudwatch_log_group_no_secrets_in_logs"]
+        )
         logs = Logs(audit_info)
         assert logs.service == "logs"
 
     # Test Logs Client
-    @mock_logs
+    @mock_aws
     def test_logs_client(self):
         # Logs client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            expected_checks=["cloudwatch_log_group_no_secrets_in_logs"]
+        )
         logs = Logs(audit_info)
         for client_ in logs.regional_clients.values():
             assert client_.__class__.__name__ == "CloudWatchLogs"
 
     # Test Logs Session
-    @mock_logs
+    @mock_aws
     def test__logs_get_session__(self):
         # Logs client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            expected_checks=["cloudwatch_log_group_no_secrets_in_logs"]
+        )
         logs = Logs(audit_info)
         assert logs.session.__class__.__name__ == "Session"
 
     # Test Logs Session
-    @mock_logs
+    @mock_aws
     def test_logs_audited_account(self):
         # Logs client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            expected_checks=["cloudwatch_log_group_no_secrets_in_logs"]
+        )
         logs = Logs(audit_info)
         assert logs.audited_account == AWS_ACCOUNT_NUMBER
 
     # Test CloudWatch Alarms
-    @mock_cloudwatch
+    @mock_aws
     def test__describe_alarms__(self):
         # CloudWatch client for this test class
-        cw_client = client("cloudwatch", region_name=AWS_REGION)
+        cw_client = client("cloudwatch", region_name=AWS_REGION_US_EAST_1)
         cw_client.put_metric_alarm(
             AlarmActions=["arn:alarm"],
             AlarmDescription="A test",
@@ -133,26 +117,28 @@ def test__describe_alarms__(self):
             Unit="Seconds",
             Tags=[{"Key": "key-1", "Value": "value-1"}],
         )
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            expected_checks=["cloudwatch_log_group_no_secrets_in_logs"]
+        )
         cloudwatch = CloudWatch(audit_info)
         assert len(cloudwatch.metric_alarms) == 1
         assert (
             cloudwatch.metric_alarms[0].arn
-            == f"arn:aws:cloudwatch:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:alarm:test"
+            == f"arn:aws:cloudwatch:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:alarm:test"
         )
         assert cloudwatch.metric_alarms[0].name == "test"
         assert cloudwatch.metric_alarms[0].metric == "test_metric"
         assert cloudwatch.metric_alarms[0].name_space == "test_namespace"
-        assert cloudwatch.metric_alarms[0].region == AWS_REGION
+        assert cloudwatch.metric_alarms[0].region == AWS_REGION_US_EAST_1
         assert cloudwatch.metric_alarms[0].tags == [
             {"Key": "key-1", "Value": "value-1"}
         ]
 
     # Test Logs Filters
-    @mock_logs
+    @mock_aws
     def test__describe_metric_filters__(self):
         # Logs client for this test class
-        logs_client = client("logs", region_name=AWS_REGION)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
         logs_client.put_metric_filter(
             logGroupName="/log-group/test",
             filterName="test-filter",
@@ -165,20 +151,22 @@ def test__describe_metric_filters__(self):
                 }
             ],
         )
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            expected_checks=["cloudwatch_log_group_no_secrets_in_logs"]
+        )
         logs = Logs(audit_info)
         assert len(logs.metric_filters) == 1
         assert logs.metric_filters[0].log_group == "/log-group/test"
         assert logs.metric_filters[0].name == "test-filter"
         assert logs.metric_filters[0].metric == "my-metric"
         assert logs.metric_filters[0].pattern == "test-pattern"
-        assert logs.metric_filters[0].region == AWS_REGION
+        assert logs.metric_filters[0].region == AWS_REGION_US_EAST_1
 
     # Test Logs Filters
-    @mock_logs
+    @mock_aws
     def test__describe_log_groups__(self):
         # Logs client for this test class
-        logs_client = client("logs", region_name=AWS_REGION)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
         logs_client.create_log_group(
             logGroupName="/log-group/test",
             kmsKeyId="test_kms_id",
@@ -187,45 +175,49 @@ def test__describe_log_groups__(self):
         logs_client.put_retention_policy(
             logGroupName="/log-group/test", retentionInDays=400
         )
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            expected_checks=["cloudwatch_log_group_no_secrets_in_logs"]
+        )
         logs = Logs(audit_info)
         assert len(logs.log_groups) == 1
         assert (
             logs.log_groups[0].arn
-            == f"arn:aws:logs:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
+            == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
         )
         assert logs.log_groups[0].name == "/log-group/test"
         assert logs.log_groups[0].retention_days == 400
         assert logs.log_groups[0].kms_id == "test_kms_id"
         assert not logs.log_groups[0].never_expire
-        assert logs.log_groups[0].region == AWS_REGION
+        assert logs.log_groups[0].region == AWS_REGION_US_EAST_1
         assert logs.log_groups[0].tags == [
             {"tag_key_1": "tag_value_1", "tag_key_2": "tag_value_2"}
         ]
 
-    @mock_logs
+    @mock_aws
     def test__describe_log_groups__never_expire(self):
         # Logs client for this test class
-        logs_client = client("logs", region_name=AWS_REGION)
+        logs_client = client("logs", region_name=AWS_REGION_US_EAST_1)
         logs_client.create_log_group(
             logGroupName="/log-group/test",
             kmsKeyId="test_kms_id",
             tags={"tag_key_1": "tag_value_1", "tag_key_2": "tag_value_2"},
         )
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            expected_checks=["cloudwatch_log_group_no_secrets_in_logs"]
+        )
         logs = Logs(audit_info)
         assert len(logs.log_groups) == 1
         assert (
             logs.log_groups[0].arn
-            == f"arn:aws:logs:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
+            == f"arn:aws:logs:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:log-group:/log-group/test"
         )
         assert logs.log_groups[0].name == "/log-group/test"
         assert logs.log_groups[0].never_expire
         # Since it never expires we don't use the retention_days
         assert logs.log_groups[0].retention_days == 9999
         assert logs.log_groups[0].kms_id == "test_kms_id"
-        assert logs.log_groups[0].region == AWS_REGION
+        assert logs.log_groups[0].region == AWS_REGION_US_EAST_1
         assert logs.log_groups[0].tags == [
             {"tag_key_1": "tag_value_1", "tag_key_2": "tag_value_2"}
         ]
diff --git a/tests/providers/aws/services/codeartifact/codeartifact_packages_external_public_publishing_disabled/codeartifact_packages_external_public_publishing_disabled_test.py b/tests/providers/aws/services/codeartifact/codeartifact_packages_external_public_publishing_disabled/codeartifact_packages_external_public_publishing_disabled_test.py
index 668f00e0a3f..4e652ceefdb 100644
--- a/tests/providers/aws/services/codeartifact/codeartifact_packages_external_public_publishing_disabled/codeartifact_packages_external_public_publishing_disabled_test.py
+++ b/tests/providers/aws/services/codeartifact/codeartifact_packages_external_public_publishing_disabled/codeartifact_packages_external_public_publishing_disabled_test.py
@@ -1,7 +1,5 @@
 from unittest import mock
 
-from moto.core import DEFAULT_ACCOUNT_ID
-
 from prowler.providers.aws.services.codeartifact.codeartifact_service import (
     LatestPackageVersion,
     LatestPackageVersionStatus,
@@ -13,6 +11,7 @@
     Restrictions,
     RestrictionValues,
 )
+from tests.providers.aws.audit_info_utils import AWS_ACCOUNT_NUMBER
 
 AWS_REGION = "eu-west-1"
 
@@ -65,7 +64,7 @@ def test_repository_package_public_publishing_origin_internal(self):
         codeartifact_client = mock.MagicMock
         package_name = "test-package"
         package_namespace = "test-namespace"
-        repository_arn = f"arn:aws:codebuild:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:repository/test-repository"
+        repository_arn = f"arn:aws:codebuild:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:repository/test-repository"
         codeartifact_client.repositories = {
             "test-repository": Repository(
                 name="test-repository",
@@ -125,7 +124,7 @@ def test_repository_package_private_publishing_origin_internal(self):
         codeartifact_client = mock.MagicMock
         package_name = "test-package"
         package_namespace = "test-namespace"
-        repository_arn = f"arn:aws:codebuild:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:repository/test-repository"
+        repository_arn = f"arn:aws:codebuild:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:repository/test-repository"
         codeartifact_client.repositories = {
             "test-repository": Repository(
                 name="test-repository",
diff --git a/tests/providers/aws/services/codeartifact/codeartifact_service_test.py b/tests/providers/aws/services/codeartifact/codeartifact_service_test.py
index 7104545c204..94326d59efb 100644
--- a/tests/providers/aws/services/codeartifact/codeartifact_service_test.py
+++ b/tests/providers/aws/services/codeartifact/codeartifact_service_test.py
@@ -1,29 +1,24 @@
 from unittest.mock import patch
 
 import botocore
-from boto3 import session
-from moto.core import DEFAULT_ACCOUNT_ID
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.codeartifact.codeartifact_service import (
     CodeArtifact,
     LatestPackageVersionStatus,
     OriginInformationValues,
     RestrictionValues,
 )
-from prowler.providers.common.models import Audit_Metadata
-
-# Mock Test Region
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
-
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 # Mocking Access Analyzer Calls
 make_api_call = botocore.client.BaseClient._make_api_call
 
-TEST_REPOSITORY_ARN = (
-    f"arn:aws:codebuild:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:repository/test-repository"
-)
+TEST_REPOSITORY_ARN = f"arn:aws:codebuild:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:repository/test-repository"
 
 
 def mock_make_api_call(self, operation_name, kwarg):
@@ -33,9 +28,9 @@ def mock_make_api_call(self, operation_name, kwarg):
             "repositories": [
                 {
                     "name": "test-repository",
-                    "administratorAccount": DEFAULT_ACCOUNT_ID,
+                    "administratorAccount": AWS_ACCOUNT_NUMBER,
                     "domainName": "test-domain",
-                    "domainOwner": DEFAULT_ACCOUNT_ID,
+                    "domainOwner": AWS_ACCOUNT_NUMBER,
                     "arn": TEST_REPOSITORY_ARN,
                     "description": "test description",
                 },
@@ -91,10 +86,12 @@ def mock_make_api_call(self, operation_name, kwarg):
 
 
 # Mock generate_regional_clients()
-def mock_generate_regional_clients(service, audit_info, _):
-    regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
-    regional_client.region = AWS_REGION
-    return {AWS_REGION: regional_client}
+def mock_generate_regional_clients(service, audit_info):
+    regional_client = audit_info.audit_session.client(
+        service, region_name=AWS_REGION_EU_WEST_1
+    )
+    regional_client.region = AWS_REGION_EU_WEST_1
+    return {AWS_REGION_EU_WEST_1: regional_client}
 
 
 # Patch every AWS call using Boto3 and generate_regional_clients to have 1 client
@@ -104,67 +101,44 @@ def mock_generate_regional_clients(service, audit_info, _):
     new=mock_generate_regional_clients,
 )
 class Test_CodeArtifact_Service:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
     # Test CodeArtifact Client
     def test__get_client__(self):
-        codeartifact = CodeArtifact(self.set_mocked_audit_info())
+        codeartifact = CodeArtifact(
+            set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+        )
         assert (
-            codeartifact.regional_clients[AWS_REGION].__class__.__name__
+            codeartifact.regional_clients[AWS_REGION_EU_WEST_1].__class__.__name__
             == "CodeArtifact"
         )
 
     # Test CodeArtifact Session
     def test__get_session__(self):
-        codeartifact = CodeArtifact(self.set_mocked_audit_info())
+        codeartifact = CodeArtifact(
+            set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+        )
         assert codeartifact.session.__class__.__name__ == "Session"
 
     # Test CodeArtifact Service
     def test__get_service__(self):
-        codeartifact = CodeArtifact(self.set_mocked_audit_info())
+        codeartifact = CodeArtifact(
+            set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+        )
         assert codeartifact.service == "codeartifact"
 
     def test__list_repositories__(self):
         # Set partition for the service
-        codeartifact = CodeArtifact(self.set_mocked_audit_info())
+        codeartifact = CodeArtifact(
+            set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+        )
 
         assert len(codeartifact.repositories) == 1
         assert codeartifact.repositories
         assert codeartifact.repositories[
-            f"arn:aws:codebuild:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:repository/test-repository"
+            f"arn:aws:codebuild:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:repository/test-repository"
         ]
         assert codeartifact.repositories[TEST_REPOSITORY_ARN].name == "test-repository"
         assert codeartifact.repositories[
-            f"arn:aws:codebuild:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:repository/test-repository"
+            f"arn:aws:codebuild:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:repository/test-repository"
         ].tags == [
             {"key": "test", "value": "test"},
         ]
@@ -174,12 +148,15 @@ def test__list_repositories__(self):
         )
         assert (
             codeartifact.repositories[TEST_REPOSITORY_ARN].domain_owner
-            == DEFAULT_ACCOUNT_ID
+            == AWS_ACCOUNT_NUMBER
+        )
+        assert (
+            codeartifact.repositories[TEST_REPOSITORY_ARN].region
+            == AWS_REGION_EU_WEST_1
         )
-        assert codeartifact.repositories[TEST_REPOSITORY_ARN].region == AWS_REGION
 
         assert codeartifact.repositories[
-            f"arn:aws:codebuild:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:repository/test-repository"
+            f"arn:aws:codebuild:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:repository/test-repository"
         ].packages
         assert len(codeartifact.repositories[TEST_REPOSITORY_ARN].packages) == 1
         assert (
diff --git a/tests/providers/aws/services/codebuild/codebuild_service_test.py b/tests/providers/aws/services/codebuild/codebuild_service_test.py
index fe156dfeb91..a3c600ff422 100644
--- a/tests/providers/aws/services/codebuild/codebuild_service_test.py
+++ b/tests/providers/aws/services/codebuild/codebuild_service_test.py
@@ -2,15 +2,12 @@
 from unittest.mock import patch
 
 import botocore
-from boto3 import session
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.codebuild.codebuild_service import Codebuild
-from prowler.providers.common.models import Audit_Metadata
-
-# Mock Test Region
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    set_mocked_aws_audit_info,
+)
 
 # last time invoked time
 last_invoked_time = datetime.now() - timedelta(days=2)
@@ -41,10 +38,12 @@ def mock_make_api_call(self, operation_name, kwarg):
 
 
 # Mock generate_regional_clients()
-def mock_generate_regional_clients(service, audit_info, _):
-    regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
-    regional_client.region = AWS_REGION
-    return {AWS_REGION: regional_client}
+def mock_generate_regional_clients(service, audit_info):
+    regional_client = audit_info.audit_session.client(
+        service, region_name=AWS_REGION_EU_WEST_1
+    )
+    regional_client.region = AWS_REGION_EU_WEST_1
+    return {AWS_REGION_EU_WEST_1: regional_client}
 
 
 @patch("botocore.client.BaseClient._make_api_call", new=mock_make_api_call)
@@ -53,57 +52,27 @@ def mock_generate_regional_clients(service, audit_info, _):
     new=mock_generate_regional_clients,
 )
 class Test_Codebuild_Service:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test Codebuild Session
     def test__get_session__(self):
-        codebuild = Codebuild(self.set_mocked_audit_info())
+        codebuild = Codebuild(set_mocked_aws_audit_info())
         assert codebuild.session.__class__.__name__ == "Session"
 
     # Test Codebuild Service
     def test__get_service__(self):
-        codebuild = Codebuild(self.set_mocked_audit_info())
+        codebuild = Codebuild(set_mocked_aws_audit_info())
         assert codebuild.service == "codebuild"
 
     def test__list_projects__(self):
-        codebuild = Codebuild(self.set_mocked_audit_info())
+        codebuild = Codebuild(set_mocked_aws_audit_info())
         assert len(codebuild.projects) == 1
         assert codebuild.projects[0].name == "test"
-        assert codebuild.projects[0].region == AWS_REGION
+        assert codebuild.projects[0].region == AWS_REGION_EU_WEST_1
 
     def test__list_builds_for_project__(self):
-        codebuild = Codebuild(self.set_mocked_audit_info())
+        codebuild = Codebuild(set_mocked_aws_audit_info())
         assert len(codebuild.projects) == 1
         assert codebuild.projects[0].name == "test"
-        assert codebuild.projects[0].region == AWS_REGION
+        assert codebuild.projects[0].region == AWS_REGION_EU_WEST_1
         assert codebuild.projects[0].last_invoked_time == last_invoked_time
         assert (
             codebuild.projects[0].buildspec
diff --git a/tests/providers/aws/services/cognito/cognito_service_test.py b/tests/providers/aws/services/cognito/cognito_service_test.py
new file mode 100644
index 00000000000..6128c0700da
--- /dev/null
+++ b/tests/providers/aws/services/cognito/cognito_service_test.py
@@ -0,0 +1,117 @@
+from boto3 import client
+from moto import mock_aws
+
+from prowler.providers.aws.services.cognito.cognito_service import CognitoIDP
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
+
+
+class Test_Cognito_Service:
+    # Test Cognito Service
+    @mock_aws
+    def test_service(self):
+        audit_info = set_mocked_aws_audit_info(
+            audited_regions=[AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
+        cognito = CognitoIDP(audit_info)
+        assert cognito.service == "cognito-idp"
+
+    # Test Cognito client
+    @mock_aws
+    def test_client(self):
+        audit_info = set_mocked_aws_audit_info(
+            audited_regions=[AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
+        cognito = CognitoIDP(audit_info)
+        for regional_client in cognito.regional_clients.values():
+            assert regional_client.__class__.__name__ == "CognitoIdentityProvider"
+
+    # Test Cognito session
+    @mock_aws
+    def test__get_session__(self):
+        audit_info = set_mocked_aws_audit_info(
+            audited_regions=[AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
+        cognito = CognitoIDP(audit_info)
+        assert cognito.session.__class__.__name__ == "Session"
+
+    # Test Cognito Session
+    @mock_aws
+    def test_audited_account(self):
+        audit_info = set_mocked_aws_audit_info(
+            audited_regions=[AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
+        cognito = CognitoIDP(audit_info)
+        assert cognito.audited_account == AWS_ACCOUNT_NUMBER
+
+    @mock_aws
+    def test_list_user_pools(self):
+        user_pool_name_1 = "user_pool_test_1"
+        user_pool_name_2 = "user_pool_test_2"
+        audit_info = set_mocked_aws_audit_info(
+            audited_regions=[AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
+        cognito_client_eu_west_1 = client("cognito-idp", region_name="eu-west-1")
+        cognito_client_us_east_1 = client("cognito-idp", region_name="us-east-1")
+        cognito_client_eu_west_1.create_user_pool(PoolName=user_pool_name_1)
+        cognito_client_us_east_1.create_user_pool(PoolName=user_pool_name_2)
+        cognito = CognitoIDP(audit_info)
+        assert len(cognito.user_pools) == 2
+        for user_pool in cognito.user_pools.values():
+            assert (
+                user_pool.name == user_pool_name_1 or user_pool.name == user_pool_name_2
+            )
+            assert user_pool.region == "eu-west-1" or user_pool.region == "us-east-1"
+
+    @mock_aws
+    def test_describe_user_pools(self):
+        user_pool_name_1 = "user_pool_test_1"
+        audit_info = set_mocked_aws_audit_info(
+            audited_regions=[AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
+        cognito_client_eu_west_1 = client("cognito-idp", region_name="eu-west-1")
+        user_pool_id = cognito_client_eu_west_1.create_user_pool(
+            PoolName=user_pool_name_1
+        )["UserPool"]["Id"]
+        cognito = CognitoIDP(audit_info)
+        assert len(cognito.user_pools) == 1
+        for user_pool in cognito.user_pools.values():
+            assert user_pool.name == user_pool_name_1
+            assert user_pool.region == "eu-west-1"
+            assert user_pool.id == user_pool_id
+            assert user_pool.password_policy is not None
+            assert user_pool.deletion_protection is not None
+            assert user_pool.advanced_security_mode is not None
+            assert user_pool.tags is not None
+
+    @mock_aws
+    def test_get_user_pool_mfa_config(self):
+        user_pool_name_1 = "user_pool_test_1"
+        audit_info = set_mocked_aws_audit_info(
+            audited_regions=[AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
+        cognito_client_eu_west_1 = client("cognito-idp", region_name="eu-west-1")
+        user_pool_id = cognito_client_eu_west_1.create_user_pool(
+            PoolName=user_pool_name_1
+        )["UserPool"]["Id"]
+        cognito_client_eu_west_1.set_user_pool_mfa_config(
+            UserPoolId=user_pool_id,
+            SoftwareTokenMfaConfiguration={"Enabled": True},
+            MfaConfiguration="ON",
+        )
+        cognito = CognitoIDP(audit_info)
+        assert len(cognito.user_pools) == 1
+        for user_pool in cognito.user_pools.values():
+            assert user_pool.name == user_pool_name_1
+            assert user_pool.region == "eu-west-1"
+            assert user_pool.id == user_pool_id
+            assert user_pool.mfa_config is not None
+            assert user_pool.mfa_config.sms_authentication == {}
+            assert user_pool.mfa_config.software_token_mfa_authentication == {
+                "Enabled": True
+            }
+            assert user_pool.mfa_config.status == "ON"
diff --git a/tests/providers/aws/services/config/config_recorder_all_regions_enabled/config_recorder_all_regions_enabled_test.py b/tests/providers/aws/services/config/config_recorder_all_regions_enabled/config_recorder_all_regions_enabled_test.py
index fdd41bf0f90..852d852ac2a 100644
--- a/tests/providers/aws/services/config/config_recorder_all_regions_enabled/config_recorder_all_regions_enabled_test.py
+++ b/tests/providers/aws/services/config/config_recorder_all_regions_enabled/config_recorder_all_regions_enabled_test.py
@@ -1,54 +1,26 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_config
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_ACCOUNT_ARN = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_SOUTH_2,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_config_recorder_all_regions_enabled:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=AWS_ACCOUNT_ARN,
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-            audit_config={},
-        )
-
-        return audit_info
-
-    @mock_config
+    @mock_aws
     def test_config_no_recorders(self):
         from prowler.providers.aws.services.config.config_service import Config
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -76,18 +48,17 @@ def test_config_no_recorders(self):
             assert result[0].resource_arn == AWS_ACCOUNT_ARN
             assert result[0].resource_id == AWS_ACCOUNT_NUMBER
 
-    @mock_config
+    @mock_aws
     def test_config_one_recoder_disabled(self):
         # Create Config Mocked Resources
-        config_client = client("config", region_name=AWS_REGION)
+        config_client = client("config", region_name=AWS_REGION_US_EAST_1)
         # Create Config Recorder
         config_client.put_configuration_recorder(
             ConfigurationRecorder={"name": "default", "roleARN": "somearn"}
         )
         from prowler.providers.aws.services.config.config_service import Config
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.audited_regions = [AWS_REGION]
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -114,12 +85,12 @@ def test_config_one_recoder_disabled(self):
                     )
                     assert recorder.resource_id == "default"
                     assert recorder.resource_arn == AWS_ACCOUNT_ARN
-                    assert recorder.region == AWS_REGION
+                    assert recorder.region == AWS_REGION_US_EAST_1
 
-    @mock_config
+    @mock_aws
     def test_config_one_recoder_enabled(self):
         # Create Config Mocked Resources
-        config_client = client("config", region_name=AWS_REGION)
+        config_client = client("config", region_name=AWS_REGION_US_EAST_1)
         # Create Config Recorder and start it
         config_client.put_configuration_recorder(
             ConfigurationRecorder={"name": "default", "roleARN": "somearn"}
@@ -131,8 +102,7 @@ def test_config_one_recoder_enabled(self):
         config_client.start_configuration_recorder(ConfigurationRecorderName="default")
         from prowler.providers.aws.services.config.config_service import Config
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.audited_regions = [AWS_REGION]
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -159,22 +129,23 @@ def test_config_one_recoder_enabled(self):
                     )
                     assert recorder.resource_id == "default"
                     assert recorder.resource_arn == AWS_ACCOUNT_ARN
-                    assert recorder.region == AWS_REGION
+                    assert recorder.region == AWS_REGION_US_EAST_1
 
-    @mock_config
-    def test_config_one_recorder_disabled_muted(self):
+    @mock_aws
+    def test_config_one_recorder_disabled_allowlisted(self):
         # Create Config Mocked Resources
-        config_client = client("config", region_name=AWS_REGION)
+        config_client = client("config", region_name=AWS_REGION_US_EAST_1)
         # Create Config Recorder
         config_client.put_configuration_recorder(
             ConfigurationRecorder={"name": AWS_ACCOUNT_NUMBER, "roleARN": "somearn"}
         )
         from prowler.providers.aws.services.config.config_service import Config
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.profile_region = "eu-south-2"
-        current_audit_info.audited_regions = ["eu-south-2", AWS_REGION]
-        current_audit_info.audit_config = {"mute_non_default_regions": True}
+        current_audit_info = set_mocked_aws_audit_info(
+            audited_regions=[AWS_REGION_EU_SOUTH_2, AWS_REGION_US_EAST_1],
+            profile_region=AWS_REGION_EU_SOUTH_2,
+            audit_config={"allowlist_non_default_regions": True},
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -193,15 +164,15 @@ def test_config_one_recorder_disabled_muted(self):
             assert len(result) == 2
             # Search for the recorder just created
             for recorder in result:
-                if recorder.region == AWS_REGION:
-                    assert recorder.status == "MUTED"
+                if recorder.region == AWS_REGION_US_EAST_1:
+                    assert recorder.status == "WARNING"
                     assert (
                         recorder.status_extended
                         == f"AWS Config recorder {AWS_ACCOUNT_NUMBER} is disabled."
                     )
                     assert recorder.resource_id == AWS_ACCOUNT_NUMBER
                     assert recorder.resource_arn == AWS_ACCOUNT_ARN
-                    assert recorder.region == AWS_REGION
+                    assert recorder.region == AWS_REGION_US_EAST_1
                 else:
                     assert recorder.status == "FAIL"
                     assert (
diff --git a/tests/providers/aws/services/config/config_service_test.py b/tests/providers/aws/services/config/config_service_test.py
index b9aae1e4a8a..45606d9db99 100644
--- a/tests/providers/aws/services/config/config_service_test.py
+++ b/tests/providers/aws/services/config/config_service_test.py
@@ -1,84 +1,62 @@
-from boto3 import client, session
-from moto import mock_config
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.config.config_service import Config
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_Config_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["eu-west-1", "us-east-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test Config Service
-    @mock_config
+    @mock_aws
     def test_service(self):
         # Config client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         config = Config(audit_info)
         assert config.service == "config"
 
     # Test Config Client
-    @mock_config
+    @mock_aws
     def test_client(self):
         # Config client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         config = Config(audit_info)
         for regional_client in config.regional_clients.values():
             assert regional_client.__class__.__name__ == "ConfigService"
 
     # Test Config Session
-    @mock_config
+    @mock_aws
     def test__get_session__(self):
         # Config client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         config = Config(audit_info)
         assert config.session.__class__.__name__ == "Session"
 
     # Test Config Session
-    @mock_config
+    @mock_aws
     def test_audited_account(self):
         # Config client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         config = Config(audit_info)
         assert config.audited_account == AWS_ACCOUNT_NUMBER
 
     # Test Config Get Rest APIs
-    @mock_config
+    @mock_aws
     def test__describe_configuration_recorder_status__(self):
         # Generate Config Client
-        config_client = client("config", region_name=AWS_REGION)
+        config_client = client("config", region_name=AWS_REGION_US_EAST_1)
         # Create Config Recorder and start it
         config_client.put_configuration_recorder(
             ConfigurationRecorder={"name": "default", "roleARN": "somearn"}
@@ -89,7 +67,9 @@ def test__describe_configuration_recorder_status__(self):
         )
         config_client.start_configuration_recorder(ConfigurationRecorderName="default")
         # Config client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         config = Config(audit_info)
         # One recorder per region
         assert len(config.recorders) == 2
diff --git a/tests/providers/aws/services/directoryservice/directoryservice_directory_monitor_notifications/directoryservice_directory_monitor_notifications_test.py b/tests/providers/aws/services/directoryservice/directoryservice_directory_monitor_notifications/directoryservice_directory_monitor_notifications_test.py
index d4d132e99f2..ca7e02c19a3 100644
--- a/tests/providers/aws/services/directoryservice/directoryservice_directory_monitor_notifications/directoryservice_directory_monitor_notifications_test.py
+++ b/tests/providers/aws/services/directoryservice/directoryservice_directory_monitor_notifications/directoryservice_directory_monitor_notifications_test.py
@@ -1,17 +1,15 @@
 from datetime import datetime
 from unittest import mock
 
-from moto.core import DEFAULT_ACCOUNT_ID
-
 from prowler.providers.aws.services.directoryservice.directoryservice_service import (
     Directory,
     DirectoryType,
     EventTopics,
     EventTopicStatus,
 )
+from tests.providers.aws.audit_info_utils import AWS_ACCOUNT_NUMBER
 
 AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
 
 
 class Test_directoryservice_directory_monitor_notifications:
@@ -88,7 +86,7 @@ def test_one_directory_logging_enabled(self):
                 region=AWS_REGION,
                 event_topics=[
                     EventTopics(
-                        topic_arn=f"arn:aws:sns:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:test-topic",
+                        topic_arn=f"arn:aws:sns:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:test-topic",
                         topic_name="test-topic",
                         status=EventTopicStatus.Registered,
                         created_date_time=datetime(2022, 1, 1),
diff --git a/tests/providers/aws/services/directoryservice/directoryservice_service_test.py b/tests/providers/aws/services/directoryservice/directoryservice_service_test.py
index 8bae198a17d..bde1964f390 100644
--- a/tests/providers/aws/services/directoryservice/directoryservice_service_test.py
+++ b/tests/providers/aws/services/directoryservice/directoryservice_service_test.py
@@ -2,11 +2,8 @@
 from unittest.mock import patch
 
 import botocore
-from boto3 import session
-from moto import mock_ds
-from moto.core import DEFAULT_ACCOUNT_ID
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.directoryservice.directoryservice_service import (
     AuthenticationProtocol,
     CertificateState,
@@ -16,12 +13,12 @@
     EventTopicStatus,
     RadiusStatus,
 )
-from prowler.providers.common.models import Audit_Metadata
-
-# Mock Test Region
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
-
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 # Mocking Access Analyzer Calls
 make_api_call = botocore.client.BaseClient._make_api_call
@@ -69,7 +66,7 @@ def mock_make_api_call(self, operation_name, kwarg):
                 {
                     "DirectoryId": "d-12345a1b2",
                     "TopicName": "test-topic",
-                    "TopicArn": f"arn:aws:sns:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:test-topic",
+                    "TopicArn": f"arn:aws:sns:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:test-topic",
                     "CreatedDateTime": datetime(2022, 1, 1),
                     "Status": "Registered",
                 },
@@ -106,10 +103,12 @@ def mock_make_api_call(self, operation_name, kwarg):
 
 
 # Mock generate_regional_clients()
-def mock_generate_regional_clients(service, audit_info, _):
-    regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
-    regional_client.region = AWS_REGION
-    return {AWS_REGION: regional_client}
+def mock_generate_regional_clients(service, audit_info):
+    regional_client = audit_info.audit_session.client(
+        service, region_name=AWS_REGION_EU_WEST_1
+    )
+    regional_client.region = AWS_REGION_EU_WEST_1
+    return {AWS_REGION_EU_WEST_1: regional_client}
 
 
 # Patch every AWS call using Boto3 and generate_regional_clients to have 1 client
@@ -119,75 +118,54 @@ def mock_generate_regional_clients(service, audit_info, _):
     new=mock_generate_regional_clients,
 )
 class Test_DirectoryService_Service:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
     # Test DirectoryService Client
-    @mock_ds
+    @mock_aws
     def test__get_client__(self):
-        directoryservice = DirectoryService(self.set_mocked_audit_info())
+        directoryservice = DirectoryService(
+            set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+        )
         assert (
-            directoryservice.regional_clients[AWS_REGION].__class__.__name__
+            directoryservice.regional_clients[AWS_REGION_EU_WEST_1].__class__.__name__
             == "DirectoryService"
         )
 
     # Test DirectoryService Session
-    @mock_ds
+    @mock_aws
     def test__get_session__(self):
-        directoryservice = DirectoryService(self.set_mocked_audit_info())
+        directoryservice = DirectoryService(
+            set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+        )
         assert directoryservice.session.__class__.__name__ == "Session"
 
     # Test DirectoryService Service
-    @mock_ds
+    @mock_aws
     def test__get_service__(self):
-        directoryservice = DirectoryService(self.set_mocked_audit_info())
+        directoryservice = DirectoryService(
+            set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+        )
         assert directoryservice.service == "ds"
 
-    @mock_ds
+    @mock_aws
     def test__describe_directories__(self):
         # Set partition for the service
-        directoryservice = DirectoryService(self.set_mocked_audit_info())
+        directoryservice = DirectoryService(
+            set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+        )
 
         # __describe_directories__
         assert directoryservice.directories["d-12345a1b2"].id == "d-12345a1b2"
         assert (
             directoryservice.directories["d-12345a1b2"].arn
-            == f"arn:aws:ds:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:directory/d-12345a1b2"
+            == f"arn:aws:ds:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:directory/d-12345a1b2"
         )
         assert (
             directoryservice.directories["d-12345a1b2"].type
             == DirectoryType.MicrosoftAD
         )
         assert directoryservice.directories["d-12345a1b2"].name == "test-directory"
-        assert directoryservice.directories["d-12345a1b2"].region == AWS_REGION
+        assert (
+            directoryservice.directories["d-12345a1b2"].region == AWS_REGION_EU_WEST_1
+        )
         assert directoryservice.directories["d-12345a1b2"].tags == [
             {"Key": "string", "Value": "string"},
         ]
@@ -222,7 +200,7 @@ def test__describe_directories__(self):
         )
         assert (
             directoryservice.directories["d-12345a1b2"].event_topics[0].topic_arn
-            == f"arn:aws:sns:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:test-topic"
+            == f"arn:aws:sns:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:test-topic"
         )
         assert (
             directoryservice.directories["d-12345a1b2"].event_topics[0].status
diff --git a/tests/providers/aws/services/dlm/dlm_ebs_snapshot_lifecycle_policy_exists/dlm_ebs_snapshot_lifecycle_policy_exists_test.py b/tests/providers/aws/services/dlm/dlm_ebs_snapshot_lifecycle_policy_exists/dlm_ebs_snapshot_lifecycle_policy_exists_test.py
index eeb11e952b6..062378a3157 100644
--- a/tests/providers/aws/services/dlm/dlm_ebs_snapshot_lifecycle_policy_exists/dlm_ebs_snapshot_lifecycle_policy_exists_test.py
+++ b/tests/providers/aws/services/dlm/dlm_ebs_snapshot_lifecycle_policy_exists/dlm_ebs_snapshot_lifecycle_policy_exists_test.py
@@ -1,51 +1,21 @@
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.dlm.dlm_service import LifecyclePolicy
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_ACCOUNT_ARN = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 LIFECYCLE_POLICY_ID = "policy-XXXXXXXXXXXX"
 
 
 class Test_dlm_ebs_snapshot_lifecycle_policy_exists:
-    def set_mocked_audit_info(self):
-        return AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audit_config=None,
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=[AWS_REGION],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-    @mock_ec2
+    @mock_aws
     def test_no_ebs_snapshot_no_lifecycle_policies(self):
         # DLM Mock Client
         dlm_client = mock.MagicMock
@@ -53,7 +23,7 @@ def test_no_ebs_snapshot_no_lifecycle_policies(self):
         dlm_client.audited_account_arn = AWS_ACCOUNT_ARN
         dlm_client.lifecycle_policies = {}
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
@@ -78,11 +48,11 @@ def test_no_ebs_snapshot_no_lifecycle_policies(self):
             result = check.execute()
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_one_ebs_snapshot_and_dlm_lifecycle_policy(self):
         # Generate EC2 Client
-        ec2_client = client("ec2", region_name=AWS_REGION)
-        ec2_resource = resource("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
+        ec2_resource = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         # Create EC2 Volume and Snapshot
         volume_id = ec2_resource.create_volume(
             AvailabilityZone="us-east-1a",
@@ -106,7 +76,7 @@ def test_one_ebs_snapshot_and_dlm_lifecycle_policy(self):
         dlm_client.audited_account = AWS_ACCOUNT_NUMBER
         dlm_client.audited_account_arn = AWS_ACCOUNT_ARN
         dlm_client.lifecycle_policies = {
-            AWS_REGION: {
+            AWS_REGION_US_EAST_1: {
                 LIFECYCLE_POLICY_ID: LifecyclePolicy(
                     id=LIFECYCLE_POLICY_ID,
                     state="ENABLED",
@@ -116,7 +86,7 @@ def test_one_ebs_snapshot_and_dlm_lifecycle_policy(self):
             }
         }
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
@@ -139,15 +109,15 @@ def test_one_ebs_snapshot_and_dlm_lifecycle_policy(self):
             assert len(result) == 1
             assert result[0].status == "PASS"
             assert result[0].status_extended == "EBS snapshot lifecycle policies found."
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_id == AWS_ACCOUNT_NUMBER
             assert result[0].resource_arn == AWS_ACCOUNT_ARN
 
-    @mock_ec2
+    @mock_aws
     def test_one_ebs_snapshot_and_no_dlm_lifecycle_policy(self):
         # Generate EC2 Client
-        ec2_client = client("ec2", region_name=AWS_REGION)
-        ec2_resource = resource("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
+        ec2_resource = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         # Create EC2 Volume and Snapshot
         volume_id = ec2_resource.create_volume(
             AvailabilityZone="us-east-1a",
@@ -174,7 +144,7 @@ def test_one_ebs_snapshot_and_no_dlm_lifecycle_policy(self):
 
         # from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
@@ -196,14 +166,14 @@ def test_one_ebs_snapshot_and_no_dlm_lifecycle_policy(self):
             result = check.execute()
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_no_ebs_snapshot_and_dlm_lifecycle_policy(self):
         # DLM Mock Client
         dlm_client = mock.MagicMock
         dlm_client.audited_account = AWS_ACCOUNT_NUMBER
         dlm_client.audited_account_arn = AWS_ACCOUNT_ARN
         dlm_client.lifecycle_policies = {
-            AWS_REGION: {
+            AWS_REGION_US_EAST_1: {
                 LIFECYCLE_POLICY_ID: LifecyclePolicy(
                     id=LIFECYCLE_POLICY_ID,
                     state="ENABLED",
@@ -215,7 +185,7 @@ def test_no_ebs_snapshot_and_dlm_lifecycle_policy(self):
 
         # from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
diff --git a/tests/providers/aws/services/dlm/dlm_service_test.py b/tests/providers/aws/services/dlm/dlm_service_test.py
index 6bfb74a3c72..42a354800f8 100644
--- a/tests/providers/aws/services/dlm/dlm_service_test.py
+++ b/tests/providers/aws/services/dlm/dlm_service_test.py
@@ -1,14 +1,12 @@
 import botocore
-from boto3 import session
 from mock import patch
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.dlm.dlm_service import DLM, LifecyclePolicy
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_ACCOUNT_ARN = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 LIFECYCLE_POLICY_ID = "policy-XXXXXXXXXXXX"
 
@@ -40,10 +38,12 @@ def mock_make_api_call(self, operation_name, kwargs):
     return make_api_call(self, operation_name, kwargs)
 
 
-def mock_generate_regional_clients(service, audit_info, _):
-    regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
-    regional_client.region = AWS_REGION
-    return {AWS_REGION: regional_client}
+def mock_generate_regional_clients(service, audit_info):
+    regional_client = audit_info.audit_session.client(
+        service, region_name=AWS_REGION_US_EAST_1
+    )
+    regional_client.region = AWS_REGION_US_EAST_1
+    return {AWS_REGION_US_EAST_1: regional_client}
 
 
 @patch(
@@ -53,68 +53,37 @@ def mock_generate_regional_clients(service, audit_info, _):
 # Patch every AWS call using Boto3
 @patch("botocore.client.BaseClient._make_api_call", new=mock_make_api_call)
 class Test_DLM_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=AWS_ACCOUNT_ARN,
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test DLM Service
     def test_service(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         dlm = DLM(audit_info)
         assert dlm.service == "dlm"
 
     # Test DLM Client
     def test_client(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         dlm = DLM(audit_info)
         assert dlm.client.__class__.__name__ == "DLM"
 
     # Test DLM Session
     def test__get_session__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         dlm = DLM(audit_info)
         assert dlm.session.__class__.__name__ == "Session"
 
     # Test DLM Session
     def test_audited_account(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         dlm = DLM(audit_info)
         assert dlm.audited_account == AWS_ACCOUNT_NUMBER
 
     # Test DLM Get DLM Contacts
     def test_get_lifecycle_policies(self):
         # DLM client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         dlm = DLM(audit_info)
         assert dlm.lifecycle_policies == {
-            AWS_REGION: {
+            AWS_REGION_US_EAST_1: {
                 LIFECYCLE_POLICY_ID: LifecyclePolicy(
                     id=LIFECYCLE_POLICY_ID,
                     state="ENABLED",
diff --git a/tests/providers/aws/services/documentdb/documentdb_service_test.py b/tests/providers/aws/services/documentdb/documentdb_service_test.py
index 5af692519d7..bc7e9c28d61 100644
--- a/tests/providers/aws/services/documentdb/documentdb_service_test.py
+++ b/tests/providers/aws/services/documentdb/documentdb_service_test.py
@@ -1,22 +1,20 @@
 import botocore
-from boto3 import session
 from mock import patch
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.documentdb.documentdb_service import (
     DocumentDB,
     Instance,
 )
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_ACCOUNT_ARN = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 DOC_DB_CLUSTER_ID = "test-cluster"
 DOC_DB_INSTANCE_NAME = "test-db"
 DOC_DB_INSTANCE_ARN = (
-    f"arn:aws:rds:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:db:{DOC_DB_INSTANCE_NAME}"
+    f"arn:aws:rds:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:db:{DOC_DB_INSTANCE_NAME}"
 )
 DOC_DB_ENGINE_VERSION = "5.0.0"
 
@@ -60,10 +58,12 @@ def mock_make_api_call(self, operation_name, kwargs):
     return make_api_call(self, operation_name, kwargs)
 
 
-def mock_generate_regional_clients(service, audit_info, _):
-    regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
-    regional_client.region = AWS_REGION
-    return {AWS_REGION: regional_client}
+def mock_generate_regional_clients(service, audit_info):
+    regional_client = audit_info.audit_session.client(
+        service, region_name=AWS_REGION_US_EAST_1
+    )
+    regional_client.region = AWS_REGION_US_EAST_1
+    return {AWS_REGION_US_EAST_1: regional_client}
 
 
 @patch(
@@ -73,64 +73,33 @@ def mock_generate_regional_clients(service, audit_info, _):
 # Patch every AWS call using Boto3
 @patch("botocore.client.BaseClient._make_api_call", new=mock_make_api_call)
 class Test_DocumentDB_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=AWS_ACCOUNT_ARN,
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test DocumentDB Service
     def test_service(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         docdb = DocumentDB(audit_info)
         assert docdb.service == "docdb"
 
     # Test DocumentDB Client
     def test_client(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         docdb = DocumentDB(audit_info)
         assert docdb.client.__class__.__name__ == "DocDB"
 
     # Test DocumentDB Session
     def test__get_session__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         docdb = DocumentDB(audit_info)
         assert docdb.session.__class__.__name__ == "Session"
 
     # Test DocumentDB Session
     def test_audited_account(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         docdb = DocumentDB(audit_info)
         assert docdb.audited_account == AWS_ACCOUNT_NUMBER
 
     # Test DocumentDB Get DocumentDB Contacts
     def test_describe_db_instances(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         docdb = DocumentDB(audit_info)
         assert docdb.db_instances == {
             DOC_DB_INSTANCE_ARN: Instance(
@@ -142,7 +111,7 @@ def test_describe_db_instances(self):
                 public=False,
                 encrypted=False,
                 cluster_id=DOC_DB_CLUSTER_ID,
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 tags=[{"Key": "environment", "Value": "test"}],
             )
         }
diff --git a/tests/providers/aws/services/drs/drs_service_test.py b/tests/providers/aws/services/drs/drs_service_test.py
index 1c85ce714cc..6fbc69d689d 100644
--- a/tests/providers/aws/services/drs/drs_service_test.py
+++ b/tests/providers/aws/services/drs/drs_service_test.py
@@ -2,14 +2,12 @@
 from unittest.mock import patch
 
 import botocore
-from boto3 import session
 
-from prowler.providers.aws.lib.audit_info.audit_info import AWS_Audit_Info
 from prowler.providers.aws.services.drs.drs_service import DRS
-from prowler.providers.common.models import Audit_Metadata
-
-# Mock Test Region
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 # Mocking Calls
 make_api_call = botocore.client.BaseClient._make_api_call
@@ -43,10 +41,12 @@ def mock_make_api_call(self, operation_name, kwargs):
     return make_api_call(self, operation_name, kwargs)
 
 
-def mock_generate_regional_clients(service, audit_info, _):
-    regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
-    regional_client.region = AWS_REGION
-    return {AWS_REGION: regional_client}
+def mock_generate_regional_clients(service, audit_info):
+    regional_client = audit_info.audit_session.client(
+        service, region_name=AWS_REGION_US_EAST_1
+    )
+    regional_client.region = AWS_REGION_US_EAST_1
+    return {AWS_REGION_US_EAST_1: regional_client}
 
 
 # Patch every AWS call using Boto3 and generate_regional_clients to have 1 client
@@ -56,51 +56,20 @@ def mock_generate_regional_clients(service, audit_info, _):
     new=mock_generate_regional_clients,
 )
 class Test_DRS_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=None,
-            audited_account_arn=None,
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     def test__get_client__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         drs = DRS(audit_info)
-        assert drs.regional_clients[AWS_REGION].__class__.__name__ == "drs"
+        assert drs.regional_clients[AWS_REGION_US_EAST_1].__class__.__name__ == "drs"
 
     def test__get_service__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         drs = DRS(audit_info)
         assert drs.service == "drs"
 
     def test__describe_jobs__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         drs = DRS(audit_info)
         assert len(drs.drs_services) == 1
         assert drs.drs_services[0].id == "DRS"
-        assert drs.drs_services[0].region == AWS_REGION
+        assert drs.drs_services[0].region == AWS_REGION_US_EAST_1
         assert drs.drs_services[0].status == "ENABLED"
diff --git a/tests/providers/aws/services/dynamodb/dynamodb_accelerator_cluster_encryption_enabled/dynamodb_accelerator_cluster_encryption_enabled_test.py b/tests/providers/aws/services/dynamodb/dynamodb_accelerator_cluster_encryption_enabled/dynamodb_accelerator_cluster_encryption_enabled_test.py
index b0e2e4cd057..0175b52c3e4 100644
--- a/tests/providers/aws/services/dynamodb/dynamodb_accelerator_cluster_encryption_enabled/dynamodb_accelerator_cluster_encryption_enabled_test.py
+++ b/tests/providers/aws/services/dynamodb/dynamodb_accelerator_cluster_encryption_enabled/dynamodb_accelerator_cluster_encryption_enabled_test.py
@@ -1,53 +1,25 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_dax
-from moto.core import DEFAULT_ACCOUNT_ID
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_dynamodb_accelerator_cluster_encryption_enabled:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=DEFAULT_ACCOUNT_ID,
-            audited_account_arn=f"arn:aws:iam::{DEFAULT_ACCOUNT_ID}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_dax
+    @mock_aws
     def test_dax_no_clusters(self):
         from prowler.providers.aws.services.dynamodb.dynamodb_service import DAX
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -66,10 +38,10 @@ def test_dax_no_clusters(self):
 
             assert len(result) == 0
 
-    @mock_dax
+    @mock_aws
     def test_dax_cluster_no_encryption(self):
-        dax_client = client("dax", region_name=AWS_REGION)
-        iam_role_arn = f"arn:aws:iam::{DEFAULT_ACCOUNT_ID}:role/aws-service-role/dax.amazonaws.com/AWSServiceRoleForDAX"
+        dax_client = client("dax", region_name=AWS_REGION_US_EAST_1)
+        iam_role_arn = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:role/aws-service-role/dax.amazonaws.com/AWSServiceRoleForDAX"
         cluster = dax_client.create_cluster(
             ClusterName="daxcluster",
             NodeType="dax.t3.small",
@@ -78,7 +50,9 @@ def test_dax_cluster_no_encryption(self):
         )["Cluster"]
         from prowler.providers.aws.services.dynamodb.dynamodb_service import DAX
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -103,13 +77,13 @@ def test_dax_cluster_no_encryption(self):
             )
             assert result[0].resource_id == cluster["ClusterName"]
             assert result[0].resource_arn == cluster["ClusterArn"]
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == []
 
-    @mock_dax
+    @mock_aws
     def test_dax_cluster_with_encryption(self):
-        dax_client = client("dax", region_name=AWS_REGION)
-        iam_role_arn = f"arn:aws:iam::{DEFAULT_ACCOUNT_ID}:role/aws-service-role/dax.amazonaws.com/AWSServiceRoleForDAX"
+        dax_client = client("dax", region_name=AWS_REGION_US_EAST_1)
+        iam_role_arn = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:role/aws-service-role/dax.amazonaws.com/AWSServiceRoleForDAX"
         cluster = dax_client.create_cluster(
             ClusterName="daxcluster",
             NodeType="dax.t3.small",
@@ -119,7 +93,9 @@ def test_dax_cluster_with_encryption(self):
         )["Cluster"]
         from prowler.providers.aws.services.dynamodb.dynamodb_service import DAX
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -141,5 +117,5 @@ def test_dax_cluster_with_encryption(self):
             assert search("has encryption at rest enabled", result[0].status_extended)
             assert result[0].resource_id == cluster["ClusterName"]
             assert result[0].resource_arn == cluster["ClusterArn"]
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == []
diff --git a/tests/providers/aws/services/dynamodb/dynamodb_service_test.py b/tests/providers/aws/services/dynamodb/dynamodb_service_test.py
index f6726b297d0..eb4558a6186 100644
--- a/tests/providers/aws/services/dynamodb/dynamodb_service_test.py
+++ b/tests/providers/aws/services/dynamodb/dynamodb_service_test.py
@@ -1,84 +1,53 @@
-from boto3 import client, session
-from moto import mock_dax, mock_dynamodb
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.dynamodb.dynamodb_service import DAX, DynamoDB
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_DynamoDB_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test Dynamo Service
-    @mock_dynamodb
+    @mock_aws
     def test_service(self):
         # Dynamo client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         dynamodb = DynamoDB(audit_info)
         assert dynamodb.service == "dynamodb"
 
     # Test Dynamo Client
-    @mock_dynamodb
+    @mock_aws
     def test_client(self):
         # Dynamo client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         dynamodb = DynamoDB(audit_info)
         for regional_client in dynamodb.regional_clients.values():
             assert regional_client.__class__.__name__ == "DynamoDB"
 
     # Test Dynamo Session
-    @mock_dynamodb
+    @mock_aws
     def test__get_session__(self):
         # Dynamo client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         dynamodb = DynamoDB(audit_info)
         assert dynamodb.session.__class__.__name__ == "Session"
 
     # Test Dynamo Session
-    @mock_dynamodb
+    @mock_aws
     def test_audited_account(self):
         # Dynamo client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         dynamodb = DynamoDB(audit_info)
         assert dynamodb.audited_account == AWS_ACCOUNT_NUMBER
 
     # Test DynamoDB List Tables
-    @mock_dynamodb
+    @mock_aws
     def test__list_tables__(self):
         # Generate DynamoDB Client
-        dynamodb_client = client("dynamodb", region_name=AWS_REGION)
+        dynamodb_client = client("dynamodb", region_name=AWS_REGION_US_EAST_1)
         # Create DynamoDB Tables
         dynamodb_client.create_table(
             TableName="test1",
@@ -105,19 +74,19 @@ def test__list_tables__(self):
             BillingMode="PAY_PER_REQUEST",
         )
         # DynamoDB client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         dynamo = DynamoDB(audit_info)
         assert len(dynamo.tables) == 2
         assert dynamo.tables[0].name == "test1"
         assert dynamo.tables[1].name == "test2"
-        assert dynamo.tables[0].region == AWS_REGION
-        assert dynamo.tables[1].region == AWS_REGION
+        assert dynamo.tables[0].region == AWS_REGION_US_EAST_1
+        assert dynamo.tables[1].region == AWS_REGION_US_EAST_1
 
     # Test DynamoDB Describe Table
-    @mock_dynamodb
+    @mock_aws
     def test__describe_table__(self):
         # Generate DynamoDB Client
-        dynamodb_client = client("dynamodb", region_name=AWS_REGION)
+        dynamodb_client = client("dynamodb", region_name=AWS_REGION_US_EAST_1)
         # Create DynamoDB Table
         table = dynamodb_client.create_table(
             TableName="test1",
@@ -135,21 +104,21 @@ def test__describe_table__(self):
             ],
         )["TableDescription"]
         # DynamoDB client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         dynamo = DynamoDB(audit_info)
         assert len(dynamo.tables) == 1
         assert dynamo.tables[0].arn == table["TableArn"]
         assert dynamo.tables[0].name == "test1"
-        assert dynamo.tables[0].region == AWS_REGION
+        assert dynamo.tables[0].region == AWS_REGION_US_EAST_1
         assert dynamo.tables[0].tags == [
             {"Key": "test", "Value": "test"},
         ]
 
     # Test DynamoDB Describe Continuous Backups
-    @mock_dynamodb
+    @mock_aws
     def test__describe_continuous_backups__(self):
         # Generate DynamoDB Client
-        dynamodb_client = client("dynamodb", region_name=AWS_REGION)
+        dynamodb_client = client("dynamodb", region_name=AWS_REGION_US_EAST_1)
         # Create DynamoDB Table
         table = dynamodb_client.create_table(
             TableName="test1",
@@ -168,19 +137,19 @@ def test__describe_continuous_backups__(self):
             PointInTimeRecoverySpecification={"PointInTimeRecoveryEnabled": True},
         )
         # DynamoDB client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         dynamo = DynamoDB(audit_info)
         assert len(dynamo.tables) == 1
         assert dynamo.tables[0].arn == table["TableArn"]
         assert dynamo.tables[0].name == "test1"
         assert dynamo.tables[0].pitr
-        assert dynamo.tables[0].region == AWS_REGION
+        assert dynamo.tables[0].region == AWS_REGION_US_EAST_1
 
     # Test DAX Describe Clusters
-    @mock_dax
+    @mock_aws
     def test__describe_clusters__(self):
         # Generate DAX Client
-        dax_client = client("dax", region_name=AWS_REGION)
+        dax_client = client("dax", region_name=AWS_REGION_US_EAST_1)
         # Create DAX Clusters
         iam_role_arn = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:role/aws-service-role/dax.amazonaws.com/AWSServiceRoleForDAX"
         dax_client.create_cluster(
@@ -204,19 +173,19 @@ def test__describe_clusters__(self):
             ],
         )
         # DAX client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         dax = DAX(audit_info)
         assert len(dax.clusters) == 2
 
         assert dax.clusters[0].name == "daxcluster1"
-        assert dax.clusters[0].region == AWS_REGION
+        assert dax.clusters[0].region == AWS_REGION_US_EAST_1
         assert dax.clusters[0].encryption
         assert dax.clusters[0].tags == [
             {"Key": "test", "Value": "test"},
         ]
 
         assert dax.clusters[1].name == "daxcluster2"
-        assert dax.clusters[1].region == AWS_REGION
+        assert dax.clusters[1].region == AWS_REGION_US_EAST_1
         assert dax.clusters[1].encryption
         assert dax.clusters[1].tags == [
             {"Key": "test", "Value": "test"},
diff --git a/tests/providers/aws/services/dynamodb/dynamodb_tables_kms_cmk_encryption_enabled/dynamodb_tables_kms_cmk_encryption_enabled_test.py b/tests/providers/aws/services/dynamodb/dynamodb_tables_kms_cmk_encryption_enabled/dynamodb_tables_kms_cmk_encryption_enabled_test.py
index b8561dff27b..25f6cf4a1c4 100644
--- a/tests/providers/aws/services/dynamodb/dynamodb_tables_kms_cmk_encryption_enabled/dynamodb_tables_kms_cmk_encryption_enabled_test.py
+++ b/tests/providers/aws/services/dynamodb/dynamodb_tables_kms_cmk_encryption_enabled/dynamodb_tables_kms_cmk_encryption_enabled_test.py
@@ -1,53 +1,24 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_dynamodb
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_dynamodb_tables_kms_cmk_encryption_enabled:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_dynamodb
+    @mock_aws
     def test_dynamodb_no_tables(self):
         from prowler.providers.aws.services.dynamodb.dynamodb_service import DynamoDB
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -66,9 +37,9 @@ def test_dynamodb_no_tables(self):
 
             assert len(result) == 0
 
-    @mock_dynamodb
+    @mock_aws
     def test_dynamodb_table_kms_encryption(self):
-        dynamodb_client = client("dynamodb", region_name=AWS_REGION)
+        dynamodb_client = client("dynamodb", region_name=AWS_REGION_US_EAST_1)
         table = dynamodb_client.create_table(
             TableName="test1",
             AttributeDefinitions=[
@@ -84,7 +55,9 @@ def test_dynamodb_table_kms_encryption(self):
         )["TableDescription"]
         from prowler.providers.aws.services.dynamodb.dynamodb_service import DynamoDB
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -106,12 +79,12 @@ def test_dynamodb_table_kms_encryption(self):
             assert search("KMS encryption enabled", result[0].status_extended)
             assert result[0].resource_id == table["TableName"]
             assert result[0].resource_arn == table["TableArn"]
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == []
 
-    @mock_dynamodb
+    @mock_aws
     def test_dynamodb_table_default_encryption(self):
-        dynamodb_client = client("dynamodb", region_name=AWS_REGION)
+        dynamodb_client = client("dynamodb", region_name=AWS_REGION_US_EAST_1)
         table = dynamodb_client.create_table(
             TableName="test1",
             AttributeDefinitions=[
@@ -126,7 +99,9 @@ def test_dynamodb_table_default_encryption(self):
         )["TableDescription"]
         from prowler.providers.aws.services.dynamodb.dynamodb_service import DynamoDB
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -148,5 +123,5 @@ def test_dynamodb_table_default_encryption(self):
             assert search("DEFAULT encryption enabled", result[0].status_extended)
             assert result[0].resource_id == table["TableName"]
             assert result[0].resource_arn == table["TableArn"]
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == []
diff --git a/tests/providers/aws/services/dynamodb/dynamodb_tables_pitr_enabled/dynamodb_tables_pitr_enabled_test.py b/tests/providers/aws/services/dynamodb/dynamodb_tables_pitr_enabled/dynamodb_tables_pitr_enabled_test.py
index 1c89eab1dc5..5da92896f6e 100644
--- a/tests/providers/aws/services/dynamodb/dynamodb_tables_pitr_enabled/dynamodb_tables_pitr_enabled_test.py
+++ b/tests/providers/aws/services/dynamodb/dynamodb_tables_pitr_enabled/dynamodb_tables_pitr_enabled_test.py
@@ -1,53 +1,24 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_dynamodb
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_dynamodb_tables_pitr_enabled:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_dynamodb
+    @mock_aws
     def test_dynamodb_no_tables(self):
         from prowler.providers.aws.services.dynamodb.dynamodb_service import DynamoDB
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -66,9 +37,9 @@ def test_dynamodb_no_tables(self):
 
             assert len(result) == 0
 
-    @mock_dynamodb
+    @mock_aws
     def test_dynamodb_table_no_pitr(self):
-        dynamodb_client = client("dynamodb", region_name=AWS_REGION)
+        dynamodb_client = client("dynamodb", region_name=AWS_REGION_US_EAST_1)
         table = dynamodb_client.create_table(
             TableName="test1",
             AttributeDefinitions=[
@@ -83,7 +54,9 @@ def test_dynamodb_table_no_pitr(self):
         )["TableDescription"]
         from prowler.providers.aws.services.dynamodb.dynamodb_service import DynamoDB
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -108,12 +81,12 @@ def test_dynamodb_table_no_pitr(self):
             )
             assert result[0].resource_id == table["TableName"]
             assert result[0].resource_arn == table["TableArn"]
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == []
 
-    @mock_dynamodb
+    @mock_aws
     def test_dynamodb_table_with_pitr(self):
-        dynamodb_client = client("dynamodb", region_name=AWS_REGION)
+        dynamodb_client = client("dynamodb", region_name=AWS_REGION_US_EAST_1)
         table = dynamodb_client.create_table(
             TableName="test1",
             AttributeDefinitions=[
@@ -132,7 +105,9 @@ def test_dynamodb_table_with_pitr(self):
         )
         from prowler.providers.aws.services.dynamodb.dynamodb_service import DynamoDB
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -156,5 +131,5 @@ def test_dynamodb_table_with_pitr(self):
             )
             assert result[0].resource_id == table["TableName"]
             assert result[0].resource_arn == table["TableArn"]
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == []
diff --git a/tests/providers/aws/services/ec2/ec2_ami_public/ec2_ami_public_test.py b/tests/providers/aws/services/ec2/ec2_ami_public/ec2_ami_public_test.py
index 77f0e582c8e..69419791f65 100644
--- a/tests/providers/aws/services/ec2/ec2_ami_public/ec2_ami_public_test.py
+++ b/tests/providers/aws/services/ec2/ec2_ami_public/ec2_ami_public_test.py
@@ -1,53 +1,25 @@
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
-AWS_REGION = "us-east-1"
 EXAMPLE_AMI_ID = "ami-12c6146b"
-AWS_ACCOUNT_NUMBER = "123456789012"
 
 
 class Test_ec2_ami_public:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_no_amis(self):
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -66,9 +38,9 @@ def test_no_amis(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_one_private_ami(self):
-        ec2 = client("ec2", region_name=AWS_REGION)
+        ec2 = client("ec2", region_name=AWS_REGION_US_EAST_1)
 
         reservation = ec2.run_instances(ImageId=EXAMPLE_AMI_ID, MinCount=1, MaxCount=1)
         instance = reservation["Instances"][0]
@@ -80,7 +52,9 @@ def test_one_private_ami(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -102,14 +76,14 @@ def test_one_private_ami(self):
             assert result[0].resource_id == image_id
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:image/{image_id}"
+                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:image/{image_id}"
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_one_public_ami(self):
-        ec2 = client("ec2", region_name=AWS_REGION)
+        ec2 = client("ec2", region_name=AWS_REGION_US_EAST_1)
 
         reservation = ec2.run_instances(ImageId=EXAMPLE_AMI_ID, MinCount=1, MaxCount=1)
         instance = reservation["Instances"][0]
@@ -130,7 +104,9 @@ def test_one_public_ami(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -154,7 +130,7 @@ def test_one_public_ami(self):
             assert result[0].resource_id == image_id
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:image/{image_id}"
+                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:image/{image_id}"
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == []
diff --git a/tests/providers/aws/services/ec2/ec2_ebs_default_encryption/ec2_ebs_default_encryption_test.py b/tests/providers/aws/services/ec2/ec2_ebs_default_encryption/ec2_ebs_default_encryption_test.py
index 3e2ef101bd8..1cbf16fcf91 100644
--- a/tests/providers/aws/services/ec2/ec2_ebs_default_encryption/ec2_ebs_default_encryption_test.py
+++ b/tests/providers/aws/services/ec2/ec2_ebs_default_encryption/ec2_ebs_default_encryption_test.py
@@ -1,57 +1,30 @@
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
-AWS_REGION = "us-east-1"
 EXAMPLE_AMI_ID = "ami-12c6146b"
-AWS_ACCOUNT_NUMBER = "123456789012"
 
 
 class Test_ec2_ebs_default_encryption:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_ebs_encryption_enabled(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.enable_ebs_encryption_by_default()
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -71,7 +44,7 @@ def test_ec2_ebs_encryption_enabled(self):
             # One result per region
             assert len(results) == 2
             for result in results:
-                if result.region == AWS_REGION:
+                if result.region == AWS_REGION_US_EAST_1:
                     assert result.status == "PASS"
                     assert (
                         result.status_extended == "EBS Default Encryption is activated."
@@ -81,11 +54,13 @@ def test_ec2_ebs_encryption_enabled(self):
                         result.resource_arn == f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
                     )
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_ebs_encryption_disabled(self):
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -111,12 +86,14 @@ def test_ec2_ebs_encryption_disabled(self):
             assert result[0].resource_id == AWS_ACCOUNT_NUMBER
             assert result[0].resource_arn == f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_ebs_encryption_disabled_ignored(self):
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -136,15 +113,17 @@ def test_ec2_ebs_encryption_disabled_ignored(self):
             # One result per region
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_ebs_encryption_disabled_ignoring_with_volumes(self):
         # Create EC2 Mocked Resources
-        ec2 = resource("ec2", region_name=AWS_REGION)
-        ec2.create_volume(Size=36, AvailabilityZone=f"{AWS_REGION}a")
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
+        ec2.create_volume(Size=36, AvailabilityZone=f"{AWS_REGION_US_EAST_1}a")
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -163,7 +142,7 @@ def test_ec2_ebs_encryption_disabled_ignoring_with_volumes(self):
 
             # One result per region
             assert len(result) == 1
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].status == "FAIL"
             assert (
                 result[0].status_extended == "EBS Default Encryption is not activated."
diff --git a/tests/providers/aws/services/ec2/ec2_ebs_public_snapshot/ec2_ebs_public_snapshot_test.py b/tests/providers/aws/services/ec2/ec2_ebs_public_snapshot/ec2_ebs_public_snapshot_test.py
index d507431e574..4a29f7e0c41 100644
--- a/tests/providers/aws/services/ec2/ec2_ebs_public_snapshot/ec2_ebs_public_snapshot_test.py
+++ b/tests/providers/aws/services/ec2/ec2_ebs_public_snapshot/ec2_ebs_public_snapshot_test.py
@@ -1,20 +1,22 @@
 from unittest import mock
 
-from boto3 import client, resource, session
+from boto3 import client, resource
 from mock import patch
-from moto import mock_ec2
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
-def mock_generate_regional_clients(service, audit_info, _):
-    regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
-    regional_client.region = AWS_REGION
-    return {AWS_REGION: regional_client}
+def mock_generate_regional_clients(service, audit_info):
+    regional_client = audit_info.audit_session.client(
+        service, region_name=AWS_REGION_US_EAST_1
+    )
+    regional_client.region = AWS_REGION_US_EAST_1
+    return {AWS_REGION_US_EAST_1: regional_client}
 
 
 @patch(
@@ -22,42 +24,13 @@ def mock_generate_regional_clients(service, audit_info, _):
     new=mock_generate_regional_clients,
 )
 class Test_ec2_ebs_public_snapshot:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_snapshots(self):
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -77,12 +50,12 @@ def test_ec2_default_snapshots(self):
             # Default snapshots
             assert len(result) == 561
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_public_snapshot(self):
         # Create EC2 Mocked Resources
-        ec2 = resource("ec2", region_name=AWS_REGION)
-        ec2_client = client("ec2", region_name=AWS_REGION)
-        volume = ec2.create_volume(Size=80, AvailabilityZone=f"{AWS_REGION}a")
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
+        volume = ec2.create_volume(Size=80, AvailabilityZone=f"{AWS_REGION_US_EAST_1}a")
         snapshot = volume.create_snapshot(Description="testsnap")
         ec2_client.modify_snapshot_attribute(
             SnapshotId=snapshot.id,
@@ -93,7 +66,9 @@ def test_ec2_public_snapshot(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -115,7 +90,7 @@ def test_ec2_public_snapshot(self):
 
             for snap in results:
                 if snap.resource_id == snapshot.id:
-                    assert snap.region == AWS_REGION
+                    assert snap.region == AWS_REGION_US_EAST_1
                     assert snap.resource_tags == []
                     assert snap.status == "FAIL"
                     assert (
@@ -124,21 +99,23 @@ def test_ec2_public_snapshot(self):
                     )
                     assert (
                         snap.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:snapshot/{snapshot.id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:snapshot/{snapshot.id}"
                     )
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_private_snapshot(self):
         # Create EC2 Mocked Resources
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         snapshot = volume = ec2.create_volume(
-            Size=80, AvailabilityZone=f"{AWS_REGION}a", Encrypted=True
+            Size=80, AvailabilityZone=f"{AWS_REGION_US_EAST_1}a", Encrypted=True
         )
         snapshot = volume.create_snapshot(Description="testsnap")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -160,7 +137,7 @@ def test_ec2_private_snapshot(self):
 
             for snap in results:
                 if snap.resource_id == snapshot.id:
-                    assert snap.region == AWS_REGION
+                    assert snap.region == AWS_REGION_US_EAST_1
                     assert snap.resource_tags == []
                     assert snap.status == "PASS"
                     assert (
@@ -169,5 +146,5 @@ def test_ec2_private_snapshot(self):
                     )
                     assert (
                         snap.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:snapshot/{snapshot.id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:snapshot/{snapshot.id}"
                     )
diff --git a/tests/providers/aws/services/ec2/ec2_ebs_snapshots_encrypted/ec2_ebs_snapshots_encrypted_test.py b/tests/providers/aws/services/ec2/ec2_ebs_snapshots_encrypted/ec2_ebs_snapshots_encrypted_test.py
index bc1f7f3853c..e55f93e8e0a 100644
--- a/tests/providers/aws/services/ec2/ec2_ebs_snapshots_encrypted/ec2_ebs_snapshots_encrypted_test.py
+++ b/tests/providers/aws/services/ec2/ec2_ebs_snapshots_encrypted/ec2_ebs_snapshots_encrypted_test.py
@@ -1,20 +1,22 @@
 from unittest import mock
 
-from boto3 import resource, session
+from boto3 import resource
 from mock import patch
-from moto import mock_ec2
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
-def mock_generate_regional_clients(service, audit_info, _):
-    regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
-    regional_client.region = AWS_REGION
-    return {AWS_REGION: regional_client}
+def mock_generate_regional_clients(service, audit_info):
+    regional_client = audit_info.audit_session.client(
+        service, region_name=AWS_REGION_US_EAST_1
+    )
+    regional_client.region = AWS_REGION_US_EAST_1
+    return {AWS_REGION_US_EAST_1: regional_client}
 
 
 @patch(
@@ -22,42 +24,13 @@ def mock_generate_regional_clients(service, audit_info, _):
     new=mock_generate_regional_clients,
 )
 class Test_ec2_ebs_snapshots_encrypted:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_snapshots(self):
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -77,16 +50,18 @@ def test_ec2_default_snapshots(self):
             # Default snapshots
             assert len(result) == 561
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_unencrypted_snapshot(self):
         # Create EC2 Mocked Resources
-        ec2 = resource("ec2", region_name=AWS_REGION)
-        volume = ec2.create_volume(Size=80, AvailabilityZone=f"{AWS_REGION}a")
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
+        volume = ec2.create_volume(Size=80, AvailabilityZone=f"{AWS_REGION_US_EAST_1}a")
         snapshot = volume.create_snapshot(Description="testsnap")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -108,7 +83,7 @@ def test_ec2_unencrypted_snapshot(self):
 
             for snap in results:
                 if snap.resource_id == snapshot.id:
-                    assert snap.region == AWS_REGION
+                    assert snap.region == AWS_REGION_US_EAST_1
                     assert snap.resource_tags == []
                     assert snap.status == "FAIL"
                     assert (
@@ -117,21 +92,23 @@ def test_ec2_unencrypted_snapshot(self):
                     )
                     assert (
                         snap.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:snapshot/{snapshot.id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:snapshot/{snapshot.id}"
                     )
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_encrypted_snapshot(self):
         # Create EC2 Mocked Resources
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         snapshot = volume = ec2.create_volume(
-            Size=80, AvailabilityZone=f"{AWS_REGION}a", Encrypted=True
+            Size=80, AvailabilityZone=f"{AWS_REGION_US_EAST_1}a", Encrypted=True
         )
         snapshot = volume.create_snapshot(Description="testsnap")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -153,7 +130,7 @@ def test_ec2_encrypted_snapshot(self):
 
             for snap in results:
                 if snap.resource_id == snapshot.id:
-                    assert snap.region == AWS_REGION
+                    assert snap.region == AWS_REGION_US_EAST_1
                     assert snap.resource_tags == []
                     assert snap.status == "PASS"
                     assert (
@@ -162,5 +139,5 @@ def test_ec2_encrypted_snapshot(self):
                     )
                     assert (
                         snap.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:snapshot/{snapshot.id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:snapshot/{snapshot.id}"
                     )
diff --git a/tests/providers/aws/services/ec2/ec2_ebs_volume_encryption/ec2_ebs_volume_encryption_test.py b/tests/providers/aws/services/ec2/ec2_ebs_volume_encryption/ec2_ebs_volume_encryption_test.py
index 165388a2dc3..1124be9088b 100644
--- a/tests/providers/aws/services/ec2/ec2_ebs_volume_encryption/ec2_ebs_volume_encryption_test.py
+++ b/tests/providers/aws/services/ec2/ec2_ebs_volume_encryption/ec2_ebs_volume_encryption_test.py
@@ -1,52 +1,23 @@
 from unittest import mock
 
-from boto3 import resource, session
-from moto import mock_ec2
+from boto3 import resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_ec2_ebs_volume_encryption:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_no_volumes(self):
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -65,15 +36,17 @@ def test_ec2_no_volumes(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_unencrypted_volume(self):
         # Create EC2 Mocked Resources
-        ec2 = resource("ec2", region_name=AWS_REGION)
-        volume = ec2.create_volume(Size=80, AvailabilityZone=f"{AWS_REGION}a")
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
+        volume = ec2.create_volume(Size=80, AvailabilityZone=f"{AWS_REGION_US_EAST_1}a")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -93,7 +66,7 @@ def test_ec2_unencrypted_volume(self):
             assert len(result) == 1
 
             assert result[0].status == "FAIL"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             # Moto creates the volume with None in the tags attribute
             assert result[0].resource_tags is None
             assert (
@@ -101,20 +74,22 @@ def test_ec2_unencrypted_volume(self):
             )
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:volume/{volume.id}"
+                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:volume/{volume.id}"
             )
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_encrypted_volume(self):
         # Create EC2 Mocked Resources
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         volume = ec2.create_volume(
-            Size=80, AvailabilityZone=f"{AWS_REGION}a", Encrypted=True
+            Size=80, AvailabilityZone=f"{AWS_REGION_US_EAST_1}a", Encrypted=True
         )
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -134,7 +109,7 @@ def test_ec2_encrypted_volume(self):
             assert len(result) == 1
 
             assert result[0].status == "PASS"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             # Moto creates the volume with None in the tags attribute
             assert result[0].resource_tags is None
             assert (
@@ -142,5 +117,5 @@ def test_ec2_encrypted_volume(self):
             )
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:volume/{volume.id}"
+                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:volume/{volume.id}"
             )
diff --git a/tests/providers/aws/services/ec2/ec2_ebs_volume_snapshots_exists/ec2_ebs_volume_snapshots_exists_test.py b/tests/providers/aws/services/ec2/ec2_ebs_volume_snapshots_exists/ec2_ebs_volume_snapshots_exists_test.py
index 97435a88c92..d4e8b2843bc 100644
--- a/tests/providers/aws/services/ec2/ec2_ebs_volume_snapshots_exists/ec2_ebs_volume_snapshots_exists_test.py
+++ b/tests/providers/aws/services/ec2/ec2_ebs_volume_snapshots_exists/ec2_ebs_volume_snapshots_exists_test.py
@@ -1,22 +1,24 @@
 from unittest import mock
 
-from boto3 import resource, session
+from boto3 import resource
 from mock import patch
-from moto import mock_ec2
-
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_REGION_AZ = "us-east-1a"
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_ACCOUNT_ARN = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
+from moto import mock_aws
+
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    AWS_REGION_US_EAST_1_AZA,
+    set_mocked_aws_audit_info,
+)
 
 
-def mock_generate_regional_clients(service, audit_info, _):
-    regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
-    regional_client.region = AWS_REGION
-    return {AWS_REGION: regional_client}
+def mock_generate_regional_clients(service, audit_info):
+    regional_client = audit_info.audit_session.client(
+        service, region_name=AWS_REGION_US_EAST_1
+    )
+    regional_client.region = AWS_REGION_US_EAST_1
+    return {AWS_REGION_US_EAST_1: regional_client}
 
 
 @patch(
@@ -24,42 +26,13 @@ def mock_generate_regional_clients(service, audit_info, _):
     new=mock_generate_regional_clients,
 )
 class Test_ec2_ebs_volume_snapshots_exists:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=AWS_ACCOUNT_ARN,
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=[AWS_REGION],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_no_volumes(self):
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -78,14 +51,16 @@ def test_no_volumes(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_volume_without_snapshots(self):
-        ec2 = resource("ec2", region_name=AWS_REGION)
-        volume = ec2.create_volume(Size=80, AvailabilityZone=AWS_REGION_AZ)
-        volume_arn = f"arn:aws:ec2:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:volume/{volume.id}"
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
+        volume = ec2.create_volume(Size=80, AvailabilityZone=AWS_REGION_US_EAST_1_AZA)
+        volume_arn = f"arn:aws:ec2:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:volume/{volume.id}"
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -111,19 +86,21 @@ def test_ec2_volume_without_snapshots(self):
             assert result[0].resource_id == volume.id
             assert result[0].resource_arn == volume_arn
             assert result[0].resource_tags is None
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_volume_with_snapshot(self):
         # Create EC2 Mocked Resources
-        ec2 = resource("ec2", region_name=AWS_REGION)
-        volume = ec2.create_volume(Size=80, AvailabilityZone=AWS_REGION_AZ)
-        volume_arn = f"arn:aws:ec2:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:volume/{volume.id}"
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
+        volume = ec2.create_volume(Size=80, AvailabilityZone=AWS_REGION_US_EAST_1_AZA)
+        volume_arn = f"arn:aws:ec2:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:volume/{volume.id}"
         _ = volume.create_snapshot(Description="testsnap")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -149,27 +126,25 @@ def test_ec2_volume_with_snapshot(self):
             assert result[0].resource_id == volume.id
             assert result[0].resource_arn == volume_arn
             assert result[0].resource_tags is None
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_volume_with_and_without_snapshot(self):
         # Create EC2 Mocked Resources
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
 
-        volume1 = ec2.create_volume(Size=80, AvailabilityZone=AWS_REGION_AZ)
-        volume1_arn = (
-            f"arn:aws:ec2:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:volume/{volume1.id}"
-        )
+        volume1 = ec2.create_volume(Size=80, AvailabilityZone=AWS_REGION_US_EAST_1_AZA)
+        volume1_arn = f"arn:aws:ec2:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:volume/{volume1.id}"
         _ = volume1.create_snapshot(Description="test-snap")
 
-        volume2 = ec2.create_volume(Size=80, AvailabilityZone=AWS_REGION_AZ)
-        volume2_arn = (
-            f"arn:aws:ec2:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:volume/{volume2.id}"
-        )
+        volume2 = ec2.create_volume(Size=80, AvailabilityZone=AWS_REGION_US_EAST_1_AZA)
+        volume2_arn = f"arn:aws:ec2:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:volume/{volume2.id}"
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -197,7 +172,7 @@ def test_ec2_volume_with_and_without_snapshot(self):
                     assert res.resource_id == volume1.id
                     assert res.resource_arn == volume1_arn
                     assert res.resource_tags is None
-                    assert res.region == AWS_REGION
+                    assert res.region == AWS_REGION_US_EAST_1
                 if res.resource_id == volume2.id:
                     assert res.status == "FAIL"
                     assert (
@@ -207,4 +182,4 @@ def test_ec2_volume_with_and_without_snapshot(self):
                     assert res.resource_id == volume2.id
                     assert res.resource_arn == volume2_arn
                     assert res.resource_tags is None
-                    assert res.region == AWS_REGION
+                    assert res.region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/ec2/ec2_elastic_ip_shodan/ec2_elastic_ip_shodan_test.py b/tests/providers/aws/services/ec2/ec2_elastic_ip_shodan/ec2_elastic_ip_shodan_test.py
index 5ef1d4aec61..794cc204e9b 100644
--- a/tests/providers/aws/services/ec2/ec2_elastic_ip_shodan/ec2_elastic_ip_shodan_test.py
+++ b/tests/providers/aws/services/ec2/ec2_elastic_ip_shodan/ec2_elastic_ip_shodan_test.py
@@ -1,59 +1,32 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_ec2
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 EXAMPLE_AMI_ID = "ami-12c6146b"
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "eu-west-1"
 
 
 class Test_ec2_elastic_ip_shodan:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-            audit_config={"shodan_api_key": ""},
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_one_instances_no_public_ip(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", AWS_REGION)
+        ec2_client = client("ec2", AWS_REGION_US_EAST_1)
         # Create EC2 Instance
         ec2_client.run_instances(ImageId=EXAMPLE_AMI_ID, MinCount=1, MaxCount=1)
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            audit_config={"shodan_api_key": ""},
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -72,16 +45,19 @@ def test_ec2_one_instances_no_public_ip(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_one_unattached_eip(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", AWS_REGION)
+        ec2_client = client("ec2", AWS_REGION_US_EAST_1)
         # Create EC2 Instance
         ec2_client.allocate_address(Domain="vpc")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            audit_config={"shodan_api_key": ""},
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -100,10 +76,10 @@ def test_ec2_one_unattached_eip(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_one_attached_eip_no_shodan_api_key(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", AWS_REGION)
+        ec2_client = client("ec2", AWS_REGION_US_EAST_1)
         # Create EC2 Instance
         instance = ec2_client.run_instances(
             ImageId=EXAMPLE_AMI_ID, MinCount=1, MaxCount=1
@@ -116,7 +92,10 @@ def test_ec2_one_attached_eip_no_shodan_api_key(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            audit_config={"shodan_api_key": ""},
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -135,10 +114,10 @@ def test_ec2_one_attached_eip_no_shodan_api_key(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_one_attached_eip_shodan_api_key(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", AWS_REGION)
+        ec2_client = client("ec2", AWS_REGION_US_EAST_1)
         # Create EC2 Instance
         instance = ec2_client.run_instances(
             ImageId=EXAMPLE_AMI_ID, MinCount=1, MaxCount=1
@@ -154,8 +133,10 @@ def test_ec2_one_attached_eip_shodan_api_key(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.audit_config = {"shodan_api_key": "XXXXXXX"}
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            audit_config={"shodan_api_key": "XXXXXXX"},
+        )
 
         ports = ["22", "443"]
         isp = "test-isp"
@@ -183,9 +164,9 @@ def test_ec2_one_attached_eip_shodan_api_key(self):
             assert result[0].resource_id == public_ip
             assert (
                 result[0].resource_arn
-                == f"arn:aws:ec2:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:eip-allocation/{allocation_id}"
+                == f"arn:aws:ec2:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:eip-allocation/{allocation_id}"
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == []
             assert result[0].status == "FAIL"
             assert (
diff --git a/tests/providers/aws/services/ec2/ec2_elastic_ip_unassigned/ec2_elastic_ip_unassigned_test.py b/tests/providers/aws/services/ec2/ec2_elastic_ip_unassigned/ec2_elastic_ip_unassigned_test.py
index dc2f14977d5..19d21f34221 100644
--- a/tests/providers/aws/services/ec2/ec2_elastic_ip_unassigned/ec2_elastic_ip_unassigned_test.py
+++ b/tests/providers/aws/services/ec2/ec2_elastic_ip_unassigned/ec2_elastic_ip_unassigned_test.py
@@ -1,54 +1,26 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
-AWS_REGION = "us-east-1"
 EXAMPLE_AMI_ID = "ami-12c6146b"
-AWS_ACCOUNT_NUMBER = "123456789012"
 
 
 class Test_ec2_elastic_ip_unassigned:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_no_eips(self):
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -67,17 +39,19 @@ def test_no_eips(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_eip_unassociated(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         allocation_id = ec2_client.allocate_address(
             Domain="vpc", Address="127.38.43.222"
         )["AllocationId"]
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -96,7 +70,7 @@ def test_eip_unassociated(self):
 
             assert len(results) == 1
             assert results[0].status == "FAIL"
-            assert results[0].region == AWS_REGION
+            assert results[0].region == AWS_REGION_US_EAST_1
             assert results[0].resource_tags == []
             assert search(
                 "is not associated",
@@ -104,14 +78,14 @@ def test_eip_unassociated(self):
             )
             assert (
                 results[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:eip-allocation/{allocation_id}"
+                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:eip-allocation/{allocation_id}"
             )
 
-    @mock_ec2
+    @mock_aws
     def test_eip_associated(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
-        ec2_resource = resource("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
+        ec2_resource = resource("ec2", region_name=AWS_REGION_US_EAST_1)
 
         reservation = ec2_client.run_instances(
             ImageId=EXAMPLE_AMI_ID, MinCount=1, MaxCount=1
@@ -128,7 +102,9 @@ def test_eip_associated(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -147,7 +123,7 @@ def test_eip_associated(self):
 
             assert len(results) == 1
             assert results[0].status == "PASS"
-            assert results[0].region == AWS_REGION
+            assert results[0].region == AWS_REGION_US_EAST_1
             assert results[0].resource_tags == []
             assert search(
                 "is associated",
@@ -155,5 +131,5 @@ def test_eip_associated(self):
             )
             assert (
                 results[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:eip-allocation/{eip.allocation_id}"
+                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:eip-allocation/{eip.allocation_id}"
             )
diff --git a/tests/providers/aws/services/ec2/ec2_instance_detailed_monitoring_enabled/ec2_instance_detailed_monitoring_enabled_test.py b/tests/providers/aws/services/ec2/ec2_instance_detailed_monitoring_enabled/ec2_instance_detailed_monitoring_enabled_test.py
index 79bbc3de207..c47e133d8ee 100644
--- a/tests/providers/aws/services/ec2/ec2_instance_detailed_monitoring_enabled/ec2_instance_detailed_monitoring_enabled_test.py
+++ b/tests/providers/aws/services/ec2/ec2_instance_detailed_monitoring_enabled/ec2_instance_detailed_monitoring_enabled_test.py
@@ -1,53 +1,25 @@
 from unittest import mock
 
-from boto3 import resource, session
-from moto import mock_ec2
+from boto3 import resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
-AWS_REGION = "us-east-1"
 EXAMPLE_AMI_ID = "ami-12c6146b"
-AWS_ACCOUNT_NUMBER = "123456789012"
 
 
 class Test_ec2_instance_detailed_monitoring_enabled:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_no_instances(self):
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -66,9 +38,9 @@ def test_ec2_no_instances(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_instance_with_enhanced_monitoring_disabled(self):
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         instance = ec2.create_instances(
             ImageId=EXAMPLE_AMI_ID,
             MinCount=1,
@@ -78,7 +50,9 @@ def test_instance_with_enhanced_monitoring_disabled(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -96,7 +70,7 @@ def test_instance_with_enhanced_monitoring_disabled(self):
 
             assert len(result) == 1
             assert result[0].status == "FAIL"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             # Moto fills instance tags with None
             assert result[0].resource_tags is None
             assert (
@@ -106,12 +80,12 @@ def test_instance_with_enhanced_monitoring_disabled(self):
             assert result[0].resource_id == instance.id
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:instance/{instance.id}"
+                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:instance/{instance.id}"
             )
 
-    @mock_ec2
+    @mock_aws
     def test_instance_with_enhanced_monitoring_enabled(self):
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         instance = ec2.create_instances(
             ImageId=EXAMPLE_AMI_ID,
             MinCount=1,
@@ -121,7 +95,9 @@ def test_instance_with_enhanced_monitoring_enabled(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -142,7 +118,7 @@ def test_instance_with_enhanced_monitoring_enabled(self):
 
             assert len(result) == 1
             assert result[0].status == "PASS"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             # Moto fills instance tags with None
             assert result[0].resource_tags is None
             assert (
@@ -152,5 +128,5 @@ def test_instance_with_enhanced_monitoring_enabled(self):
             assert result[0].resource_id == instance.id
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:instance/{instance.id}"
+                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:instance/{instance.id}"
             )
diff --git a/tests/providers/aws/services/ec2/ec2_instance_imdsv2_enabled/ec2_instance_imdsv2_enabled_test.py b/tests/providers/aws/services/ec2/ec2_instance_imdsv2_enabled/ec2_instance_imdsv2_enabled_test.py
index 957aeb6cd83..c4050dd70a0 100644
--- a/tests/providers/aws/services/ec2/ec2_instance_imdsv2_enabled/ec2_instance_imdsv2_enabled_test.py
+++ b/tests/providers/aws/services/ec2/ec2_instance_imdsv2_enabled/ec2_instance_imdsv2_enabled_test.py
@@ -1,54 +1,26 @@
 from re import search
 from unittest import mock
 
-from boto3 import resource, session
-from moto import mock_ec2
+from boto3 import resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
-AWS_REGION = "us-east-1"
 EXAMPLE_AMI_ID = "ami-12c6146b"
-AWS_ACCOUNT_NUMBER = "123456789012"
 
 
 class Test_ec2_instance_imdsv2_enabled:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_no_instances(self):
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -67,9 +39,9 @@ def test_ec2_no_instances(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_one_compliant_ec2(self):
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         instance = ec2.create_instances(
             ImageId=EXAMPLE_AMI_ID,
             MinCount=1,
@@ -82,7 +54,9 @@ def test_one_compliant_ec2(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -103,7 +77,7 @@ def test_one_compliant_ec2(self):
 
             assert len(result) == 1
             assert result[0].status == "PASS"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             # Moto fills instance tags with None
             assert result[0].resource_tags is None
             assert search(
@@ -113,12 +87,12 @@ def test_one_compliant_ec2(self):
             assert result[0].resource_id == instance.id
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:instance/{instance.id}"
+                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:instance/{instance.id}"
             )
 
-    @mock_ec2
+    @mock_aws
     def test_one_uncompliant_ec2_metadata_server_disabled(self):
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         instance = ec2.create_instances(
             ImageId=EXAMPLE_AMI_ID,
             MinCount=1,
@@ -131,7 +105,9 @@ def test_one_uncompliant_ec2_metadata_server_disabled(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -152,7 +128,7 @@ def test_one_uncompliant_ec2_metadata_server_disabled(self):
 
             assert len(result) == 1
             assert result[0].status == "PASS"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             # Moto fills instance tags with None
             assert result[0].resource_tags is None
             assert (
@@ -162,12 +138,12 @@ def test_one_uncompliant_ec2_metadata_server_disabled(self):
             assert result[0].resource_id == instance.id
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:instance/{instance.id}"
+                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:instance/{instance.id}"
             )
 
-    @mock_ec2
+    @mock_aws
     def test_one_uncompliant_ec2_metadata_server_enabled(self):
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         instance = ec2.create_instances(
             ImageId=EXAMPLE_AMI_ID,
             MinCount=1,
@@ -180,7 +156,9 @@ def test_one_uncompliant_ec2_metadata_server_enabled(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -201,7 +179,7 @@ def test_one_uncompliant_ec2_metadata_server_enabled(self):
 
             assert len(result) == 1
             assert result[0].status == "FAIL"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             # Moto fills instance tags with None
             assert result[0].resource_tags is None
             assert (
@@ -211,5 +189,5 @@ def test_one_uncompliant_ec2_metadata_server_enabled(self):
             assert result[0].resource_id == instance.id
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:instance/{instance.id}"
+                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:instance/{instance.id}"
             )
diff --git a/tests/providers/aws/services/ec2/ec2_instance_internet_facing_with_instance_profile/ec2_instance_internet_facing_with_instance_profile_test.py b/tests/providers/aws/services/ec2/ec2_instance_internet_facing_with_instance_profile/ec2_instance_internet_facing_with_instance_profile_test.py
index 7cae4c59a67..c94bdaebde6 100644
--- a/tests/providers/aws/services/ec2/ec2_instance_internet_facing_with_instance_profile/ec2_instance_internet_facing_with_instance_profile_test.py
+++ b/tests/providers/aws/services/ec2/ec2_instance_internet_facing_with_instance_profile/ec2_instance_internet_facing_with_instance_profile_test.py
@@ -1,54 +1,26 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2, mock_iam
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
-AWS_REGION = "us-east-1"
 EXAMPLE_AMI_ID = "ami-12c6146b"
-AWS_ACCOUNT_NUMBER = "123456789012"
 
 
 class Test_ec2_instance_internet_facing_with_instance_profile:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_no_instances(self):
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -67,15 +39,14 @@ def test_ec2_no_instances(self):
 
             assert len(result) == 0
 
-    @mock_iam
-    @mock_ec2
+    @mock_aws
     def test_one_compliant_ec2(self):
         iam = client("iam", "us-west-1")
         profile_name = "fake_profile"
         _ = iam.create_instance_profile(
             InstanceProfileName=profile_name,
         )
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
         subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18")
         instance = ec2.create_instances(
@@ -94,7 +65,9 @@ def test_one_compliant_ec2(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -112,7 +85,7 @@ def test_one_compliant_ec2(self):
 
             assert len(result) == 1
             assert result[0].status == "PASS"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags is None
             assert result[0].status_extended == (
                 f"EC2 Instance {instance.id} is not internet facing with an instance profile."
@@ -120,18 +93,17 @@ def test_one_compliant_ec2(self):
             assert result[0].resource_id == instance.id
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:instance/{instance.id}"
+                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:instance/{instance.id}"
             )
 
-    @mock_iam
-    @mock_ec2
+    @mock_aws
     def test_one_non_compliant_ec2(self):
         iam = client("iam", "us-west-1")
         profile_name = "fake_profile"
         _ = iam.create_instance_profile(
             InstanceProfileName=profile_name,
         )
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
         subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18")
         instance = ec2.create_instances(
@@ -150,7 +122,9 @@ def test_one_non_compliant_ec2(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -168,7 +142,7 @@ def test_one_non_compliant_ec2(self):
 
             assert len(result) == 1
             assert result[0].status == "FAIL"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags is None
             assert search(
                 "is internet-facing with Instance Profile", result[0].status_extended
@@ -176,5 +150,5 @@ def test_one_non_compliant_ec2(self):
             assert result[0].resource_id == instance.id
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:instance/{instance.id}"
+                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:instance/{instance.id}"
             )
diff --git a/tests/providers/aws/services/ec2/ec2_instance_managed_by_ssm/ec2_instance_managed_by_ssm_test.py b/tests/providers/aws/services/ec2/ec2_instance_managed_by_ssm/ec2_instance_managed_by_ssm_test.py
index 8b0f1baf892..9d17ec4de7a 100644
--- a/tests/providers/aws/services/ec2/ec2_instance_managed_by_ssm/ec2_instance_managed_by_ssm_test.py
+++ b/tests/providers/aws/services/ec2/ec2_instance_managed_by_ssm/ec2_instance_managed_by_ssm_test.py
@@ -1,54 +1,27 @@
 from unittest import mock
 
-from boto3 import resource, session
-from moto import mock_ec2
+from boto3 import resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.ssm.ssm_service import ManagedInstance
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
-AWS_REGION = "us-east-1"
 EXAMPLE_AMI_ID = "ami-12c6146b"
-AWS_ACCOUNT_NUMBER = "123456789012"
 
 
 class Test_ec2_instance_managed_by_ssm_test:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_no_instances(self):
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         ssm_client = mock.MagicMock
         ssm_client.managed_instances = {}
@@ -76,12 +49,12 @@ def test_ec2_no_instances(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_instance_managed_by_ssm_non_compliance_instance(self):
         ssm_client = mock.MagicMock
         ssm_client.managed_instances = {}
 
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         instance = ec2.create_instances(
             ImageId=EXAMPLE_AMI_ID,
             MinCount=1,
@@ -94,7 +67,9 @@ def test_ec2_instance_managed_by_ssm_non_compliance_instance(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -119,7 +94,7 @@ def test_ec2_instance_managed_by_ssm_non_compliance_instance(self):
 
             assert len(result) == 1
             assert result[0].status == "FAIL"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags is None
             assert (
                 result[0].status_extended
@@ -127,9 +102,9 @@ def test_ec2_instance_managed_by_ssm_non_compliance_instance(self):
             )
             assert result[0].resource_id == instance.id
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_instance_managed_by_ssm_compliance_instance(self):
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         instance = ec2.create_instances(
             ImageId=EXAMPLE_AMI_ID,
             MinCount=1,
@@ -140,15 +115,17 @@ def test_ec2_instance_managed_by_ssm_compliance_instance(self):
         ssm_client = mock.MagicMock
         ssm_client.managed_instances = {
             instance.id: ManagedInstance(
-                arn=f"arn:aws:ec2:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:instance/{instance.id}",
+                arn=f"arn:aws:ec2:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:instance/{instance.id}",
                 id=instance.id,
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
             )
         }
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -173,7 +150,7 @@ def test_ec2_instance_managed_by_ssm_compliance_instance(self):
 
             assert len(result) == 1
             assert result[0].status == "PASS"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags is None
             assert (
                 result[0].status_extended
diff --git a/tests/providers/aws/services/ec2/ec2_instance_older_than_specific_days/ec2_instance_older_than_specific_days_test.py b/tests/providers/aws/services/ec2/ec2_instance_older_than_specific_days/ec2_instance_older_than_specific_days_test.py
index c23ffa38507..c5afd5fe4f1 100644
--- a/tests/providers/aws/services/ec2/ec2_instance_older_than_specific_days/ec2_instance_older_than_specific_days_test.py
+++ b/tests/providers/aws/services/ec2/ec2_instance_older_than_specific_days/ec2_instance_older_than_specific_days_test.py
@@ -2,55 +2,27 @@
 from re import search
 from unittest import mock
 
-from boto3 import resource, session
+from boto3 import resource
 from dateutil.tz import tzutc
-from moto import mock_ec2
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
-AWS_REGION = "us-east-1"
 EXAMPLE_AMI_ID = "ami-12c6146b"
-AWS_ACCOUNT_NUMBER = "123456789012"
 
 
 class Test_ec2_instance_older_than_specific_days:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_no_instances(self):
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         current_audit_info.audit_config = {"max_ec2_instance_age_in_days": 180}
 
         with mock.patch(
@@ -70,9 +42,9 @@ def test_ec2_no_instances(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_one_compliant_ec2(self):
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         instance = ec2.create_instances(
             ImageId=EXAMPLE_AMI_ID,
             MinCount=1,
@@ -82,7 +54,9 @@ def test_one_compliant_ec2(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         current_audit_info.audit_config = {"max_ec2_instance_age_in_days": 180}
 
         with mock.patch(
@@ -101,7 +75,7 @@ def test_one_compliant_ec2(self):
 
             assert len(result) == 1
             assert result[0].status == "PASS"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags is None
             assert search(
                 f"EC2 Instance {instance.id} is not older", result[0].status_extended
@@ -109,12 +83,12 @@ def test_one_compliant_ec2(self):
             assert result[0].resource_id == instance.id
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:instance/{instance.id}"
+                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:instance/{instance.id}"
             )
 
-    @mock_ec2
+    @mock_aws
     def test_one_old_ec2(self):
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         instance = ec2.create_instances(
             ImageId=EXAMPLE_AMI_ID,
             MinCount=1,
@@ -124,7 +98,9 @@ def test_one_old_ec2(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         current_audit_info.audit_config = {"max_ec2_instance_age_in_days": 180}
 
         with mock.patch(
@@ -147,7 +123,7 @@ def test_one_old_ec2(self):
 
             assert len(result) == 1
             assert result[0].status == "FAIL"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags is None
             assert search(
                 f"EC2 Instance {instance.id} is older", result[0].status_extended
@@ -155,5 +131,5 @@ def test_one_old_ec2(self):
             assert result[0].resource_id == instance.id
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:instance/{instance.id}"
+                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:instance/{instance.id}"
             )
diff --git a/tests/providers/aws/services/ec2/ec2_instance_profile_attached/ec2_instance_profile_attached_test.py b/tests/providers/aws/services/ec2/ec2_instance_profile_attached/ec2_instance_profile_attached_test.py
index d9979fb8375..107f430b116 100644
--- a/tests/providers/aws/services/ec2/ec2_instance_profile_attached/ec2_instance_profile_attached_test.py
+++ b/tests/providers/aws/services/ec2/ec2_instance_profile_attached/ec2_instance_profile_attached_test.py
@@ -1,54 +1,26 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2, mock_iam
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
-AWS_REGION = "us-east-1"
 EXAMPLE_AMI_ID = "ami-12c6146b"
-AWS_ACCOUNT_NUMBER = "123456789012"
 
 
 class Test_ec2_instance_profile_attached:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_no_instances(self):
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -67,15 +39,14 @@ def test_ec2_no_instances(self):
 
             assert len(result) == 0
 
-    @mock_iam
-    @mock_ec2
+    @mock_aws
     def test_one_compliant_ec2(self):
         iam = client("iam", "us-west-1")
         profile_name = "fake_profile"
         _ = iam.create_instance_profile(
             InstanceProfileName=profile_name,
         )
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
         subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18")
         instance = ec2.create_instances(
@@ -94,7 +65,9 @@ def test_one_compliant_ec2(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -112,7 +85,7 @@ def test_one_compliant_ec2(self):
 
             assert len(result) == 1
             assert result[0].status == "PASS"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags is None
             assert search(
                 "associated with Instance Profile Role",
@@ -121,12 +94,12 @@ def test_one_compliant_ec2(self):
             assert result[0].resource_id == instance.id
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:instance/{instance.id}"
+                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:instance/{instance.id}"
             )
 
-    @mock_ec2
+    @mock_aws
     def test_one_non_compliant_ec2(self):
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
         subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18")
         instance = ec2.create_instances(
@@ -144,7 +117,9 @@ def test_one_non_compliant_ec2(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -162,7 +137,7 @@ def test_one_non_compliant_ec2(self):
 
             assert len(result) == 1
             assert result[0].status == "FAIL"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags is None
             assert search(
                 "not associated with an Instance Profile", result[0].status_extended
@@ -170,5 +145,5 @@ def test_one_non_compliant_ec2(self):
             assert result[0].resource_id == instance.id
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:instance/{instance.id}"
+                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:instance/{instance.id}"
             )
diff --git a/tests/providers/aws/services/ec2/ec2_instance_public_ip/ec2_instance_public_ip_test.py b/tests/providers/aws/services/ec2/ec2_instance_public_ip/ec2_instance_public_ip_test.py
index 99c043acf3e..08771f65312 100644
--- a/tests/providers/aws/services/ec2/ec2_instance_public_ip/ec2_instance_public_ip_test.py
+++ b/tests/providers/aws/services/ec2/ec2_instance_public_ip/ec2_instance_public_ip_test.py
@@ -1,54 +1,26 @@
 from re import search
 from unittest import mock
 
-from boto3 import resource, session
-from moto import mock_ec2
+from boto3 import resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
-AWS_REGION = "us-east-1"
 EXAMPLE_AMI_ID = "ami-12c6146b"
-AWS_ACCOUNT_NUMBER = "123456789012"
 
 
 class Test_ec2_instance_public_ip:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_no_instances(self):
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -67,9 +39,9 @@ def test_ec2_no_instances(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_one_compliant_ec2(self):
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
         subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18")
         instance = ec2.create_instances(
@@ -87,7 +59,9 @@ def test_one_compliant_ec2(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -105,7 +79,7 @@ def test_one_compliant_ec2(self):
 
             assert len(result) == 1
             assert result[0].status == "PASS"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags is None
             assert search(
                 f"EC2 Instance {instance.id} does not have a Public IP.",
@@ -114,12 +88,12 @@ def test_one_compliant_ec2(self):
             assert result[0].resource_id == instance.id
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:instance/{instance.id}"
+                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:instance/{instance.id}"
             )
 
-    @mock_ec2
+    @mock_aws
     def test_one_ec2_with_public_ip(self):
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
         subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18")
         instance = ec2.create_instances(
@@ -137,7 +111,9 @@ def test_one_ec2_with_public_ip(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -155,7 +131,7 @@ def test_one_ec2_with_public_ip(self):
 
             assert len(result) == 1
             assert result[0].status == "FAIL"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags is None
             assert search(
                 f"EC2 Instance {instance.id} has a Public IP.",
@@ -164,5 +140,5 @@ def test_one_ec2_with_public_ip(self):
             assert result[0].resource_id == instance.id
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:instance/{instance.id}"
+                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:instance/{instance.id}"
             )
diff --git a/tests/providers/aws/services/ec2/ec2_instance_secrets_user_data/ec2_instance_secrets_user_data_test.py b/tests/providers/aws/services/ec2/ec2_instance_secrets_user_data/ec2_instance_secrets_user_data_test.py
index cd9c883318c..5361698c364 100644
--- a/tests/providers/aws/services/ec2/ec2_instance_secrets_user_data/ec2_instance_secrets_user_data_test.py
+++ b/tests/providers/aws/services/ec2/ec2_instance_secrets_user_data/ec2_instance_secrets_user_data_test.py
@@ -2,57 +2,29 @@
 from pathlib import Path
 from unittest import mock
 
-from boto3 import resource, session
-from moto import mock_ec2
+from boto3 import resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
-AWS_REGION = "us-east-1"
 EXAMPLE_AMI_ID = "ami-12c6146b"
-AWS_ACCOUNT_NUMBER = "123456789012"
 
 ACTUAL_DIRECTORY = Path(path.dirname(path.realpath(__file__)))
 FIXTURES_DIR_NAME = "fixtures"
 
 
 class Test_ec2_instance_secrets_user_data:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_no_ec2(self):
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -71,9 +43,9 @@ def test_no_ec2(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_one_ec2_with_no_secrets(self):
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         instance = ec2.create_instances(
             ImageId=EXAMPLE_AMI_ID,
             MinCount=1,
@@ -83,7 +55,9 @@ def test_one_ec2_with_no_secrets(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -108,14 +82,14 @@ def test_one_ec2_with_no_secrets(self):
             assert result[0].resource_id == instance.id
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:instance/{instance.id}"
+                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:instance/{instance.id}"
             )
             assert result[0].resource_tags is None
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_ec2
+    @mock_aws
     def test_one_ec2_with_secrets(self):
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         instance = ec2.create_instances(
             ImageId=EXAMPLE_AMI_ID,
             MinCount=1,
@@ -125,7 +99,9 @@ def test_one_ec2_with_secrets(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -150,12 +126,12 @@ def test_one_ec2_with_secrets(self):
             assert result[0].resource_id == instance.id
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:instance/{instance.id}"
+                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:instance/{instance.id}"
             )
             assert result[0].resource_tags is None
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_ec2
+    @mock_aws
     def test_one_ec2_file_with_secrets(self):
         # Include launch_configurations to check
         f = open(
@@ -163,14 +139,16 @@ def test_one_ec2_file_with_secrets(self):
             "r",
         )
         secrets = f.read()
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         instance = ec2.create_instances(
             ImageId=EXAMPLE_AMI_ID, MinCount=1, MaxCount=1, UserData=secrets
         )[0]
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -195,21 +173,23 @@ def test_one_ec2_file_with_secrets(self):
             assert result[0].resource_id == instance.id
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:instance/{instance.id}"
+                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:instance/{instance.id}"
             )
             assert result[0].resource_tags is None
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_ec2
+    @mock_aws
     def test_one_launch_configurations_without_user_data(self):
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         instance = ec2.create_instances(
             ImageId=EXAMPLE_AMI_ID, MinCount=1, MaxCount=1, UserData=""
         )[0]
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -234,12 +214,12 @@ def test_one_launch_configurations_without_user_data(self):
             assert result[0].resource_id == instance.id
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:instance/{instance.id}"
+                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:instance/{instance.id}"
             )
             assert result[0].resource_tags is None
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_ec2
+    @mock_aws
     def test_one_ec2_file_with_secrets_gzip(self):
         # Include launch_configurations to check
         f = open(
@@ -247,14 +227,16 @@ def test_one_ec2_file_with_secrets_gzip(self):
             "rb",
         )
         secrets = f.read()
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         instance = ec2.create_instances(
             ImageId=EXAMPLE_AMI_ID, MinCount=1, MaxCount=1, UserData=secrets
         )[0]
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -279,7 +261,7 @@ def test_one_ec2_file_with_secrets_gzip(self):
             assert result[0].resource_id == instance.id
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:instance/{instance.id}"
+                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:instance/{instance.id}"
             )
             assert result[0].resource_tags is None
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/ec2/ec2_networkacl_allow_ingress_any_port/ec2_networkacl_allow_ingress_any_port_test.py b/tests/providers/aws/services/ec2/ec2_networkacl_allow_ingress_any_port/ec2_networkacl_allow_ingress_any_port_test.py
index 829495b99e7..e1621af923f 100644
--- a/tests/providers/aws/services/ec2/ec2_networkacl_allow_ingress_any_port/ec2_networkacl_allow_ingress_any_port_test.py
+++ b/tests/providers/aws/services/ec2/ec2_networkacl_allow_ingress_any_port/ec2_networkacl_allow_ingress_any_port_test.py
@@ -1,52 +1,23 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_ec2
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_ec2_networkacl_allow_ingress_any_port:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_nacls(self):
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -66,11 +37,13 @@ def test_ec2_default_nacls(self):
             # One default nacl per region
             assert len(result) == 2
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_default_compliant_nacl(self):
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -92,17 +65,17 @@ def test_ec2_non_default_compliant_nacl(self):
 
             # by default nacls are public
             assert result[0].status == "FAIL"
-            assert result[0].region in (AWS_REGION, "eu-west-1")
+            assert result[0].region in (AWS_REGION_US_EAST_1, "eu-west-1")
             assert result[0].resource_tags == []
             assert (
                 result[0].status_extended
                 == f"Network ACL {result[0].resource_id} has every port open to the Internet."
             )
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_compliant_nacl(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc_id = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"]["VpcId"]
         nacl_id = ec2_client.create_network_acl(VpcId=vpc_id)["NetworkAcl"][
             "NetworkAclId"
@@ -118,7 +91,9 @@ def test_ec2_non_compliant_nacl(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -141,7 +116,7 @@ def test_ec2_non_compliant_nacl(self):
             for nacl in result:
                 if nacl.resource_id == nacl_id:
                     assert nacl.status == "FAIL"
-                    assert result[0].region in (AWS_REGION, "eu-west-1")
+                    assert result[0].region in (AWS_REGION_US_EAST_1, "eu-west-1")
                     assert result[0].resource_tags == []
                     assert (
                         nacl.status_extended
@@ -149,13 +124,13 @@ def test_ec2_non_compliant_nacl(self):
                     )
                     assert (
                         nacl.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:network-acl/{nacl_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:network-acl/{nacl_id}"
                     )
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_compliant_nacl(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc_id = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"]["VpcId"]
         nacl_id = ec2_client.create_network_acl(VpcId=vpc_id)["NetworkAcl"][
             "NetworkAclId"
@@ -171,7 +146,9 @@ def test_ec2_compliant_nacl(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -194,7 +171,7 @@ def test_ec2_compliant_nacl(self):
             for nacl in result:
                 if nacl.resource_id == nacl_id:
                     assert nacl.status == "PASS"
-                    assert result[0].region in (AWS_REGION, "eu-west-1")
+                    assert result[0].region in (AWS_REGION_US_EAST_1, "eu-west-1")
                     assert result[0].resource_tags == []
                     assert (
                         nacl.status_extended
@@ -202,13 +179,13 @@ def test_ec2_compliant_nacl(self):
                     )
                     assert (
                         nacl.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:network-acl/{nacl_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:network-acl/{nacl_id}"
                     )
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_compliant_nacl_ignoring(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc_id = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"]["VpcId"]
         nacl_id = ec2_client.create_network_acl(VpcId=vpc_id)["NetworkAcl"][
             "NetworkAclId"
@@ -224,8 +201,10 @@ def test_ec2_non_compliant_nacl_ignoring(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -244,10 +223,10 @@ def test_ec2_non_compliant_nacl_ignoring(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_compliant_nacl_ignoring_with_sgs(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc_id = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"]["VpcId"]
         nacl_id = ec2_client.create_network_acl(VpcId=vpc_id)["NetworkAcl"][
             "NetworkAclId"
@@ -264,8 +243,10 @@ def test_ec2_non_compliant_nacl_ignoring_with_sgs(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -288,7 +269,7 @@ def test_ec2_non_compliant_nacl_ignoring_with_sgs(self):
             for nacl in result:
                 if nacl.resource_id == nacl_id:
                     assert nacl.status == "FAIL"
-                    assert result[0].region in (AWS_REGION, "eu-west-1")
+                    assert result[0].region in (AWS_REGION_US_EAST_1, "eu-west-1")
                     assert result[0].resource_tags == []
                     assert (
                         nacl.status_extended
@@ -296,5 +277,5 @@ def test_ec2_non_compliant_nacl_ignoring_with_sgs(self):
                     )
                     assert (
                         nacl.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:network-acl/{nacl_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:network-acl/{nacl_id}"
                     )
diff --git a/tests/providers/aws/services/ec2/ec2_networkacl_allow_ingress_tcp_port_22/ec2_networkacl_allow_ingress_tcp_port_22_test.py b/tests/providers/aws/services/ec2/ec2_networkacl_allow_ingress_tcp_port_22/ec2_networkacl_allow_ingress_tcp_port_22_test.py
index 3428a526e4a..5281f5e9d2b 100644
--- a/tests/providers/aws/services/ec2/ec2_networkacl_allow_ingress_tcp_port_22/ec2_networkacl_allow_ingress_tcp_port_22_test.py
+++ b/tests/providers/aws/services/ec2/ec2_networkacl_allow_ingress_tcp_port_22/ec2_networkacl_allow_ingress_tcp_port_22_test.py
@@ -1,52 +1,23 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_ec2
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_ec2_networkacl_allow_ingress_tcp_port_22:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_nacls(self):
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -66,11 +37,13 @@ def test_ec2_default_nacls(self):
             # One default nacl per region
             assert len(result) == 2
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_default_compliant_nacl(self):
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -92,17 +65,17 @@ def test_ec2_non_default_compliant_nacl(self):
 
             # by default nacls are public
             assert result[0].status == "FAIL"
-            assert result[0].region in (AWS_REGION, "eu-west-1")
+            assert result[0].region in (AWS_REGION_US_EAST_1, "eu-west-1")
             assert result[0].resource_tags == []
             assert (
                 result[0].status_extended
                 == f"Network ACL {result[0].resource_id} has SSH port 22 open to the Internet."
             )
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_compliant_nacl(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc_id = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"]["VpcId"]
         nacl_id = ec2_client.create_network_acl(VpcId=vpc_id)["NetworkAcl"][
             "NetworkAclId"
@@ -119,7 +92,9 @@ def test_ec2_non_compliant_nacl(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -142,7 +117,7 @@ def test_ec2_non_compliant_nacl(self):
             for nacl in result:
                 if nacl.resource_id == nacl_id:
                     assert nacl.status == "FAIL"
-                    assert result[0].region in (AWS_REGION, "eu-west-1")
+                    assert result[0].region in (AWS_REGION_US_EAST_1, "eu-west-1")
                     assert result[0].resource_tags == []
                     assert (
                         nacl.status_extended
@@ -150,13 +125,13 @@ def test_ec2_non_compliant_nacl(self):
                     )
                     assert (
                         nacl.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:network-acl/{nacl_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:network-acl/{nacl_id}"
                     )
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_compliant_nacl(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc_id = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"]["VpcId"]
         nacl_id = ec2_client.create_network_acl(VpcId=vpc_id)["NetworkAcl"][
             "NetworkAclId"
@@ -173,7 +148,9 @@ def test_ec2_compliant_nacl(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -196,7 +173,7 @@ def test_ec2_compliant_nacl(self):
             for nacl in result:
                 if nacl.resource_id == nacl_id:
                     assert nacl.status == "PASS"
-                    assert result[0].region in (AWS_REGION, "eu-west-1")
+                    assert result[0].region in (AWS_REGION_US_EAST_1, "eu-west-1")
                     assert result[0].resource_tags == []
                     assert (
                         nacl.status_extended
@@ -204,13 +181,13 @@ def test_ec2_compliant_nacl(self):
                     )
                     assert (
                         nacl.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:network-acl/{nacl_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:network-acl/{nacl_id}"
                     )
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_compliant_nacl_ignoring(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc_id = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"]["VpcId"]
         nacl_id = ec2_client.create_network_acl(VpcId=vpc_id)["NetworkAcl"][
             "NetworkAclId"
@@ -226,8 +203,10 @@ def test_ec2_non_compliant_nacl_ignoring(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -246,10 +225,10 @@ def test_ec2_non_compliant_nacl_ignoring(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_compliant_nacl_ignoring_with_sgs(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc_id = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"]["VpcId"]
         nacl_id = ec2_client.create_network_acl(VpcId=vpc_id)["NetworkAcl"][
             "NetworkAclId"
@@ -266,8 +245,10 @@ def test_ec2_non_compliant_nacl_ignoring_with_sgs(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -290,7 +271,7 @@ def test_ec2_non_compliant_nacl_ignoring_with_sgs(self):
             for nacl in result:
                 if nacl.resource_id == nacl_id:
                     assert nacl.status == "FAIL"
-                    assert result[0].region in (AWS_REGION, "eu-west-1")
+                    assert result[0].region in (AWS_REGION_US_EAST_1, "eu-west-1")
                     assert result[0].resource_tags == []
                     assert (
                         nacl.status_extended
@@ -298,5 +279,5 @@ def test_ec2_non_compliant_nacl_ignoring_with_sgs(self):
                     )
                     assert (
                         nacl.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:network-acl/{nacl_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:network-acl/{nacl_id}"
                     )
diff --git a/tests/providers/aws/services/ec2/ec2_networkacl_allow_ingress_tcp_port_3389/ec2_networkacl_allow_ingress_tcp_port_3389_test.py b/tests/providers/aws/services/ec2/ec2_networkacl_allow_ingress_tcp_port_3389/ec2_networkacl_allow_ingress_tcp_port_3389_test.py
index d7f76c7ccfd..610410868f5 100644
--- a/tests/providers/aws/services/ec2/ec2_networkacl_allow_ingress_tcp_port_3389/ec2_networkacl_allow_ingress_tcp_port_3389_test.py
+++ b/tests/providers/aws/services/ec2/ec2_networkacl_allow_ingress_tcp_port_3389/ec2_networkacl_allow_ingress_tcp_port_3389_test.py
@@ -1,52 +1,23 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_ec2
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_ec2_networkacl_allow_ingress_tcp_port_3389:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_nacls(self):
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -66,11 +37,13 @@ def test_ec2_default_nacls(self):
             # One default nacl per region
             assert len(result) == 2
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_default_compliant_nacl(self):
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -92,17 +65,17 @@ def test_ec2_non_default_compliant_nacl(self):
 
             # by default nacls are public
             assert result[0].status == "FAIL"
-            assert result[0].region in (AWS_REGION, "eu-west-1")
+            assert result[0].region in (AWS_REGION_US_EAST_1, "eu-west-1")
             assert result[0].resource_tags == []
             assert (
                 result[0].status_extended
                 == f"Network ACL {result[0].resource_id} has Microsoft RDP port 3389 open to the Internet."
             )
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_compliant_nacl(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc_id = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"]["VpcId"]
         nacl_id = ec2_client.create_network_acl(VpcId=vpc_id)["NetworkAcl"][
             "NetworkAclId"
@@ -119,7 +92,9 @@ def test_ec2_non_compliant_nacl(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -142,7 +117,7 @@ def test_ec2_non_compliant_nacl(self):
             for nacl in result:
                 if nacl.resource_id == nacl_id:
                     assert nacl.status == "FAIL"
-                    assert result[0].region in (AWS_REGION, "eu-west-1")
+                    assert result[0].region in (AWS_REGION_US_EAST_1, "eu-west-1")
                     assert result[0].resource_tags == []
                     assert (
                         nacl.status_extended
@@ -150,13 +125,13 @@ def test_ec2_non_compliant_nacl(self):
                     )
                     assert (
                         nacl.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:network-acl/{nacl_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:network-acl/{nacl_id}"
                     )
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_compliant_nacl(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc_id = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"]["VpcId"]
         nacl_id = ec2_client.create_network_acl(VpcId=vpc_id)["NetworkAcl"][
             "NetworkAclId"
@@ -173,7 +148,9 @@ def test_ec2_compliant_nacl(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -196,7 +173,7 @@ def test_ec2_compliant_nacl(self):
             for nacl in result:
                 if nacl.resource_id == nacl_id:
                     assert nacl.status == "PASS"
-                    assert result[0].region in (AWS_REGION, "eu-west-1")
+                    assert result[0].region in (AWS_REGION_US_EAST_1, "eu-west-1")
                     assert result[0].resource_tags == []
                     assert (
                         nacl.status_extended
@@ -204,13 +181,13 @@ def test_ec2_compliant_nacl(self):
                     )
                     assert (
                         nacl.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:network-acl/{nacl_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:network-acl/{nacl_id}"
                     )
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_compliant_nacl_ignoring(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc_id = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"]["VpcId"]
         nacl_id = ec2_client.create_network_acl(VpcId=vpc_id)["NetworkAcl"][
             "NetworkAclId"
@@ -226,8 +203,10 @@ def test_ec2_non_compliant_nacl_ignoring(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -246,10 +225,10 @@ def test_ec2_non_compliant_nacl_ignoring(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_compliant_nacl_ignoring_with_sgs(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc_id = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"]["VpcId"]
         nacl_id = ec2_client.create_network_acl(VpcId=vpc_id)["NetworkAcl"][
             "NetworkAclId"
@@ -266,8 +245,10 @@ def test_ec2_non_compliant_nacl_ignoring_with_sgs(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -290,7 +271,7 @@ def test_ec2_non_compliant_nacl_ignoring_with_sgs(self):
             for nacl in result:
                 if nacl.resource_id == nacl_id:
                     assert nacl.status == "FAIL"
-                    assert result[0].region in (AWS_REGION, "eu-west-1")
+                    assert result[0].region in (AWS_REGION_US_EAST_1, "eu-west-1")
                     assert result[0].resource_tags == []
                     assert (
                         nacl.status_extended
@@ -298,5 +279,5 @@ def test_ec2_non_compliant_nacl_ignoring_with_sgs(self):
                     )
                     assert (
                         nacl.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:network-acl/{nacl_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:network-acl/{nacl_id}"
                     )
diff --git a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_any_port/ec2_securitygroup_allow_ingress_from_internet_to_any_port_test.py b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_any_port/ec2_securitygroup_allow_ingress_from_internet_to_any_port_test.py
index 9a53db143fb..c815051e794 100644
--- a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_any_port/ec2_securitygroup_allow_ingress_from_internet_to_any_port_test.py
+++ b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_any_port/ec2_securitygroup_allow_ingress_from_internet_to_any_port_test.py
@@ -1,59 +1,31 @@
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.vpc.vpc_service import VPC
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_ec2_securitygroup_allow_ingress_from_internet_to_any_port:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[
-                    "ec2_securitygroup_allow_ingress_from_internet_to_any_port"
-                ],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            expected_checks=[
+                "ec2_securitygroup_allow_ingress_from_internet_to_any_port"
+            ],
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -80,10 +52,10 @@ def test_ec2_default_sgs(self):
             assert result[1].status == "PASS"
             assert result[2].status == "PASS"
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -102,7 +74,12 @@ def test_ec2_non_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            expected_checks=[
+                "ec2_securitygroup_allow_ingress_from_internet_to_any_port"
+            ],
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -128,22 +105,22 @@ def test_ec2_non_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "FAIL"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) has all ports open to the Internet."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -162,7 +139,12 @@ def test_ec2_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            expected_checks=[
+                "ec2_securitygroup_allow_ingress_from_internet_to_any_port"
+            ],
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -188,22 +170,22 @@ def test_ec2_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "PASS"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) does not have all ports open to the Internet."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_compliant_default_sg_only_open_to_one_port(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -227,7 +209,12 @@ def test_ec2_compliant_default_sg_only_open_to_one_port(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            expected_checks=[
+                "ec2_securitygroup_allow_ingress_from_internet_to_any_port"
+            ],
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -253,28 +240,33 @@ def test_ec2_compliant_default_sg_only_open_to_one_port(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "PASS"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) does not have all ports open to the Internet."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            expected_checks=[
+                "ec2_securitygroup_allow_ingress_from_internet_to_any_port"
+            ],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -296,14 +288,14 @@ def test_ec2_default_sgs_ignoring(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring_vpc_in_use(self):
         # Create EC2 Mocked Resources
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
         subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18")
         ec2.create_network_interface(SubnetId=subnet.id)
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
         ][0]
@@ -311,8 +303,13 @@ def test_ec2_default_sgs_ignoring_vpc_in_use(self):
         default_sg["GroupName"]
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            expected_checks=[
+                "ec2_securitygroup_allow_ingress_from_internet_to_any_port"
+            ],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -334,4 +331,4 @@ def test_ec2_default_sgs_ignoring_vpc_in_use(self):
 
             assert len(result) == 1
             assert result[0].status == "PASS"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_port_mongodb_27017_27018/ec2_securitygroup_allow_ingress_from_internet_to_port_mongodb_27017_27018_test.py b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_port_mongodb_27017_27018/ec2_securitygroup_allow_ingress_from_internet_to_port_mongodb_27017_27018_test.py
index a61c8f75d04..4295c3bd237 100644
--- a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_port_mongodb_27017_27018/ec2_securitygroup_allow_ingress_from_internet_to_port_mongodb_27017_27018_test.py
+++ b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_port_mongodb_27017_27018/ec2_securitygroup_allow_ingress_from_internet_to_port_mongodb_27017_27018_test.py
@@ -1,57 +1,28 @@
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.vpc.vpc_service import VPC
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_ec2_securitygroup_allow_ingress_from_internet_to_port_mongodb_27017_27018:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -80,10 +51,10 @@ def test_ec2_default_sgs(self):
             assert result[1].status == "PASS"
             assert result[2].status == "PASS"
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -104,7 +75,9 @@ def test_ec2_non_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -132,22 +105,22 @@ def test_ec2_non_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "FAIL"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) has MongoDB ports 27017 and 27018 open to the Internet."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -168,7 +141,9 @@ def test_ec2_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -196,28 +171,30 @@ def test_ec2_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "PASS"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) does not have MongoDB ports 27017 and 27018 open to the Internet."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -241,14 +218,14 @@ def test_ec2_default_sgs_ignoring(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring_vpc_in_use(self):
         # Create EC2 Mocked Resources
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
         subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18")
         ec2.create_network_interface(SubnetId=subnet.id)
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
         ][0]
@@ -256,8 +233,10 @@ def test_ec2_default_sgs_ignoring_vpc_in_use(self):
         default_sg["GroupName"]
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -281,4 +260,4 @@ def test_ec2_default_sgs_ignoring_vpc_in_use(self):
 
             assert len(result) == 1
             assert result[0].status == "PASS"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_ftp_port_20_21/ec2_securitygroup_allow_ingress_from_internet_to_tcp_ftp_port_20_21_test.py b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_ftp_port_20_21/ec2_securitygroup_allow_ingress_from_internet_to_tcp_ftp_port_20_21_test.py
index 2a199b8e843..4f683cb4e71 100644
--- a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_ftp_port_20_21/ec2_securitygroup_allow_ingress_from_internet_to_tcp_ftp_port_20_21_test.py
+++ b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_ftp_port_20_21/ec2_securitygroup_allow_ingress_from_internet_to_tcp_ftp_port_20_21_test.py
@@ -1,57 +1,28 @@
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.vpc.vpc_service import VPC
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_ec2_securitygroup_allow_ingress_from_internet_to_tcp_ftp_port_20_21:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -80,10 +51,10 @@ def test_ec2_default_sgs(self):
             assert result[1].status == "PASS"
             assert result[2].status == "PASS"
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -104,7 +75,9 @@ def test_ec2_non_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -132,22 +105,22 @@ def test_ec2_non_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "FAIL"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) has FTP ports 20 and 21 open to the Internet."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -168,7 +141,9 @@ def test_ec2_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -196,28 +171,30 @@ def test_ec2_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "PASS"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) does not have FTP ports 20 and 21 open to the Internet."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -241,14 +218,14 @@ def test_ec2_default_sgs_ignoring(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring_vpc_in_use(self):
         # Create EC2 Mocked Resources
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
         subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18")
         ec2.create_network_interface(SubnetId=subnet.id)
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
         ][0]
@@ -256,8 +233,10 @@ def test_ec2_default_sgs_ignoring_vpc_in_use(self):
         default_sg["GroupName"]
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -281,4 +260,4 @@ def test_ec2_default_sgs_ignoring_vpc_in_use(self):
 
             assert len(result) == 1
             assert result[0].status == "PASS"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22_test.py b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22_test.py
index 74ea0d6ff87..cbf0449282f 100644
--- a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22_test.py
+++ b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22_test.py
@@ -1,58 +1,29 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.vpc.vpc_service import VPC
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -79,10 +50,10 @@ def test_ec2_default_sgs(self):
             assert result[1].status == "PASS"
             assert result[2].status == "PASS"
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -103,7 +74,9 @@ def test_ec2_non_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -129,7 +102,7 @@ def test_ec2_non_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "FAIL"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) has SSH port 22 open to the Internet."
@@ -140,15 +113,15 @@ def test_ec2_non_compliant_default_sg(self):
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -169,7 +142,9 @@ def test_ec2_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -195,28 +170,30 @@ def test_ec2_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "PASS"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) does not have SSH port 22 open to the Internet."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -238,14 +215,14 @@ def test_ec2_default_sgs_ignoring(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring_vpc_in_use(self):
         # Create EC2 Mocked Resources
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
         subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18")
         ec2.create_network_interface(SubnetId=subnet.id)
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
         ][0]
@@ -253,8 +230,10 @@ def test_ec2_default_sgs_ignoring_vpc_in_use(self):
         default_sg["GroupName"]
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -276,4 +255,4 @@ def test_ec2_default_sgs_ignoring_vpc_in_use(self):
 
             assert len(result) == 1
             assert result[0].status == "PASS"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_3389/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_3389_test.py b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_3389/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_3389_test.py
index 6240e45ab99..e60e76fbe22 100644
--- a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_3389/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_3389_test.py
+++ b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_3389/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_3389_test.py
@@ -1,57 +1,28 @@
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.vpc.vpc_service import VPC
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_3389:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -78,16 +49,18 @@ def test_ec2_default_sgs(self):
             assert result[1].status == "PASS"
             assert result[2].status == "PASS"
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -109,14 +82,14 @@ def test_ec2_default_sgs_ignoring(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring_vpc_in_use(self):
         # Create EC2 Mocked Resources
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
         subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18")
         ec2.create_network_interface(SubnetId=subnet.id)
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
         ][0]
@@ -124,8 +97,10 @@ def test_ec2_default_sgs_ignoring_vpc_in_use(self):
         default_sg["GroupName"]
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -147,12 +122,12 @@ def test_ec2_default_sgs_ignoring_vpc_in_use(self):
 
             assert len(result) == 1
             assert result[0].status == "PASS"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -173,7 +148,9 @@ def test_ec2_non_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -199,22 +176,22 @@ def test_ec2_non_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "FAIL"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) has Microsoft RDP port 3389 open to the Internet."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -235,7 +212,9 @@ def test_ec2_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -261,14 +240,14 @@ def test_ec2_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "PASS"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) does not have Microsoft RDP port 3389 open to the Internet."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
diff --git a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_cassandra_7199_9160_8888/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_cassandra_7199_9160_8888_test.py b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_cassandra_7199_9160_8888/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_cassandra_7199_9160_8888_test.py
index a2a5c0f293f..a9edee7c18f 100644
--- a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_cassandra_7199_9160_8888/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_cassandra_7199_9160_8888_test.py
+++ b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_cassandra_7199_9160_8888/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_cassandra_7199_9160_8888_test.py
@@ -1,57 +1,28 @@
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.vpc.vpc_service import VPC
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_cassandra_7199_9160_8888:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -80,10 +51,10 @@ def test_ec2_default_sgs(self):
             assert result[1].status == "PASS"
             assert result[2].status == "PASS"
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -104,7 +75,9 @@ def test_ec2_non_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -132,22 +105,22 @@ def test_ec2_non_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "FAIL"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) has Casandra ports 7199, 8888 and 9160 open to the Internet."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -168,7 +141,9 @@ def test_ec2_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -196,28 +171,30 @@ def test_ec2_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "PASS"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) does not have Casandra ports 7199, 8888 and 9160 open to the Internet."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -241,14 +218,14 @@ def test_ec2_default_sgs_ignoring(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring_vpc_in_use(self):
         # Create EC2 Mocked Resources
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
         subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18")
         ec2.create_network_interface(SubnetId=subnet.id)
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
         ][0]
@@ -256,8 +233,10 @@ def test_ec2_default_sgs_ignoring_vpc_in_use(self):
         default_sg["GroupName"]
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -281,4 +260,4 @@ def test_ec2_default_sgs_ignoring_vpc_in_use(self):
 
             assert len(result) == 1
             assert result[0].status == "PASS"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_elasticsearch_kibana_9200_9300_5601/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_elasticsearch_kibana_9200_9300_5601_test.py b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_elasticsearch_kibana_9200_9300_5601/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_elasticsearch_kibana_9200_9300_5601_test.py
index e30e7e76d17..d085d919316 100644
--- a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_elasticsearch_kibana_9200_9300_5601/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_elasticsearch_kibana_9200_9300_5601_test.py
+++ b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_elasticsearch_kibana_9200_9300_5601/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_elasticsearch_kibana_9200_9300_5601_test.py
@@ -1,57 +1,28 @@
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.vpc.vpc_service import VPC
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_elasticsearch_kibana_9200_9300_5601:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -80,10 +51,10 @@ def test_ec2_default_sgs(self):
             assert result[1].status == "PASS"
             assert result[2].status == "PASS"
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -104,7 +75,9 @@ def test_ec2_non_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -132,22 +105,22 @@ def test_ec2_non_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "FAIL"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) has Elasticsearch/Kibana ports 9200, 9300 and 5601 open to the Internet."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -168,7 +141,9 @@ def test_ec2_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -196,28 +171,30 @@ def test_ec2_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "PASS"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) does not have Elasticsearch/Kibana ports 9200, 9300 and 5601 open to the Internet."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -241,14 +218,14 @@ def test_ec2_default_sgs_ignoring(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring_vpc_in_use(self):
         # Create EC2 Mocked Resources
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
         subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18")
         ec2.create_network_interface(SubnetId=subnet.id)
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
         ][0]
@@ -256,8 +233,10 @@ def test_ec2_default_sgs_ignoring_vpc_in_use(self):
         default_sg["GroupName"]
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -281,4 +260,4 @@ def test_ec2_default_sgs_ignoring_vpc_in_use(self):
 
             assert len(result) == 1
             assert result[0].status == "PASS"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_kafka_9092/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_kafka_9092_test.py b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_kafka_9092/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_kafka_9092_test.py
index 355f8e723c6..c0071218928 100644
--- a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_kafka_9092/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_kafka_9092_test.py
+++ b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_kafka_9092/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_kafka_9092_test.py
@@ -1,57 +1,28 @@
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.vpc.vpc_service import VPC
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_kafka_9092:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -80,10 +51,10 @@ def test_ec2_default_sgs(self):
             assert result[1].status == "PASS"
             assert result[2].status == "PASS"
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -104,7 +75,9 @@ def test_ec2_non_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -132,22 +105,22 @@ def test_ec2_non_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "FAIL"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) has Kafka port 9092 open to the Internet."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -168,7 +141,9 @@ def test_ec2_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -196,28 +171,30 @@ def test_ec2_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "PASS"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) does not have Kafka port 9092 open to the Internet."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -241,14 +218,14 @@ def test_ec2_default_sgs_ignoring(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring_vpc_in_use(self):
         # Create EC2 Mocked Resources
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
         subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18")
         ec2.create_network_interface(SubnetId=subnet.id)
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
         ][0]
@@ -256,8 +233,10 @@ def test_ec2_default_sgs_ignoring_vpc_in_use(self):
         default_sg["GroupName"]
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -281,4 +260,4 @@ def test_ec2_default_sgs_ignoring_vpc_in_use(self):
 
             assert len(result) == 1
             assert result[0].status == "PASS"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_memcached_11211/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_memcached_11211_test.py b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_memcached_11211/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_memcached_11211_test.py
index dbd12a22aac..d32fe6dcb1a 100644
--- a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_memcached_11211/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_memcached_11211_test.py
+++ b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_memcached_11211/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_memcached_11211_test.py
@@ -1,57 +1,28 @@
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.vpc.vpc_service import VPC
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_memcached_11211:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -80,10 +51,10 @@ def test_ec2_default_sgs(self):
             assert result[1].status == "PASS"
             assert result[2].status == "PASS"
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -104,7 +75,9 @@ def test_ec2_non_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -132,22 +105,22 @@ def test_ec2_non_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "FAIL"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) has Memcached port 11211 open to the Internet."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -168,7 +141,9 @@ def test_ec2_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -196,28 +171,30 @@ def test_ec2_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "PASS"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) does not have Memcached port 11211 open to the Internet."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -241,14 +218,14 @@ def test_ec2_default_sgs_ignoring(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring_vpc_in_use(self):
         # Create EC2 Mocked Resources
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
         subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18")
         ec2.create_network_interface(SubnetId=subnet.id)
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
         ][0]
@@ -256,8 +233,10 @@ def test_ec2_default_sgs_ignoring_vpc_in_use(self):
         default_sg["GroupName"]
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -281,4 +260,4 @@ def test_ec2_default_sgs_ignoring_vpc_in_use(self):
 
             assert len(result) == 1
             assert result[0].status == "PASS"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_mysql_3306/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_mysql_3306_test.py b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_mysql_3306/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_mysql_3306_test.py
index b2b0ea6529a..773b5da88b2 100644
--- a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_mysql_3306/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_mysql_3306_test.py
+++ b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_mysql_3306/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_mysql_3306_test.py
@@ -1,57 +1,28 @@
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.vpc.vpc_service import VPC
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_mysql_3306:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -80,10 +51,10 @@ def test_ec2_default_sgs(self):
             assert result[1].status == "PASS"
             assert result[2].status == "PASS"
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -104,7 +75,9 @@ def test_ec2_non_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -132,22 +105,22 @@ def test_ec2_non_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "FAIL"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) has MySQL port 3306 open to the Internet."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -168,7 +141,9 @@ def test_ec2_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -196,28 +171,30 @@ def test_ec2_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "PASS"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) does not have MySQL port 3306 open to the Internet."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -241,14 +218,14 @@ def test_ec2_default_sgs_ignoring(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring_vpc_in_use(self):
         # Create EC2 Mocked Resources
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
         subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18")
         ec2.create_network_interface(SubnetId=subnet.id)
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
         ][0]
@@ -256,8 +233,10 @@ def test_ec2_default_sgs_ignoring_vpc_in_use(self):
         default_sg["GroupName"]
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -281,4 +260,4 @@ def test_ec2_default_sgs_ignoring_vpc_in_use(self):
 
             assert len(result) == 1
             assert result[0].status == "PASS"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_oracle_1521_2483/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_oracle_1521_2483_test.py b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_oracle_1521_2483/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_oracle_1521_2483_test.py
index 5872d3dda0f..50310554832 100644
--- a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_oracle_1521_2483/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_oracle_1521_2483_test.py
+++ b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_oracle_1521_2483/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_oracle_1521_2483_test.py
@@ -1,57 +1,28 @@
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.vpc.vpc_service import VPC
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_oracle_1521_2483:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -80,10 +51,10 @@ def test_ec2_default_sgs(self):
             assert result[1].status == "PASS"
             assert result[2].status == "PASS"
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -104,7 +75,9 @@ def test_ec2_non_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -132,22 +105,22 @@ def test_ec2_non_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "FAIL"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) has Oracle ports 1521 and 2483 open to the Internet."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -168,7 +141,9 @@ def test_ec2_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -196,28 +171,30 @@ def test_ec2_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "PASS"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) does not have Oracle ports 1521 and 2483 open to the Internet."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -241,14 +218,14 @@ def test_ec2_default_sgs_ignoring(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring_vpc_in_use(self):
         # Create EC2 Mocked Resources
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
         subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18")
         ec2.create_network_interface(SubnetId=subnet.id)
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
         ][0]
@@ -256,8 +233,10 @@ def test_ec2_default_sgs_ignoring_vpc_in_use(self):
         default_sg["GroupName"]
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -281,4 +260,4 @@ def test_ec2_default_sgs_ignoring_vpc_in_use(self):
 
             assert len(result) == 1
             assert result[0].status == "PASS"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_postgres_5432/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_postgres_5432_test.py b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_postgres_5432/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_postgres_5432_test.py
index 0cf892954ee..53f185115ed 100644
--- a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_postgres_5432/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_postgres_5432_test.py
+++ b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_postgres_5432/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_postgres_5432_test.py
@@ -1,57 +1,28 @@
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.vpc.vpc_service import VPC
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_postgres_5432:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -80,10 +51,10 @@ def test_ec2_default_sgs(self):
             assert result[1].status == "PASS"
             assert result[2].status == "PASS"
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -104,7 +75,9 @@ def test_ec2_non_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -132,22 +105,22 @@ def test_ec2_non_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "FAIL"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) has Postgres port 5432 open to the Internet."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -168,7 +141,9 @@ def test_ec2_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -196,22 +171,22 @@ def test_ec2_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "PASS"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) does not have Postgres port 5432 open to the Internet."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_compliant_default_sg_ipv4_and_ipv6(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -237,7 +212,9 @@ def test_ec2_compliant_default_sg_ipv4_and_ipv6(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -265,28 +242,30 @@ def test_ec2_compliant_default_sg_ipv4_and_ipv6(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "PASS"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) does not have Postgres port 5432 open to the Internet."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -310,14 +289,14 @@ def test_ec2_default_sgs_ignoring(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring_vpc_in_use(self):
         # Create EC2 Mocked Resources
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
         subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18")
         ec2.create_network_interface(SubnetId=subnet.id)
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
         ][0]
@@ -325,8 +304,10 @@ def test_ec2_default_sgs_ignoring_vpc_in_use(self):
         default_sg["GroupName"]
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -350,4 +331,4 @@ def test_ec2_default_sgs_ignoring_vpc_in_use(self):
 
             assert len(result) == 1
             assert result[0].status == "PASS"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_redis_6379/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_redis_6379_test.py b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_redis_6379/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_redis_6379_test.py
index aa6c63e31b2..32e8ae91e66 100644
--- a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_redis_6379/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_redis_6379_test.py
+++ b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_redis_6379/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_redis_6379_test.py
@@ -1,7 +1,7 @@
 from unittest import mock
 
 from boto3 import client, resource
-from moto import mock_ec2
+from moto import mock_aws
 
 from prowler.providers.aws.services.vpc.vpc_service import VPC
 from tests.providers.aws.audit_info_utils import (
@@ -12,7 +12,7 @@
 
 
 class Test_ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_redis_6379:
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs(self):
         # Create EC2 Mocked Resources
         ec2_client_us_east_1 = client("ec2", region_name=AWS_REGION_US_EAST_1)
@@ -28,7 +28,10 @@ def test_ec2_default_sgs(self):
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
         current_audit_info = set_mocked_aws_audit_info(
-            audited_regions=[AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+            audited_regions=[
+                AWS_REGION_US_EAST_1,
+                AWS_REGION_EU_WEST_1,
+            ]
         )
 
         with mock.patch(
@@ -89,7 +92,7 @@ def test_ec2_default_sgs(self):
                         assert res.resource_details == sg["GroupName"]
                         assert res.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_compliant_default_sg(self):
         # Create EC2 Mocked Resources
         ec2_client_us_east_1 = client("ec2", region_name=AWS_REGION_US_EAST_1)
@@ -114,7 +117,10 @@ def test_ec2_non_compliant_default_sg(self):
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
         current_audit_info = set_mocked_aws_audit_info(
-            audited_regions=[AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+            audited_regions=[
+                AWS_REGION_US_EAST_1,
+                AWS_REGION_EU_WEST_1,
+            ]
         )
 
         with mock.patch(
@@ -155,7 +161,7 @@ def test_ec2_non_compliant_default_sg(self):
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_compliant_default_sg(self):
         # Create EC2 Mocked Resources
         ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
@@ -180,7 +186,10 @@ def test_ec2_compliant_default_sg(self):
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
         current_audit_info = set_mocked_aws_audit_info(
-            audited_regions=[AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+            audited_regions=[
+                AWS_REGION_US_EAST_1,
+                AWS_REGION_EU_WEST_1,
+            ]
         )
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -220,7 +229,7 @@ def test_ec2_compliant_default_sg(self):
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring(self):
         # Create EC2 Mocked Resources
         ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
@@ -229,7 +238,10 @@ def test_ec2_default_sgs_ignoring(self):
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
         current_audit_info = set_mocked_aws_audit_info(
-            audited_regions=[AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+            audited_regions=[
+                AWS_REGION_US_EAST_1,
+                AWS_REGION_EU_WEST_1,
+            ]
         )
         current_audit_info.ignore_unused_services = True
 
@@ -255,7 +267,7 @@ def test_ec2_default_sgs_ignoring(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring_vpc_in_use(self):
         # Create EC2 Mocked Resources
         ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
diff --git a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_sql_server_1433_1434/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_sql_server_1433_1434_test.py b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_sql_server_1433_1434/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_sql_server_1433_1434_test.py
index 9cfc14959f9..0f348420d95 100644
--- a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_sql_server_1433_1434/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_sql_server_1433_1434_test.py
+++ b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_sql_server_1433_1434/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_sql_server_1433_1434_test.py
@@ -1,57 +1,28 @@
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.vpc.vpc_service import VPC
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_sql_server_1433_1434:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -80,10 +51,10 @@ def test_ec2_default_sgs(self):
             assert result[1].status == "PASS"
             assert result[2].status == "PASS"
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -104,7 +75,9 @@ def test_ec2_non_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -132,22 +105,22 @@ def test_ec2_non_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "FAIL"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) has Microsoft SQL Server ports 1433 and 1434 open to the Internet."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -168,7 +141,9 @@ def test_ec2_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -196,28 +171,30 @@ def test_ec2_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "PASS"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) does not have Microsoft SQL Server ports 1433 and 1434 open to the Internet."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -241,14 +218,14 @@ def test_ec2_default_sgs_ignoring(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring_vpc_in_use(self):
         # Create EC2 Mocked Resources
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
         subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18")
         ec2.create_network_interface(SubnetId=subnet.id)
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
         ][0]
@@ -256,8 +233,10 @@ def test_ec2_default_sgs_ignoring_vpc_in_use(self):
         default_sg["GroupName"]
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -281,4 +260,4 @@ def test_ec2_default_sgs_ignoring_vpc_in_use(self):
 
             assert len(result) == 1
             assert result[0].status == "PASS"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_telnet_23/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_telnet_23_test.py b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_telnet_23/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_telnet_23_test.py
index d7094ce0653..fc4e6c06343 100644
--- a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_telnet_23/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_telnet_23_test.py
+++ b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_telnet_23/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_telnet_23_test.py
@@ -1,57 +1,28 @@
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.vpc.vpc_service import VPC
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_telnet_23:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -80,10 +51,10 @@ def test_ec2_default_sgs(self):
             assert result[1].status == "PASS"
             assert result[2].status == "PASS"
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -104,7 +75,9 @@ def test_ec2_non_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -132,22 +105,22 @@ def test_ec2_non_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "FAIL"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) has Telnet port 23 open to the Internet."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -168,7 +141,9 @@ def test_ec2_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -196,28 +171,30 @@ def test_ec2_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "PASS"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) does not have Telnet port 23 open to the Internet."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -241,14 +218,14 @@ def test_ec2_default_sgs_ignoring(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs_ignoring_vpc_in_use(self):
         # Create EC2 Mocked Resources
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
         subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18")
         ec2.create_network_interface(SubnetId=subnet.id)
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
         ][0]
@@ -256,8 +233,10 @@ def test_ec2_default_sgs_ignoring_vpc_in_use(self):
         default_sg["GroupName"]
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
-        current_audit_info.ignore_unused_services = True
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            ignore_unused_services=True,
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -281,4 +260,4 @@ def test_ec2_default_sgs_ignoring_vpc_in_use(self):
 
             assert len(result) == 1
             assert result[0].status == "PASS"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_wide_open_public_ipv4/ec2_securitygroup_allow_wide_open_public_ipv4_test.py b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_wide_open_public_ipv4/ec2_securitygroup_allow_wide_open_public_ipv4_test.py
index 64fd87cb57a..16dd628198d 100644
--- a/tests/providers/aws/services/ec2/ec2_securitygroup_allow_wide_open_public_ipv4/ec2_securitygroup_allow_wide_open_public_ipv4_test.py
+++ b/tests/providers/aws/services/ec2/ec2_securitygroup_allow_wide_open_public_ipv4/ec2_securitygroup_allow_wide_open_public_ipv4_test.py
@@ -1,56 +1,27 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_ec2
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_ec2_securitygroup_allow_wide_open_public_ipv4:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -74,10 +45,10 @@ def test_ec2_default_sgs(self):
             assert result[1].status == "PASS"
             assert result[2].status == "PASS"
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sg_with_RFC1918_address(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -96,7 +67,9 @@ def test_ec2_default_sg_with_RFC1918_address(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -119,22 +92,22 @@ def test_ec2_default_sg_with_RFC1918_address(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "PASS"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) has no potential wide-open non-RFC1918 address."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sg_with_non_RFC1918_address(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -153,7 +126,9 @@ def test_ec2_default_sg_with_non_RFC1918_address(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -176,14 +151,14 @@ def test_ec2_default_sg_with_non_RFC1918_address(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "FAIL"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) has potential wide-open non-RFC1918 address 82.122.0.0/16 in ingress rule."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
diff --git a/tests/providers/aws/services/ec2/ec2_securitygroup_default_restrict_traffic/ec2_securitygroup_default_restrict_traffic_test.py b/tests/providers/aws/services/ec2/ec2_securitygroup_default_restrict_traffic/ec2_securitygroup_default_restrict_traffic_test.py
index 59530d38c2a..00514eca121 100644
--- a/tests/providers/aws/services/ec2/ec2_securitygroup_default_restrict_traffic/ec2_securitygroup_default_restrict_traffic_test.py
+++ b/tests/providers/aws/services/ec2/ec2_securitygroup_default_restrict_traffic/ec2_securitygroup_default_restrict_traffic_test.py
@@ -1,51 +1,19 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_ec2
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_ec2_securitygroup_default_restrict_traffic:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_compliant_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
         ][0]
@@ -66,7 +34,7 @@ def test_ec2_compliant_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -92,17 +60,17 @@ def test_ec2_compliant_sg(self):
             )
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
             )
             assert result[0].resource_details == default_sg_name
             assert result[0].resource_tags == []
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_id == default_sg_id
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_compliant_sg_ingress_rule(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
         ][0]
@@ -129,7 +97,7 @@ def test_ec2_non_compliant_sg_ingress_rule(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -155,17 +123,17 @@ def test_ec2_non_compliant_sg_ingress_rule(self):
             )
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
             )
             assert result[0].resource_details == default_sg_name
             assert result[0].resource_tags == []
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_id == default_sg_id
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_compliant_sg_egress_rule(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
         ][0]
@@ -174,7 +142,7 @@ def test_ec2_non_compliant_sg_egress_rule(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -200,9 +168,9 @@ def test_ec2_non_compliant_sg_egress_rule(self):
             )
             assert (
                 result[0].resource_arn
-                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
             )
             assert result[0].resource_details == default_sg_name
             assert result[0].resource_tags == []
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_id == default_sg_id
diff --git a/tests/providers/aws/services/ec2/ec2_securitygroup_from_launch_wizard/ec2_securitygroup_from_launch_wizard_test.py b/tests/providers/aws/services/ec2/ec2_securitygroup_from_launch_wizard/ec2_securitygroup_from_launch_wizard_test.py
index 62df15f75fa..48dc4e13018 100644
--- a/tests/providers/aws/services/ec2/ec2_securitygroup_from_launch_wizard/ec2_securitygroup_from_launch_wizard_test.py
+++ b/tests/providers/aws/services/ec2/ec2_securitygroup_from_launch_wizard/ec2_securitygroup_from_launch_wizard_test.py
@@ -1,57 +1,29 @@
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
-AWS_REGION = "us-east-1"
 EXAMPLE_AMI_ID = "ami-12c6146b"
-AWS_ACCOUNT_NUMBER = "123456789012"
 
 
 class Test_ec2_securitygroup_from_launch_wizard:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -75,10 +47,10 @@ def test_ec2_default_sgs(self):
             assert result[1].status == "PASS"
             assert result[2].status == "PASS"
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_launch_wizard_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         sg_name = "launch-wizard-1"
         sg = ec2_client.create_security_group(
@@ -88,7 +60,9 @@ def test_ec2_launch_wizard_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -111,21 +85,21 @@ def test_ec2_launch_wizard_sg(self):
             for sg in result:
                 if sg.resource_id == sg_id:
                     assert sg.status == "FAIL"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {sg_name} ({sg_id}) was created using the EC2 Launch Wizard."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{sg_id}"
                     )
                     assert sg.resource_details == sg_name
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -133,7 +107,7 @@ def test_ec2_compliant_default_sg(self):
         default_sg_id = default_sg["GroupId"]
         default_sg_name = default_sg["GroupName"]
 
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2.create_instances(
             ImageId=EXAMPLE_AMI_ID,
             MinCount=1,
@@ -145,7 +119,9 @@ def test_ec2_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -168,14 +144,14 @@ def test_ec2_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "PASS"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) was not created using the EC2 Launch Wizard."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
diff --git a/tests/providers/aws/services/ec2/ec2_securitygroup_not_used/ec2_securitygroup_not_used_test.py b/tests/providers/aws/services/ec2/ec2_securitygroup_not_used/ec2_securitygroup_not_used_test.py
index 81b0ea5062e..24b74299c82 100644
--- a/tests/providers/aws/services/ec2/ec2_securitygroup_not_used/ec2_securitygroup_not_used_test.py
+++ b/tests/providers/aws/services/ec2/ec2_securitygroup_not_used/ec2_securitygroup_not_used_test.py
@@ -2,7 +2,7 @@
 from unittest import mock
 
 from boto3 import client, resource
-from moto import mock_ec2, mock_iam, mock_lambda
+from moto import mock_aws
 
 from tests.providers.aws.audit_info_utils import (
     AWS_ACCOUNT_NUMBER,
@@ -14,8 +14,7 @@
 
 
 class Test_ec2_securitygroup_not_used:
-    @mock_ec2
-    @mock_lambda
+    @mock_aws
     def test_ec2_default_sgs(self):
         # Create EC2 Mocked Resources
         ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
@@ -49,8 +48,7 @@ def test_ec2_default_sgs(self):
             # Default sg per region are excluded
             assert len(result) == 0
 
-    @mock_ec2
-    @mock_lambda
+    @mock_aws
     def test_ec2_unused_sg(self):
         # Create EC2 Mocked Resources
         ec2 = resource("ec2", AWS_REGION_US_EAST_1)
@@ -102,8 +100,7 @@ def test_ec2_unused_sg(self):
             assert result[0].resource_details == sg_name
             assert result[0].resource_tags == []
 
-    @mock_ec2
-    @mock_lambda
+    @mock_aws
     def test_ec2_used_default_sg(self):
         # Create EC2 Mocked Resources
         ec2 = resource("ec2", AWS_REGION_US_EAST_1)
@@ -161,9 +158,7 @@ def test_ec2_used_default_sg(self):
             assert result[0].resource_details == sg_name
             assert result[0].resource_tags == []
 
-    @mock_ec2
-    @mock_lambda
-    @mock_iam
+    @mock_aws
     def test_ec2_used_default_sg_by_lambda(self):
         # Create EC2 Mocked Resources
         ec2 = resource("ec2", AWS_REGION_US_EAST_1)
@@ -245,8 +240,7 @@ def test_ec2_used_default_sg_by_lambda(self):
             assert result[0].resource_details == sg_name
             assert result[0].resource_tags == []
 
-    @mock_ec2
-    @mock_lambda
+    @mock_aws
     def test_ec2_associated_sg(self):
         # Create EC2 Mocked Resources
         ec2 = resource("ec2", AWS_REGION_US_EAST_1)
diff --git a/tests/providers/aws/services/ec2/ec2_securitygroup_with_many_ingress_egress_rules/ec2_securitygroup_with_many_ingress_egress_rules_test.py b/tests/providers/aws/services/ec2/ec2_securitygroup_with_many_ingress_egress_rules/ec2_securitygroup_with_many_ingress_egress_rules_test.py
index cc1fa195697..513a9c27834 100644
--- a/tests/providers/aws/services/ec2/ec2_securitygroup_with_many_ingress_egress_rules/ec2_securitygroup_with_many_ingress_egress_rules_test.py
+++ b/tests/providers/aws/services/ec2/ec2_securitygroup_with_many_ingress_egress_rules/ec2_securitygroup_with_many_ingress_egress_rules_test.py
@@ -1,56 +1,27 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_ec2
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_ec2_securitygroup_with_many_ingress_egress_rules:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_ec2_default_sgs(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         current_audit_info.audit_config = {"max_security_group_rules": 50}
 
         with mock.patch(
@@ -75,10 +46,10 @@ def test_ec2_default_sgs(self):
             assert result[1].status == "PASS"
             assert result[2].status == "PASS"
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_non_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -100,7 +71,9 @@ def test_ec2_non_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         current_audit_info.audit_config = {"max_security_group_rules": 50}
 
         with mock.patch(
@@ -124,22 +97,22 @@ def test_ec2_non_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "FAIL"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) has 60 inbound rules and 1 outbound rules."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
 
-    @mock_ec2
+    @mock_aws
     def test_ec2_compliant_default_sg(self):
         # Create EC2 Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         default_sg = ec2_client.describe_security_groups(GroupNames=["default"])[
             "SecurityGroups"
@@ -160,7 +133,9 @@ def test_ec2_compliant_default_sg(self):
 
         from prowler.providers.aws.services.ec2.ec2_service import EC2
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         current_audit_info.audit_config = {"max_security_group_rules": 50}
 
         with mock.patch(
@@ -184,14 +159,14 @@ def test_ec2_compliant_default_sg(self):
             for sg in result:
                 if sg.resource_id == default_sg_id:
                     assert sg.status == "PASS"
-                    assert sg.region == AWS_REGION
+                    assert sg.region == AWS_REGION_US_EAST_1
                     assert (
                         sg.status_extended
                         == f"Security group {default_sg_name} ({default_sg_id}) has 1 inbound rules and 1 outbound rules."
                     )
                     assert (
                         sg.resource_arn
-                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
+                        == f"arn:{current_audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{current_audit_info.audited_account}:security-group/{default_sg_id}"
                     )
                     assert sg.resource_details == default_sg_name
                     assert sg.resource_tags == []
diff --git a/tests/providers/aws/services/ec2/ec2_service_test.py b/tests/providers/aws/services/ec2/ec2_service_test.py
index 53d4a986592..95f3a2d3357 100644
--- a/tests/providers/aws/services/ec2/ec2_service_test.py
+++ b/tests/providers/aws/services/ec2/ec2_service_test.py
@@ -3,95 +3,72 @@
 from base64 import b64decode
 from datetime import datetime
 
-from boto3 import client, resource, session
+from boto3 import client, resource
 from dateutil.tz import tzutc
 from freezegun import freeze_time
-from moto import mock_ec2
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.ec2.ec2_service import EC2
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "us-east-1"
 EXAMPLE_AMI_ID = "ami-12c6146b"
 MOCK_DATETIME = datetime(2023, 1, 4, 7, 27, 30, tzinfo=tzutc())
 
 
 class Test_EC2_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["eu-west-1", "us-east-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[
-                    "ec2_securitygroup_allow_ingress_from_internet_to_any_port"
-                ],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test EC2 Service
-    @mock_ec2
+    @mock_aws
     def test_service(self):
         # EC2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         ec2 = EC2(audit_info)
         assert ec2.service == "ec2"
 
     # Test EC2 Client
-    @mock_ec2
+    @mock_aws
     def test_client(self):
         # EC2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         ec2 = EC2(audit_info)
         for regional_client in ec2.regional_clients.values():
             assert regional_client.__class__.__name__ == "EC2"
 
     # Test EC2 Session
-    @mock_ec2
+    @mock_aws
     def test__get_session__(self):
         # EC2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         ec2 = EC2(audit_info)
         assert ec2.session.__class__.__name__ == "Session"
 
     # Test EC2 Session
-    @mock_ec2
+    @mock_aws
     def test_audited_account(self):
         # EC2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         ec2 = EC2(audit_info)
         assert ec2.audited_account == AWS_ACCOUNT_NUMBER
 
     # Test EC2 Describe Instances
-    @mock_ec2
+    @mock_aws
     @freeze_time(MOCK_DATETIME)
     def test__describe_instances__(self):
         # Generate EC2 Client
-        ec2_resource = resource("ec2", region_name=AWS_REGION)
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_resource = resource("ec2", region_name=AWS_REGION_US_EAST_1)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         # Get AMI image
         image_response = ec2_client.describe_images()
         image_id = image_response["Images"][0]["ImageId"]
@@ -102,13 +79,15 @@ def test__describe_instances__(self):
             ImageId=image_id,
         )
         # EC2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         ec2 = EC2(audit_info)
         assert len(ec2.instances) == 1
         assert re.match(r"i-[0-9a-z]{17}", ec2.instances[0].id)
         assert (
             ec2.instances[0].arn
-            == f"arn:{audit_info.audited_partition}:ec2:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:instance/{ec2.instances[0].id}"
+            == f"arn:{audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:instance/{ec2.instances[0].id}"
         )
         assert ec2.instances[0].type == "m1.small"
         assert ec2.instances[0].state == "running"
@@ -130,10 +109,10 @@ def test__describe_instances__(self):
         )
 
     # Test EC2 Describe Security Groups
-    @mock_ec2
+    @mock_aws
     def test__describe_security_groups__(self):
         # Generate EC2 Client
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         # Create EC2 Security Group
         sg_id = ec2_client.create_security_group(
             Description="test-description",
@@ -157,7 +136,12 @@ def test__describe_security_groups__(self):
             ],
         )
         # EC2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1],
+            expected_checks=[
+                "ec2_securitygroup_allow_ingress_from_internet_to_any_port"
+            ],
+        )
         ec2 = EC2(audit_info)
 
         assert sg_id in str(ec2.security_groups)
@@ -166,10 +150,10 @@ def test__describe_security_groups__(self):
                 assert security_group.name == "test-security-group"
                 assert (
                     security_group.arn
-                    == f"arn:{audit_info.audited_partition}:ec2:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:security-group/{security_group.id}"
+                    == f"arn:{audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:security-group/{security_group.id}"
                 )
                 assert re.match(r"sg-[0-9a-z]{17}", security_group.id)
-                assert security_group.region == AWS_REGION
+                assert security_group.region == AWS_REGION_US_EAST_1
                 assert security_group.network_interfaces == []
                 assert security_group.ingress_rules == [
                     {
@@ -195,11 +179,11 @@ def test__describe_security_groups__(self):
                 ]
 
     # Test EC2 Describe Nacls
-    @mock_ec2
+    @mock_aws
     def test__describe_network_acls__(self):
         # Generate EC2 Client
-        ec2_client = client("ec2", region_name=AWS_REGION)
-        ec2_resource = resource("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
+        ec2_resource = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         # Create EC2 VPC and SG
         vpc_id = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"]["VpcId"]
         nacl_id = ec2_resource.create_network_acl(
@@ -214,7 +198,9 @@ def test__describe_network_acls__(self):
             ],
         ).id
         # EC2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         ec2 = EC2(audit_info)
 
         assert nacl_id in str(ec2.network_acls)
@@ -223,7 +209,7 @@ def test__describe_network_acls__(self):
                 assert re.match(r"acl-[0-9a-z]{8}", acl.id)
                 assert (
                     acl.arn
-                    == f"arn:{audit_info.audited_partition}:ec2:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:network-acl/{acl.id}"
+                    == f"arn:{audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:network-acl/{acl.id}"
                 )
                 assert acl.entries == []
                 assert acl.tags == [
@@ -231,11 +217,11 @@ def test__describe_network_acls__(self):
                 ]
 
     # Test EC2 Describe Snapshots
-    @mock_ec2
+    @mock_aws
     def test__describe_snapshots__(self):
         # Generate EC2 Client
-        ec2_client = client("ec2", region_name=AWS_REGION)
-        ec2_resource = resource("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
+        ec2_resource = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         # Create EC2 Volume and Snapshot
         volume_id = ec2_resource.create_volume(
             AvailabilityZone="us-east-1a",
@@ -253,11 +239,11 @@ def test__describe_snapshots__(self):
                 },
             ],
         )["SnapshotId"]
-        snapshot_arn = (
-            f"arn:aws:ec2:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:snapshot/{snapshot_id}"
-        )
+        snapshot_arn = f"arn:aws:ec2:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:snapshot/{snapshot_id}"
         # EC2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         ec2 = EC2(audit_info)
 
         assert snapshot_id in str(ec2.snapshots)
@@ -267,7 +253,7 @@ def test__describe_snapshots__(self):
             if snapshot.id == snapshot_id:
                 assert re.match(r"snap-[0-9a-z]{8}", snapshot.id)
                 assert snapshot.arn == snapshot_arn
-                assert snapshot.region == AWS_REGION
+                assert snapshot.region == AWS_REGION_US_EAST_1
                 assert snapshot.tags == [
                     {"Key": "test", "Value": "test"},
                 ]
@@ -275,11 +261,11 @@ def test__describe_snapshots__(self):
                 assert not snapshot.public
 
     # Test EC2 Get Snapshot Public
-    @mock_ec2
+    @mock_aws
     def test__get_snapshot_public__(self):
         # Generate EC2 Client
-        ec2_client = client("ec2", region_name=AWS_REGION)
-        ec2_resource = resource("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
+        ec2_resource = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         # Create EC2 Volume and Snapshot
         volume_id = ec2_resource.create_volume(
             AvailabilityZone="us-east-1a",
@@ -298,7 +284,9 @@ def test__get_snapshot_public__(self):
             SnapshotId=snapshot_id,
         )
         # EC2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         ec2 = EC2(audit_info)
 
         assert snapshot_id in str(ec2.snapshots)
@@ -307,17 +295,17 @@ def test__get_snapshot_public__(self):
                 assert re.match(r"snap-[0-9a-z]{8}", snapshot.id)
                 assert (
                     snapshot.arn
-                    == f"arn:{audit_info.audited_partition}:ec2:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:snapshot/{snapshot.id}"
+                    == f"arn:{audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:snapshot/{snapshot.id}"
                 )
-                assert snapshot.region == AWS_REGION
+                assert snapshot.region == AWS_REGION_US_EAST_1
                 assert not snapshot.encrypted
                 assert snapshot.public
 
     # Test EC2 Instance User Data
-    @mock_ec2
+    @mock_aws
     def test__get_instance_user_data__(self):
         user_data = "This is some user_data"
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2.create_instances(
             ImageId=EXAMPLE_AMI_ID,
             MinCount=1,
@@ -325,30 +313,34 @@ def test__get_instance_user_data__(self):
             UserData="This is some user_data",
         )
         # EC2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         ec2 = EC2(audit_info)
         assert user_data == b64decode(ec2.instances[0].user_data).decode("utf-8")
 
     # Test EC2 Get EBS Encryption by default
-    @mock_ec2
+    @mock_aws
     def test__get_ebs_encryption_by_default__(self):
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.enable_ebs_encryption_by_default()
         # EC2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         ec2 = EC2(audit_info)
 
         # One result per region
         assert len(ec2.ebs_encryption_by_default) == 2
         for result in ec2.ebs_encryption_by_default:
-            if result.region == AWS_REGION:
+            if result.region == AWS_REGION_US_EAST_1:
                 assert result.status
 
     # Test EC2 Describe Addresses
-    @mock_ec2
+    @mock_aws
     def test__describe_addresses__(self):
         # Generate EC2 Client
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         allocation_id = ec2_client.allocate_address(
             Domain="vpc",
             Address="127.38.43.222",
@@ -362,23 +354,25 @@ def test__describe_addresses__(self):
             ],
         )["AllocationId"]
         # EC2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         ec2 = EC2(audit_info)
         assert "127.38.43.222" in str(ec2.elastic_ips)
         assert (
             ec2.elastic_ips[0].arn
-            == f"arn:aws:ec2:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:eip-allocation/{allocation_id}"
+            == f"arn:aws:ec2:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:eip-allocation/{allocation_id}"
         )
         assert ec2.elastic_ips[0].tags == [
             {"Key": "test", "Value": "test"},
         ]
 
     # Test EC2 Describe Network Interfaces
-    @mock_ec2
+    @mock_aws
     def test__describe_sg_network_interfaces__(self):
         # Generate EC2 Client
-        ec2_client = client("ec2", region_name=AWS_REGION)
-        ec2_resource = resource("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
+        ec2_resource = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         # Create VPC, Subnet, SecurityGroup and Network Interface
         vpc = ec2_resource.create_vpc(CidrBlock="10.0.0.0/16")
         subnet = ec2_resource.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18")
@@ -391,7 +385,9 @@ def test__describe_sg_network_interfaces__(self):
         )
 
         # EC2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         ec2 = EC2(audit_info)
 
         assert sg.id in str(ec2.security_groups)
@@ -400,10 +396,10 @@ def test__describe_sg_network_interfaces__(self):
                 assert security_group.name == "test-securitygroup"
                 assert (
                     security_group.arn
-                    == f"arn:{audit_info.audited_partition}:ec2:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:security-group/{security_group.id}"
+                    == f"arn:{audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:security-group/{security_group.id}"
                 )
                 assert re.match(r"sg-[0-9a-z]{17}", security_group.id)
-                assert security_group.region == AWS_REGION
+                assert security_group.region == AWS_REGION_US_EAST_1
                 assert eni_id in security_group.network_interfaces
                 assert security_group.ingress_rules == []
                 assert security_group.egress_rules == [
@@ -416,11 +412,11 @@ def test__describe_sg_network_interfaces__(self):
                     }
                 ]
 
-    @mock_ec2
+    @mock_aws
     def test__describe_public_network_interfaces__(self):
         # Generate EC2 Client
-        ec2_client = client("ec2", region_name=AWS_REGION)
-        ec2_resource = resource("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
+        ec2_resource = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         # Create VPC, Subnet, SecurityGroup and Network Interface
         vpc = ec2_resource.create_vpc(CidrBlock="10.0.0.0/16")
         subnet = ec2_resource.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18")
@@ -442,7 +438,9 @@ def test__describe_public_network_interfaces__(self):
         )
 
         # EC2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         ec2 = EC2(audit_info)
 
         assert len(ec2.network_interfaces) == 1
@@ -451,17 +449,17 @@ def test__describe_public_network_interfaces__(self):
         assert ec2.network_interfaces[0].type == eni.interface_type
         assert ec2.network_interfaces[0].subnet_id == subnet.id
         assert ec2.network_interfaces[0].vpc_id == vpc.id
-        assert ec2.network_interfaces[0].region == AWS_REGION
+        assert ec2.network_interfaces[0].region == AWS_REGION_US_EAST_1
         assert ec2.network_interfaces[0].tags == [
             {"Key": "string", "Value": "string"},
         ]
 
     # Test EC2 Describe Images
-    @mock_ec2
+    @mock_aws
     def test__describe_images__(self):
         # Generate EC2 Client
-        ec2_client = client("ec2", region_name=AWS_REGION)
-        ec2_resource = resource("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
+        ec2_resource = resource("ec2", region_name=AWS_REGION_US_EAST_1)
         # Create AMI
         tag_specifications = [
             {
@@ -486,7 +484,9 @@ def test__describe_images__(self):
         )["ImageId"]
 
         # EC2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         ec2 = EC2(audit_info)
 
         assert len(ec2.images) == 1
@@ -494,10 +494,10 @@ def test__describe_images__(self):
         assert re.match(r"ami-[0-9a-z]{8}", ec2.images[0].id)
         assert (
             ec2.images[0].arn
-            == f"arn:{audit_info.audited_partition}:ec2:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:image/{ec2.images[0].id}"
+            == f"arn:{audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:image/{ec2.images[0].id}"
         )
         assert not ec2.images[0].public
-        assert ec2.images[0].region == AWS_REGION
+        assert ec2.images[0].region == AWS_REGION_US_EAST_1
         assert ec2.images[0].tags == [
             {
                 "Key": "Base_AMI_Name",
@@ -507,13 +507,13 @@ def test__describe_images__(self):
         ]
 
     # Test EC2 Describe Volumes
-    @mock_ec2
+    @mock_aws
     def test__describe_volumes__(self):
         # Generate EC2 Client
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         # Create Volume
         volume_id = ec2_client.create_volume(
-            AvailabilityZone=AWS_REGION,
+            AvailabilityZone=AWS_REGION_US_EAST_1,
             Encrypted=False,
             Size=40,
             TagSpecifications=[
@@ -527,7 +527,9 @@ def test__describe_volumes__(self):
         )["VolumeId"]
 
         # EC2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         ec2 = EC2(audit_info)
 
         assert len(ec2.volumes) == 1
@@ -535,9 +537,9 @@ def test__describe_volumes__(self):
         assert re.match(r"vol-[0-9a-z]{8}", ec2.volumes[0].id)
         assert (
             ec2.volumes[0].arn
-            == f"arn:{audit_info.audited_partition}:ec2:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:volume/{ec2.volumes[0].id}"
+            == f"arn:{audit_info.audited_partition}:ec2:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:volume/{ec2.volumes[0].id}"
         )
-        assert ec2.volumes[0].region == AWS_REGION
+        assert ec2.volumes[0].region == AWS_REGION_US_EAST_1
         assert not ec2.volumes[0].encrypted
         assert ec2.volumes[0].tags == [
             {"Key": "test", "Value": "test"},
diff --git a/tests/providers/aws/services/ecr/ecr_registry_scan_images_on_push_enabled/ecr_registry_scan_images_on_push_enabled_test.py b/tests/providers/aws/services/ecr/ecr_registry_scan_images_on_push_enabled/ecr_registry_scan_images_on_push_enabled_test.py
index a04412b7ccc..8220f3d41ca 100644
--- a/tests/providers/aws/services/ecr/ecr_registry_scan_images_on_push_enabled/ecr_registry_scan_images_on_push_enabled_test.py
+++ b/tests/providers/aws/services/ecr/ecr_registry_scan_images_on_push_enabled/ecr_registry_scan_images_on_push_enabled_test.py
@@ -1,19 +1,17 @@
 from re import search
 from unittest import mock
 
-from boto3 import session
-
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.ecr.ecr_service import (
     Registry,
     Repository,
     ScanningRule,
 )
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    set_mocked_aws_audit_info,
+)
 
-# Mock Test Region
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
 repository_name = "test_repo"
 repository_arn = (
     f"arn:aws:ecr:eu-west-1:{AWS_ACCOUNT_NUMBER}:repository/{repository_name}"
@@ -21,43 +19,13 @@
 
 
 class Test_ecr_registry_scan_images_on_push_enabled:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=None,
-            audited_account_arn=None,
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     def test_no_registries(self):
         ecr_client = mock.MagicMock
         ecr_client.registries = {}
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.ecr.ecr_registry_scan_images_on_push_enabled.ecr_registry_scan_images_on_push_enabled.ecr_client",
             ecr_client,
@@ -73,9 +41,9 @@ def test_no_registries(self):
     def test_registry_no_repositories(self):
         ecr_client = mock.MagicMock
         ecr_client.registries = {}
-        ecr_client.registries[AWS_REGION] = Registry(
+        ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
             id=AWS_ACCOUNT_NUMBER,
-            region=AWS_REGION,
+            region=AWS_REGION_EU_WEST_1,
             scan_type="BASIC",
             repositories=[],
             rules=[],
@@ -83,7 +51,7 @@ def test_registry_no_repositories(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.ecr.ecr_registry_scan_images_on_push_enabled.ecr_registry_scan_images_on_push_enabled.ecr_client",
             ecr_client,
@@ -99,15 +67,15 @@ def test_registry_no_repositories(self):
     def test_registry_scan_on_push_enabled(self):
         ecr_client = mock.MagicMock
         ecr_client.registries = {}
-        ecr_client.registries[AWS_REGION] = Registry(
+        ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
             id=AWS_ACCOUNT_NUMBER,
-            region=AWS_REGION,
+            region=AWS_REGION_EU_WEST_1,
             scan_type="BASIC",
             repositories=[
                 Repository(
                     name=repository_name,
                     arn=repository_arn,
-                    region=AWS_REGION,
+                    region=AWS_REGION_EU_WEST_1,
                     scan_on_push=True,
                     policy="",
                     images_details=None,
@@ -124,7 +92,7 @@ def test_registry_scan_on_push_enabled(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.ecr.ecr_registry_scan_images_on_push_enabled.ecr_registry_scan_images_on_push_enabled.ecr_client",
             ecr_client,
@@ -139,20 +107,20 @@ def test_registry_scan_on_push_enabled(self):
             assert result[0].status == "PASS"
             assert search("with scan on push", result[0].status_extended)
             assert result[0].resource_id == AWS_ACCOUNT_NUMBER
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
     def test_scan_on_push_enabled_with_filters(self):
         ecr_client = mock.MagicMock
         ecr_client.registries = {}
-        ecr_client.registries[AWS_REGION] = Registry(
+        ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
             id=AWS_ACCOUNT_NUMBER,
-            region=AWS_REGION,
+            region=AWS_REGION_EU_WEST_1,
             scan_type="BASIC",
             repositories=[
                 Repository(
                     name=repository_name,
                     arn=repository_arn,
-                    region=AWS_REGION,
+                    region=AWS_REGION_EU_WEST_1,
                     scan_on_push=True,
                     policy="",
                     images_details=None,
@@ -169,7 +137,7 @@ def test_scan_on_push_enabled_with_filters(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.ecr.ecr_registry_scan_images_on_push_enabled.ecr_registry_scan_images_on_push_enabled.ecr_client",
             ecr_client,
@@ -187,20 +155,20 @@ def test_scan_on_push_enabled_with_filters(self):
                 result[0].status_extended,
             )
             assert result[0].resource_id == AWS_ACCOUNT_NUMBER
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
     def test_scan_on_push_disabled(self):
         ecr_client = mock.MagicMock
         ecr_client.registries = {}
-        ecr_client.registries[AWS_REGION] = Registry(
+        ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
             id=AWS_ACCOUNT_NUMBER,
-            region=AWS_REGION,
+            region=AWS_REGION_EU_WEST_1,
             scan_type="BASIC",
             repositories=[
                 Repository(
                     name=repository_name,
                     arn=repository_arn,
-                    region=AWS_REGION,
+                    region=AWS_REGION_EU_WEST_1,
                     scan_on_push=True,
                     policy="",
                     images_details=None,
@@ -212,7 +180,7 @@ def test_scan_on_push_disabled(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.ecr.ecr_registry_scan_images_on_push_enabled.ecr_registry_scan_images_on_push_enabled.ecr_client",
             ecr_client,
@@ -227,4 +195,4 @@ def test_scan_on_push_disabled(self):
             assert result[0].status == "FAIL"
             assert search("scanning without scan on push", result[0].status_extended)
             assert result[0].resource_id == AWS_ACCOUNT_NUMBER
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
diff --git a/tests/providers/aws/services/ecr/ecr_repositories_lifecycle_policy_enabled/ecr_repositories_lifecycle_policy_enabled_test.py b/tests/providers/aws/services/ecr/ecr_repositories_lifecycle_policy_enabled/ecr_repositories_lifecycle_policy_enabled_test.py
index 15270784865..779f1778448 100644
--- a/tests/providers/aws/services/ecr/ecr_repositories_lifecycle_policy_enabled/ecr_repositories_lifecycle_policy_enabled_test.py
+++ b/tests/providers/aws/services/ecr/ecr_repositories_lifecycle_policy_enabled/ecr_repositories_lifecycle_policy_enabled_test.py
@@ -1,14 +1,12 @@
 from unittest import mock
 
-from boto3 import session
-
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.ecr.ecr_service import Registry, Repository
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    set_mocked_aws_audit_info,
+)
 
-# Mock Test Region
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
 repository_name = "test_repo"
 repository_arn = (
     f"arn:aws:ecr:eu-west-1:{AWS_ACCOUNT_NUMBER}:repository/{repository_name}"
@@ -28,35 +26,6 @@
 
 class Test_ecr_repositories_lifecycle_policy_enabled:
     # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=None,
-            audited_account_arn=None,
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
 
     def test_no_registries(self):
         ecr_client = mock.MagicMock
@@ -64,7 +33,7 @@ def test_no_registries(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.ecr.ecr_repositories_lifecycle_policy_enabled.ecr_repositories_lifecycle_policy_enabled.ecr_client",
             ecr_client,
@@ -80,9 +49,9 @@ def test_no_registries(self):
     def test_registry_no_repositories(self):
         ecr_client = mock.MagicMock
         ecr_client.registries = {}
-        ecr_client.registries[AWS_REGION] = Registry(
+        ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
             id=AWS_ACCOUNT_NUMBER,
-            region=AWS_REGION,
+            region=AWS_REGION_EU_WEST_1,
             scan_type="BASIC",
             repositories=[],
             rules=[],
@@ -90,7 +59,7 @@ def test_registry_no_repositories(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.ecr.ecr_repositories_lifecycle_policy_enabled.ecr_repositories_lifecycle_policy_enabled.ecr_client",
             ecr_client,
@@ -106,16 +75,16 @@ def test_registry_no_repositories(self):
     def test_lifecycle_policy(self):
         ecr_client = mock.MagicMock
         ecr_client.registries = {}
-        ecr_client.registries[AWS_REGION] = Registry(
+        ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
             id=AWS_ACCOUNT_NUMBER,
-            region=AWS_REGION,
+            region=AWS_REGION_EU_WEST_1,
             scan_type="BASIC",
             rules=[],
             repositories=[
                 Repository(
                     name=repository_name,
                     arn=repository_arn,
-                    region=AWS_REGION,
+                    region=AWS_REGION_EU_WEST_1,
                     scan_on_push=True,
                     policy=repo_policy_public,
                     images_details=None,
@@ -126,7 +95,7 @@ def test_lifecycle_policy(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.ecr.ecr_repositories_lifecycle_policy_enabled.ecr_repositories_lifecycle_policy_enabled.ecr_client",
             ecr_client,
@@ -150,16 +119,16 @@ def test_lifecycle_policy(self):
     def test_no_lifecycle_policy(self):
         ecr_client = mock.MagicMock
         ecr_client.registries = {}
-        ecr_client.registries[AWS_REGION] = Registry(
+        ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
             id=AWS_ACCOUNT_NUMBER,
-            region=AWS_REGION,
+            region=AWS_REGION_EU_WEST_1,
             scan_type="BASIC",
             rules=[],
             repositories=[
                 Repository(
                     name=repository_name,
                     arn=repository_arn,
-                    region=AWS_REGION,
+                    region=AWS_REGION_EU_WEST_1,
                     scan_on_push=False,
                     policy=repo_policy_public,
                     images_details=None,
@@ -170,7 +139,7 @@ def test_no_lifecycle_policy(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.ecr.ecr_repositories_lifecycle_policy_enabled.ecr_repositories_lifecycle_policy_enabled.ecr_client",
             ecr_client,
diff --git a/tests/providers/aws/services/ecr/ecr_repositories_not_publicly_accessible/ecr_repositories_not_publicly_accessible_test.py b/tests/providers/aws/services/ecr/ecr_repositories_not_publicly_accessible/ecr_repositories_not_publicly_accessible_test.py
index d6e0310e8cd..e581408fb86 100644
--- a/tests/providers/aws/services/ecr/ecr_repositories_not_publicly_accessible/ecr_repositories_not_publicly_accessible_test.py
+++ b/tests/providers/aws/services/ecr/ecr_repositories_not_publicly_accessible/ecr_repositories_not_publicly_accessible_test.py
@@ -1,14 +1,12 @@
 from unittest import mock
 
-from boto3 import session
-
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.ecr.ecr_service import Registry, Repository
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    set_mocked_aws_audit_info,
+)
 
-# Mock Test Region
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
 repository_name = "test_repo"
 repository_arn = (
     f"arn:aws:ecr:eu-west-1:{AWS_ACCOUNT_NUMBER}:repository/{repository_name}"
@@ -40,35 +38,6 @@
 
 class Test_ecr_repositories_not_publicly_accessible:
     # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=None,
-            audited_account_arn=None,
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
 
     def test_no_registries(self):
         ecr_client = mock.MagicMock
@@ -76,7 +45,7 @@ def test_no_registries(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.ecr.ecr_repositories_not_publicly_accessible.ecr_repositories_not_publicly_accessible.ecr_client",
             ecr_client,
@@ -92,9 +61,9 @@ def test_no_registries(self):
     def test_registry_no_repositories(self):
         ecr_client = mock.MagicMock
         ecr_client.registries = {}
-        ecr_client.registries[AWS_REGION] = Registry(
+        ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
             id=AWS_ACCOUNT_NUMBER,
-            region=AWS_REGION,
+            region=AWS_REGION_EU_WEST_1,
             scan_type="BASIC",
             repositories=[],
             rules=[],
@@ -102,7 +71,7 @@ def test_registry_no_repositories(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.ecr.ecr_repositories_not_publicly_accessible.ecr_repositories_not_publicly_accessible.ecr_client",
             ecr_client,
@@ -118,15 +87,15 @@ def test_registry_no_repositories(self):
     def test_repository_not_public(self):
         ecr_client = mock.MagicMock
         ecr_client.registries = {}
-        ecr_client.registries[AWS_REGION] = Registry(
+        ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
             id=AWS_ACCOUNT_NUMBER,
-            region=AWS_REGION,
+            region=AWS_REGION_EU_WEST_1,
             scan_type="BASIC",
             repositories=[
                 Repository(
                     name=repository_name,
                     arn=repository_arn,
-                    region=AWS_REGION,
+                    region=AWS_REGION_EU_WEST_1,
                     scan_on_push=True,
                     policy=repo_policy_not_public,
                     images_details=None,
@@ -138,7 +107,7 @@ def test_repository_not_public(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.ecr.ecr_repositories_not_publicly_accessible.ecr_repositories_not_publicly_accessible.ecr_client",
             ecr_client,
@@ -161,15 +130,15 @@ def test_repository_not_public(self):
     def test_repository_public(self):
         ecr_client = mock.MagicMock
         ecr_client.registries = {}
-        ecr_client.registries[AWS_REGION] = Registry(
+        ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
             id=AWS_ACCOUNT_NUMBER,
-            region=AWS_REGION,
+            region=AWS_REGION_EU_WEST_1,
             scan_type="BASIC",
             repositories=[
                 Repository(
                     name=repository_name,
                     arn=repository_arn,
-                    region=AWS_REGION,
+                    region=AWS_REGION_EU_WEST_1,
                     scan_on_push=True,
                     policy=repo_policy_public,
                     images_details=None,
@@ -181,7 +150,7 @@ def test_repository_public(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.ecr.ecr_repositories_not_publicly_accessible.ecr_repositories_not_publicly_accessible.ecr_client",
             ecr_client,
diff --git a/tests/providers/aws/services/ecr/ecr_repositories_scan_images_on_push_enabled/ecr_repositories_scan_images_on_push_enabled_test.py b/tests/providers/aws/services/ecr/ecr_repositories_scan_images_on_push_enabled/ecr_repositories_scan_images_on_push_enabled_test.py
index 16a7cb2ac0e..3b26963eb8b 100644
--- a/tests/providers/aws/services/ecr/ecr_repositories_scan_images_on_push_enabled/ecr_repositories_scan_images_on_push_enabled_test.py
+++ b/tests/providers/aws/services/ecr/ecr_repositories_scan_images_on_push_enabled/ecr_repositories_scan_images_on_push_enabled_test.py
@@ -1,14 +1,12 @@
 from unittest import mock
 
-from boto3 import session
-
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.ecr.ecr_service import Registry, Repository
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    set_mocked_aws_audit_info,
+)
 
-# Mock Test Region
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
 repository_name = "test_repo"
 repository_arn = (
     f"arn:aws:ecr:eu-west-1:{AWS_ACCOUNT_NUMBER}:repository/{repository_name}"
@@ -28,35 +26,6 @@
 
 class Test_ecr_repositories_scan_images_on_push_enabled:
     # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=None,
-            audited_account_arn=None,
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
 
     def test_no_registries(self):
         ecr_client = mock.MagicMock
@@ -64,7 +33,7 @@ def test_no_registries(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.ecr.ecr_repositories_scan_images_on_push_enabled.ecr_repositories_scan_images_on_push_enabled.ecr_client",
             ecr_client,
@@ -80,9 +49,9 @@ def test_no_registries(self):
     def test_registry_no_repositories(self):
         ecr_client = mock.MagicMock
         ecr_client.registries = {}
-        ecr_client.registries[AWS_REGION] = Registry(
+        ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
             id=AWS_ACCOUNT_NUMBER,
-            region=AWS_REGION,
+            region=AWS_REGION_EU_WEST_1,
             scan_type="BASIC",
             repositories=[],
             rules=[],
@@ -90,7 +59,7 @@ def test_registry_no_repositories(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.ecr.ecr_repositories_scan_images_on_push_enabled.ecr_repositories_scan_images_on_push_enabled.ecr_client",
             ecr_client,
@@ -106,15 +75,15 @@ def test_registry_no_repositories(self):
     def test_scan_on_push_disabled(self):
         ecr_client = mock.MagicMock
         ecr_client.registries = {}
-        ecr_client.registries[AWS_REGION] = Registry(
+        ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
             id=AWS_ACCOUNT_NUMBER,
-            region=AWS_REGION,
+            region=AWS_REGION_EU_WEST_1,
             scan_type="BASIC",
             repositories=[
                 Repository(
                     name=repository_name,
                     arn=repository_arn,
-                    region=AWS_REGION,
+                    region=AWS_REGION_EU_WEST_1,
                     scan_on_push=True,
                     policy=repo_policy_public,
                     images_details=None,
@@ -126,7 +95,7 @@ def test_scan_on_push_disabled(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.ecr.ecr_repositories_scan_images_on_push_enabled.ecr_repositories_scan_images_on_push_enabled.ecr_client",
             ecr_client,
@@ -149,15 +118,15 @@ def test_scan_on_push_disabled(self):
     def test_scan_on_push_enabled(self):
         ecr_client = mock.MagicMock
         ecr_client.registries = {}
-        ecr_client.registries[AWS_REGION] = Registry(
+        ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
             id=AWS_ACCOUNT_NUMBER,
-            region=AWS_REGION,
+            region=AWS_REGION_EU_WEST_1,
             scan_type="BASIC",
             repositories=[
                 Repository(
                     name=repository_name,
                     arn=repository_arn,
-                    region=AWS_REGION,
+                    region=AWS_REGION_EU_WEST_1,
                     scan_on_push=False,
                     policy=repo_policy_public,
                     images_details=None,
@@ -169,7 +138,7 @@ def test_scan_on_push_enabled(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.ecr.ecr_repositories_scan_images_on_push_enabled.ecr_repositories_scan_images_on_push_enabled.ecr_client",
             ecr_client,
diff --git a/tests/providers/aws/services/ecr/ecr_repositories_scan_vulnerabilities_in_latest_image/ecr_repositories_scan_vulnerabilities_in_latest_image_test.py b/tests/providers/aws/services/ecr/ecr_repositories_scan_vulnerabilities_in_latest_image/ecr_repositories_scan_vulnerabilities_in_latest_image_test.py
index 5fc626831f8..a6bd756c96f 100644
--- a/tests/providers/aws/services/ecr/ecr_repositories_scan_vulnerabilities_in_latest_image/ecr_repositories_scan_vulnerabilities_in_latest_image_test.py
+++ b/tests/providers/aws/services/ecr/ecr_repositories_scan_vulnerabilities_in_latest_image/ecr_repositories_scan_vulnerabilities_in_latest_image_test.py
@@ -1,20 +1,18 @@
 from datetime import datetime
 from unittest import mock
 
-from boto3 import session
-
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.ecr.ecr_service import (
     FindingSeverityCounts,
     ImageDetails,
     Registry,
     Repository,
 )
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    set_mocked_aws_audit_info,
+)
 
-# Mock Test Region
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
 repository_name = "test_repo"
 repository_arn = (
     f"arn:aws:ecr:eu-west-1:{AWS_ACCOUNT_NUMBER}:repository/{repository_name}"
@@ -35,35 +33,6 @@
 
 class Test_ecr_repositories_scan_vulnerabilities_in_latest_image:
     # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=None,
-            audited_account_arn=None,
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
 
     def test_no_registries(self):
         ecr_client = mock.MagicMock
@@ -72,7 +41,7 @@ def test_no_registries(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.ecr.ecr_repositories_scan_vulnerabilities_in_latest_image.ecr_repositories_scan_vulnerabilities_in_latest_image.ecr_client",
             ecr_client,
@@ -88,9 +57,9 @@ def test_no_registries(self):
     def test_registry_no_repositories(self):
         ecr_client = mock.MagicMock
         ecr_client.registries = {}
-        ecr_client.registries[AWS_REGION] = Registry(
+        ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
             id=AWS_ACCOUNT_NUMBER,
-            region=AWS_REGION,
+            region=AWS_REGION_EU_WEST_1,
             scan_type="BASIC",
             repositories=[],
             rules=[],
@@ -99,7 +68,7 @@ def test_registry_no_repositories(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.ecr.ecr_repositories_scan_vulnerabilities_in_latest_image.ecr_repositories_scan_vulnerabilities_in_latest_image.ecr_client",
             ecr_client,
@@ -115,15 +84,15 @@ def test_registry_no_repositories(self):
     def test_empty_repository(self):
         ecr_client = mock.MagicMock
         ecr_client.registries = {}
-        ecr_client.registries[AWS_REGION] = Registry(
+        ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
             id=AWS_ACCOUNT_NUMBER,
-            region=AWS_REGION,
+            region=AWS_REGION_EU_WEST_1,
             scan_type="BASIC",
             repositories=[
                 Repository(
                     name=repository_name,
                     arn=repository_arn,
-                    region=AWS_REGION,
+                    region=AWS_REGION_EU_WEST_1,
                     scan_on_push=True,
                     policy=repo_policy_public,
                     images_details=[],
@@ -136,7 +105,7 @@ def test_empty_repository(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.ecr.ecr_repositories_scan_vulnerabilities_in_latest_image.ecr_repositories_scan_vulnerabilities_in_latest_image.ecr_client",
             ecr_client,
@@ -152,15 +121,15 @@ def test_empty_repository(self):
     def test_image_scaned_without_findings(self):
         ecr_client = mock.MagicMock
         ecr_client.registries = {}
-        ecr_client.registries[AWS_REGION] = Registry(
+        ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
             id=AWS_ACCOUNT_NUMBER,
-            region=AWS_REGION,
+            region=AWS_REGION_EU_WEST_1,
             scan_type="BASIC",
             repositories=[
                 Repository(
                     name=repository_name,
                     arn=repository_arn,
-                    region=AWS_REGION,
+                    region=AWS_REGION_EU_WEST_1,
                     scan_on_push=True,
                     policy=repo_policy_public,
                     images_details=[
@@ -183,7 +152,7 @@ def test_image_scaned_without_findings(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.ecr.ecr_repositories_scan_vulnerabilities_in_latest_image.ecr_repositories_scan_vulnerabilities_in_latest_image.ecr_client",
             ecr_client,
@@ -206,15 +175,15 @@ def test_image_scaned_without_findings(self):
     def test_image_scanned_with_findings_default_severity_MEDIUM(self):
         ecr_client = mock.MagicMock
         ecr_client.registries = {}
-        ecr_client.registries[AWS_REGION] = Registry(
+        ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
             id=AWS_ACCOUNT_NUMBER,
-            region=AWS_REGION,
+            region=AWS_REGION_EU_WEST_1,
             scan_type="BASIC",
             repositories=[
                 Repository(
                     name=repository_name,
                     arn=repository_arn,
-                    region=AWS_REGION,
+                    region=AWS_REGION_EU_WEST_1,
                     scan_on_push=True,
                     policy=repo_policy_public,
                     images_details=[
@@ -241,7 +210,7 @@ def test_image_scanned_with_findings_default_severity_MEDIUM(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.ecr.ecr_repositories_scan_vulnerabilities_in_latest_image.ecr_repositories_scan_vulnerabilities_in_latest_image.ecr_client",
             ecr_client,
@@ -264,15 +233,15 @@ def test_image_scanned_with_findings_default_severity_MEDIUM(self):
     def test_image_scanned_with_findings_default_severity_HIGH(self):
         ecr_client = mock.MagicMock
         ecr_client.registries = {}
-        ecr_client.registries[AWS_REGION] = Registry(
+        ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
             id=AWS_ACCOUNT_NUMBER,
-            region=AWS_REGION,
+            region=AWS_REGION_EU_WEST_1,
             scan_type="BASIC",
             repositories=[
                 Repository(
                     name=repository_name,
                     arn=repository_arn,
-                    region=AWS_REGION,
+                    region=AWS_REGION_EU_WEST_1,
                     scan_on_push=True,
                     policy=repo_policy_public,
                     images_details=[
@@ -299,7 +268,7 @@ def test_image_scanned_with_findings_default_severity_HIGH(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.ecr.ecr_repositories_scan_vulnerabilities_in_latest_image.ecr_repositories_scan_vulnerabilities_in_latest_image.ecr_client",
             ecr_client,
@@ -322,15 +291,15 @@ def test_image_scanned_with_findings_default_severity_HIGH(self):
     def test_image_scanned_with_findings_default_severity_CRITICAL(self):
         ecr_client = mock.MagicMock
         ecr_client.registries = {}
-        ecr_client.registries[AWS_REGION] = Registry(
+        ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
             id=AWS_ACCOUNT_NUMBER,
-            region=AWS_REGION,
+            region=AWS_REGION_EU_WEST_1,
             scan_type="BASIC",
             repositories=[
                 Repository(
                     name=repository_name,
                     arn=repository_arn,
-                    region=AWS_REGION,
+                    region=AWS_REGION_EU_WEST_1,
                     scan_on_push=True,
                     policy=repo_policy_public,
                     images_details=[
@@ -357,7 +326,7 @@ def test_image_scanned_with_findings_default_severity_CRITICAL(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.ecr.ecr_repositories_scan_vulnerabilities_in_latest_image.ecr_repositories_scan_vulnerabilities_in_latest_image.ecr_client",
             ecr_client,
@@ -380,15 +349,15 @@ def test_image_scanned_with_findings_default_severity_CRITICAL(self):
     def test_image_scanned_without_CRITICAL_findings_default_severity_CRITICAL(self):
         ecr_client = mock.MagicMock
         ecr_client.registries = {}
-        ecr_client.registries[AWS_REGION] = Registry(
+        ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
             id=AWS_ACCOUNT_NUMBER,
-            region=AWS_REGION,
+            region=AWS_REGION_EU_WEST_1,
             scan_type="BASIC",
             repositories=[
                 Repository(
                     name=repository_name,
                     arn=repository_arn,
-                    region=AWS_REGION,
+                    region=AWS_REGION_EU_WEST_1,
                     scan_on_push=True,
                     policy=repo_policy_public,
                     images_details=[
@@ -415,7 +384,7 @@ def test_image_scanned_without_CRITICAL_findings_default_severity_CRITICAL(self)
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.ecr.ecr_repositories_scan_vulnerabilities_in_latest_image.ecr_repositories_scan_vulnerabilities_in_latest_image.ecr_client",
             ecr_client,
@@ -440,15 +409,15 @@ def test_image_scanned_without_CRITICAL_and_HIGH_findings_default_severity_HIGH(
     ):
         ecr_client = mock.MagicMock
         ecr_client.registries = {}
-        ecr_client.registries[AWS_REGION] = Registry(
+        ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
             id=AWS_ACCOUNT_NUMBER,
-            region=AWS_REGION,
+            region=AWS_REGION_EU_WEST_1,
             scan_type="BASIC",
             repositories=[
                 Repository(
                     name=repository_name,
                     arn=repository_arn,
-                    region=AWS_REGION,
+                    region=AWS_REGION_EU_WEST_1,
                     scan_on_push=True,
                     policy=repo_policy_public,
                     images_details=[
@@ -475,7 +444,7 @@ def test_image_scanned_without_CRITICAL_and_HIGH_findings_default_severity_HIGH(
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.ecr.ecr_repositories_scan_vulnerabilities_in_latest_image.ecr_repositories_scan_vulnerabilities_in_latest_image.ecr_client",
             ecr_client,
@@ -498,15 +467,15 @@ def test_image_scanned_without_CRITICAL_and_HIGH_findings_default_severity_HIGH(
     def test_image_scanned_fail_scan(self):
         ecr_client = mock.MagicMock
         ecr_client.registries = {}
-        ecr_client.registries[AWS_REGION] = Registry(
+        ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
             id=AWS_ACCOUNT_NUMBER,
-            region=AWS_REGION,
+            region=AWS_REGION_EU_WEST_1,
             scan_type="BASIC",
             repositories=[
                 Repository(
                     name=repository_name,
                     arn=repository_arn,
-                    region=AWS_REGION,
+                    region=AWS_REGION_EU_WEST_1,
                     scan_on_push=True,
                     policy=repo_policy_public,
                     images_details=[
@@ -529,7 +498,7 @@ def test_image_scanned_fail_scan(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.ecr.ecr_repositories_scan_vulnerabilities_in_latest_image.ecr_repositories_scan_vulnerabilities_in_latest_image.ecr_client",
             ecr_client,
@@ -552,15 +521,15 @@ def test_image_scanned_fail_scan(self):
     def test_image_not_scanned(self):
         ecr_client = mock.MagicMock
         ecr_client.registries = {}
-        ecr_client.registries[AWS_REGION] = Registry(
+        ecr_client.registries[AWS_REGION_EU_WEST_1] = Registry(
             id=AWS_ACCOUNT_NUMBER,
-            region=AWS_REGION,
+            region=AWS_REGION_EU_WEST_1,
             scan_type="BASIC",
             repositories=[
                 Repository(
                     name=repository_name,
                     arn=repository_arn,
-                    region=AWS_REGION,
+                    region=AWS_REGION_EU_WEST_1,
                     scan_on_push=True,
                     policy=repo_policy_public,
                     images_details=[
@@ -583,7 +552,7 @@ def test_image_not_scanned(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.ecr.ecr_repositories_scan_vulnerabilities_in_latest_image.ecr_repositories_scan_vulnerabilities_in_latest_image.ecr_client",
             ecr_client,
diff --git a/tests/providers/aws/services/ecr/ecr_service_test.py b/tests/providers/aws/services/ecr/ecr_service_test.py
index f05961a9bad..7e3605fd418 100644
--- a/tests/providers/aws/services/ecr/ecr_service_test.py
+++ b/tests/providers/aws/services/ecr/ecr_service_test.py
@@ -2,15 +2,15 @@
 from unittest.mock import patch
 
 import botocore
-from boto3 import client, session
-from moto import mock_ecr
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.ecr.ecr_service import ECR, ScanningRule
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "eu-west-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    set_mocked_aws_audit_info,
+)
 
 repo_arn = f"arn:aws:ecr:eu-west-1:{AWS_ACCOUNT_NUMBER}:repository/test-repo"
 repo_name = "test-repo"
@@ -82,10 +82,12 @@ def mock_make_api_call(self, operation_name, kwarg):
     return make_api_call(self, operation_name, kwarg)
 
 
-def mock_generate_regional_clients(service, audit_info, _):
-    regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
-    regional_client.region = AWS_REGION
-    return {AWS_REGION: regional_client}
+def mock_generate_regional_clients(service, audit_info):
+    regional_client = audit_info.audit_session.client(
+        service, region_name=AWS_REGION_EU_WEST_1
+    )
+    regional_client.region = AWS_REGION_EU_WEST_1
+    return {AWS_REGION_EU_WEST_1: regional_client}
 
 
 # Patch every AWS call using Boto3 and generate_regional_clients to have 1 client
@@ -95,60 +97,29 @@ def mock_generate_regional_clients(service, audit_info, _):
     new=mock_generate_regional_clients,
 )
 class Test_ECR_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test ECR Service
     def test_service(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         ecr = ECR(audit_info)
         assert ecr.service == "ecr"
 
     # Test ECR client
     def test_client(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         ecr = ECR(audit_info)
         for regional_client in ecr.regional_clients.values():
             assert regional_client.__class__.__name__ == "ECR"
 
     # Test ECR session
     def test__get_session__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         ecr = ECR(audit_info)
         assert ecr.session.__class__.__name__ == "Session"
 
     # Test describe ECR repositories
-    @mock_ecr
+    @mock_aws
     def test__describe_registries_and_repositories__(self):
-        ecr_client = client("ecr", region_name=AWS_REGION)
+        ecr_client = client("ecr", region_name=AWS_REGION_EU_WEST_1)
         ecr_client.create_repository(
             repositoryName=repo_name,
             imageScanningConfiguration={"scanOnPush": True},
@@ -156,131 +127,144 @@ def test__describe_registries_and_repositories__(self):
                 {"Key": "test", "Value": "test"},
             ],
         )
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         ecr = ECR(audit_info)
 
         assert len(ecr.registries) == 1
-        assert ecr.registries[AWS_REGION].id == AWS_ACCOUNT_NUMBER
-        assert ecr.registries[AWS_REGION].region == AWS_REGION
-        assert len(ecr.registries[AWS_REGION].repositories) == 1
+        assert ecr.registries[AWS_REGION_EU_WEST_1].id == AWS_ACCOUNT_NUMBER
+        assert ecr.registries[AWS_REGION_EU_WEST_1].region == AWS_REGION_EU_WEST_1
+        assert len(ecr.registries[AWS_REGION_EU_WEST_1].repositories) == 1
 
-        assert ecr.registries[AWS_REGION].repositories[0].name == repo_name
-        assert ecr.registries[AWS_REGION].repositories[0].arn == repo_arn
-        assert ecr.registries[AWS_REGION].repositories[0].scan_on_push
-        assert ecr.registries[AWS_REGION].repositories[0].tags == [
+        assert ecr.registries[AWS_REGION_EU_WEST_1].repositories[0].name == repo_name
+        assert ecr.registries[AWS_REGION_EU_WEST_1].repositories[0].arn == repo_arn
+        assert ecr.registries[AWS_REGION_EU_WEST_1].repositories[0].scan_on_push
+        assert ecr.registries[AWS_REGION_EU_WEST_1].repositories[0].tags == [
             {"Key": "test", "Value": "test"},
         ]
 
     # Test describe ECR repository policies
-    @mock_ecr
+    @mock_aws
     def test__describe_repository_policies__(self):
-        ecr_client = client("ecr", region_name=AWS_REGION)
+        ecr_client = client("ecr", region_name=AWS_REGION_EU_WEST_1)
         ecr_client.create_repository(
             repositoryName=repo_name,
             imageScanningConfiguration={"scanOnPush": True},
         )
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         ecr = ECR(audit_info)
         assert len(ecr.registries) == 1
-        assert len(ecr.registries[AWS_REGION].repositories) == 1
-        assert ecr.registries[AWS_REGION].repositories[0].name == repo_name
-        assert ecr.registries[AWS_REGION].repositories[0].arn == repo_arn
-        assert ecr.registries[AWS_REGION].repositories[0].scan_on_push
+        assert len(ecr.registries[AWS_REGION_EU_WEST_1].repositories) == 1
+        assert ecr.registries[AWS_REGION_EU_WEST_1].repositories[0].name == repo_name
+        assert ecr.registries[AWS_REGION_EU_WEST_1].repositories[0].arn == repo_arn
+        assert ecr.registries[AWS_REGION_EU_WEST_1].repositories[0].scan_on_push
         assert (
-            ecr.registries[AWS_REGION].repositories[0].policy["Statement"][0]["Sid"]
+            ecr.registries[AWS_REGION_EU_WEST_1]
+            .repositories[0]
+            .policy["Statement"][0]["Sid"]
             == "Allow Describe Images"
         )
         assert (
-            ecr.registries[AWS_REGION].repositories[0].policy["Statement"][0]["Effect"]
+            ecr.registries[AWS_REGION_EU_WEST_1]
+            .repositories[0]
+            .policy["Statement"][0]["Effect"]
             == "Allow"
         )
         assert (
-            ecr.registries[AWS_REGION]
+            ecr.registries[AWS_REGION_EU_WEST_1]
             .repositories[0]
             .policy["Statement"][0]["Principal"]["AWS"][0]
             == f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
         )
         assert (
-            ecr.registries[AWS_REGION]
+            ecr.registries[AWS_REGION_EU_WEST_1]
             .repositories[0]
             .policy["Statement"][0]["Action"][0]
             == "ecr:DescribeImages"
         )
         assert (
-            ecr.registries[AWS_REGION]
+            ecr.registries[AWS_REGION_EU_WEST_1]
             .repositories[0]
             .policy["Statement"][0]["Action"][1]
             == "ecr:DescribeRepositories"
         )
 
     # Test describe ECR repository lifecycle policies
-    @mock_ecr
+    @mock_aws
     def test__get_lifecycle_policies__(self):
-        ecr_client = client("ecr", region_name=AWS_REGION)
+        ecr_client = client("ecr", region_name=AWS_REGION_EU_WEST_1)
         ecr_client.create_repository(
             repositoryName=repo_name,
             imageScanningConfiguration={"scanOnPush": True},
         )
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         ecr = ECR(audit_info)
         assert len(ecr.registries) == 1
-        assert len(ecr.registries[AWS_REGION].repositories) == 1
-        assert ecr.registries[AWS_REGION].repositories[0].name == repo_name
-        assert ecr.registries[AWS_REGION].repositories[0].arn == repo_arn
-        assert ecr.registries[AWS_REGION].repositories[0].scan_on_push
-        assert ecr.registries[AWS_REGION].repositories[0].lifecycle_policy
+        assert len(ecr.registries[AWS_REGION_EU_WEST_1].repositories) == 1
+        assert ecr.registries[AWS_REGION_EU_WEST_1].repositories[0].name == repo_name
+        assert ecr.registries[AWS_REGION_EU_WEST_1].repositories[0].arn == repo_arn
+        assert ecr.registries[AWS_REGION_EU_WEST_1].repositories[0].scan_on_push
+        assert ecr.registries[AWS_REGION_EU_WEST_1].repositories[0].lifecycle_policy
 
     # Test get image details
-    @mock_ecr
+    @mock_aws
     def test__get_image_details__(self):
-        ecr_client = client("ecr", region_name=AWS_REGION)
+        ecr_client = client("ecr", region_name=AWS_REGION_EU_WEST_1)
         ecr_client.create_repository(
             repositoryName=repo_name,
             imageScanningConfiguration={"scanOnPush": True},
         )
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         ecr = ECR(audit_info)
         assert len(ecr.registries) == 1
-        assert len(ecr.registries[AWS_REGION].repositories) == 1
-        assert ecr.registries[AWS_REGION].repositories[0].name == repo_name
-        assert ecr.registries[AWS_REGION].repositories[0].arn == repo_arn
-        assert ecr.registries[AWS_REGION].repositories[0].scan_on_push
-        assert len(ecr.registries[AWS_REGION].repositories[0].images_details) == 2
+        assert len(ecr.registries[AWS_REGION_EU_WEST_1].repositories) == 1
+        assert ecr.registries[AWS_REGION_EU_WEST_1].repositories[0].name == repo_name
+        assert ecr.registries[AWS_REGION_EU_WEST_1].repositories[0].arn == repo_arn
+        assert ecr.registries[AWS_REGION_EU_WEST_1].repositories[0].scan_on_push
+        assert (
+            len(ecr.registries[AWS_REGION_EU_WEST_1].repositories[0].images_details)
+            == 2
+        )
         # First image pushed
-        assert ecr.registries[AWS_REGION].repositories[0].images_details[
+        assert ecr.registries[AWS_REGION_EU_WEST_1].repositories[0].images_details[
             0
         ].image_pushed_at == datetime(2023, 1, 1)
         assert (
-            ecr.registries[AWS_REGION].repositories[0].images_details[0].latest_tag
+            ecr.registries[AWS_REGION_EU_WEST_1]
+            .repositories[0]
+            .images_details[0]
+            .latest_tag
             == "test-tag1"
         )
         assert (
-            ecr.registries[AWS_REGION].repositories[0].images_details[0].latest_digest
+            ecr.registries[AWS_REGION_EU_WEST_1]
+            .repositories[0]
+            .images_details[0]
+            .latest_digest
             == "sha256:d8868e50ac4c7104d2200d42f432b661b2da8c1e417ccfae217e6a1e04bb9295"
         )
         assert (
-            ecr.registries[AWS_REGION]
+            ecr.registries[AWS_REGION_EU_WEST_1]
             .repositories[0]
             .images_details[0]
             .scan_findings_status
             == "COMPLETE"
         )
         assert (
-            ecr.registries[AWS_REGION]
+            ecr.registries[AWS_REGION_EU_WEST_1]
             .repositories[0]
             .images_details[0]
             .scan_findings_severity_count.critical
             == 1
         )
         assert (
-            ecr.registries[AWS_REGION]
+            ecr.registries[AWS_REGION_EU_WEST_1]
             .repositories[0]
             .images_details[0]
             .scan_findings_severity_count.high
             == 2
         )
         assert (
-            ecr.registries[AWS_REGION]
+            ecr.registries[AWS_REGION_EU_WEST_1]
             .repositories[0]
             .images_details[0]
             .scan_findings_severity_count.medium
@@ -288,40 +272,46 @@ def test__get_image_details__(self):
         )
 
         # Second image pushed
-        assert ecr.registries[AWS_REGION].repositories[0].images_details[
+        assert ecr.registries[AWS_REGION_EU_WEST_1].repositories[0].images_details[
             1
         ].image_pushed_at == datetime(2023, 1, 2)
         assert (
-            ecr.registries[AWS_REGION].repositories[0].images_details[1].latest_tag
+            ecr.registries[AWS_REGION_EU_WEST_1]
+            .repositories[0]
+            .images_details[1]
+            .latest_tag
             == "test-tag2"
         )
         assert (
-            ecr.registries[AWS_REGION].repositories[0].images_details[1].latest_digest
+            ecr.registries[AWS_REGION_EU_WEST_1]
+            .repositories[0]
+            .images_details[1]
+            .latest_digest
             == "sha256:83251ac64627fc331584f6c498b3aba5badc01574e2c70b2499af3af16630eed"
         )
         assert (
-            ecr.registries[AWS_REGION]
+            ecr.registries[AWS_REGION_EU_WEST_1]
             .repositories[0]
             .images_details[1]
             .scan_findings_status
             == "COMPLETE"
         )
         assert (
-            ecr.registries[AWS_REGION]
+            ecr.registries[AWS_REGION_EU_WEST_1]
             .repositories[0]
             .images_details[1]
             .scan_findings_severity_count.critical
             == 1
         )
         assert (
-            ecr.registries[AWS_REGION]
+            ecr.registries[AWS_REGION_EU_WEST_1]
             .repositories[0]
             .images_details[1]
             .scan_findings_severity_count.high
             == 2
         )
         assert (
-            ecr.registries[AWS_REGION]
+            ecr.registries[AWS_REGION_EU_WEST_1]
             .repositories[0]
             .images_details[1]
             .scan_findings_severity_count.medium
@@ -329,14 +319,14 @@ def test__get_image_details__(self):
         )
 
     # Test get ECR Registries Scanning Configuration
-    @mock_ecr
+    @mock_aws
     def test__get_registry_scanning_configuration__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         ecr = ECR(audit_info)
         assert len(ecr.registries) == 1
-        assert ecr.registries[AWS_REGION].id == AWS_ACCOUNT_NUMBER
-        assert ecr.registries[AWS_REGION].scan_type == "BASIC"
-        assert ecr.registries[AWS_REGION].rules == [
+        assert ecr.registries[AWS_REGION_EU_WEST_1].id == AWS_ACCOUNT_NUMBER
+        assert ecr.registries[AWS_REGION_EU_WEST_1].scan_type == "BASIC"
+        assert ecr.registries[AWS_REGION_EU_WEST_1].rules == [
             ScanningRule(
                 scan_frequency="SCAN_ON_PUSH",
                 scan_filters=[{"filter": "*", "filterType": "WILDCARD"}],
diff --git a/tests/providers/aws/services/ecs/ecs_service_test.py b/tests/providers/aws/services/ecs/ecs_service_test.py
index 98d10b71b96..807ed4bb0c7 100644
--- a/tests/providers/aws/services/ecs/ecs_service_test.py
+++ b/tests/providers/aws/services/ecs/ecs_service_test.py
@@ -1,20 +1,21 @@
 from unittest.mock import patch
 
-from boto3 import client, session
-from moto import mock_ecs
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.ecs.ecs_service import ECS
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "eu-west-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    set_mocked_aws_audit_info,
+)
 
 
-def mock_generate_regional_clients(service, audit_info, _):
-    regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
-    regional_client.region = AWS_REGION
-    return {AWS_REGION: regional_client}
+def mock_generate_regional_clients(service, audit_info):
+    regional_client = audit_info.audit_session.client(
+        service, region_name=AWS_REGION_EU_WEST_1
+    )
+    regional_client.region = AWS_REGION_EU_WEST_1
+    return {AWS_REGION_EU_WEST_1: regional_client}
 
 
 @patch(
@@ -22,60 +23,29 @@ def mock_generate_regional_clients(service, audit_info, _):
     new=mock_generate_regional_clients,
 )
 class Test_ECS_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test ECS Service
     def test_service(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         ecs = ECS(audit_info)
         assert ecs.service == "ecs"
 
     # Test ECS client
     def test_client(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         ecs = ECS(audit_info)
         for reg_client in ecs.regional_clients.values():
             assert reg_client.__class__.__name__ == "ECS"
 
     # Test ECS session
     def test__get_session__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         ecs = ECS(audit_info)
         assert ecs.session.__class__.__name__ == "Session"
 
     # Test list ECS task definitions
-    @mock_ecs
+    @mock_aws
     def test__list_task_definitions__(self):
-        ecs_client = client("ecs", region_name=AWS_REGION)
+        ecs_client = client("ecs", region_name=AWS_REGION_EU_WEST_1)
 
         definition = dict(
             family="test_ecs_task",
@@ -89,7 +59,7 @@ def test__list_task_definitions__(self):
         )
 
         task_definition = ecs_client.register_task_definition(**definition)
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         ecs = ECS(audit_info)
 
         assert len(ecs.task_definitions) == 1
@@ -102,10 +72,10 @@ def test__list_task_definitions__(self):
         )
         assert ecs.task_definitions[0].environment_variables == []
 
-    @mock_ecs
+    @mock_aws
     # Test describe ECS task definitions
     def test__describe_task_definitions__(self):
-        ecs_client = client("ecs", region_name=AWS_REGION)
+        ecs_client = client("ecs", region_name=AWS_REGION_EU_WEST_1)
 
         definition = dict(
             family="test_ecs_task",
@@ -126,7 +96,7 @@ def test__describe_task_definitions__(self):
         )
 
         task_definition = ecs_client.register_task_definition(**definition)
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         ecs = ECS(audit_info)
 
         assert len(ecs.task_definitions) == 1
diff --git a/tests/providers/aws/services/efs/efs_service_test.py b/tests/providers/aws/services/efs/efs_service_test.py
index f484fa1f138..4f9a4026e55 100644
--- a/tests/providers/aws/services/efs/efs_service_test.py
+++ b/tests/providers/aws/services/efs/efs_service_test.py
@@ -2,16 +2,15 @@
 from unittest.mock import patch
 
 import botocore
-from boto3 import client, session
-from moto import mock_efs
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.efs.efs_service import EFS
-from prowler.providers.common.models import Audit_Metadata
-
-# Mock Test Region
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    set_mocked_aws_audit_info,
+)
 
 # Mocking Access Analyzer Calls
 make_api_call = botocore.client.BaseClient._make_api_call
@@ -42,10 +41,12 @@ def mock_make_api_call(self, operation_name, kwarg):
     return make_api_call(self, operation_name, kwarg)
 
 
-def mock_generate_regional_clients(service, audit_info, _):
-    regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
-    regional_client.region = AWS_REGION
-    return {AWS_REGION: regional_client}
+def mock_generate_regional_clients(service, audit_info):
+    regional_client = audit_info.audit_session.client(
+        service, region_name=AWS_REGION_EU_WEST_1
+    )
+    regional_client.region = AWS_REGION_EU_WEST_1
+    return {AWS_REGION_EU_WEST_1: regional_client}
 
 
 # Patch every AWS call using Boto3 and generate_regional_clients to have 1 client
@@ -55,50 +56,20 @@ def mock_generate_regional_clients(service, audit_info, _):
     new=mock_generate_regional_clients,
 )
 class Test_EFS:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test EFS Session
     def test__get_session__(self):
-        access_analyzer = EFS(self.set_mocked_audit_info())
+        access_analyzer = EFS(set_mocked_aws_audit_info())
         assert access_analyzer.session.__class__.__name__ == "Session"
 
     # Test EFS Service
     def test__get_service__(self):
-        access_analyzer = EFS(self.set_mocked_audit_info())
+        access_analyzer = EFS(set_mocked_aws_audit_info())
         assert access_analyzer.service == "efs"
 
-    @mock_efs
+    @mock_aws
     # Test EFS describe file systems
     def test__describe_file_systems__(self):
-        efs_client = client("efs", AWS_REGION)
+        efs_client = client("efs", AWS_REGION_EU_WEST_1)
         efs = efs_client.create_file_system(
             CreationToken=creation_token,
             Encrypted=True,
@@ -106,7 +77,7 @@ def test__describe_file_systems__(self):
                 {"Key": "test", "Value": "test"},
             ],
         )
-        filesystem = EFS(self.set_mocked_audit_info())
+        filesystem = EFS(set_mocked_aws_audit_info())
         assert len(filesystem.filesystems) == 1
         assert filesystem.filesystems[0].id == efs["FileSystemId"]
         assert filesystem.filesystems[0].encrypted == efs["Encrypted"]
@@ -114,14 +85,14 @@ def test__describe_file_systems__(self):
             {"Key": "test", "Value": "test"},
         ]
 
-    @mock_efs
+    @mock_aws
     # Test EFS describe file systems
     def test__describe_file_system_policies__(self):
-        efs_client = client("efs", AWS_REGION)
+        efs_client = client("efs", AWS_REGION_EU_WEST_1)
         efs = efs_client.create_file_system(
             CreationToken=creation_token, Encrypted=True
         )
-        filesystem = EFS(self.set_mocked_audit_info())
+        filesystem = EFS(set_mocked_aws_audit_info())
         assert len(filesystem.filesystems) == 1
         assert filesystem.filesystems[0].id == efs["FileSystemId"]
         assert filesystem.filesystems[0].encrypted == efs["Encrypted"]
diff --git a/tests/providers/aws/services/eks/eks_cluster_kms_cmk_encryption_in_secrets_enabled/eks_cluster_kms_cmk_encryption_in_secrets_enabled_test.py b/tests/providers/aws/services/eks/eks_cluster_kms_cmk_encryption_in_secrets_enabled/eks_cluster_kms_cmk_encryption_in_secrets_enabled_test.py
index 300a112e02d..f1edb2b70d3 100644
--- a/tests/providers/aws/services/eks/eks_cluster_kms_cmk_encryption_in_secrets_enabled/eks_cluster_kms_cmk_encryption_in_secrets_enabled_test.py
+++ b/tests/providers/aws/services/eks/eks_cluster_kms_cmk_encryption_in_secrets_enabled/eks_cluster_kms_cmk_encryption_in_secrets_enabled_test.py
@@ -2,12 +2,15 @@
 from unittest import mock
 
 from prowler.providers.aws.services.eks.eks_service import EKSCluster
-
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+)
 
 cluster_name = "cluster_test"
-cluster_arn = f"arn:aws:eks:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:cluster/{cluster_name}"
+cluster_arn = (
+    f"arn:aws:eks:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:cluster/{cluster_name}"
+)
 
 
 class Test_eks_cluster_kms_cmk_encryption_in_secrets_enabled:
@@ -33,7 +36,7 @@ def test_not_secrets_encryption(self):
             EKSCluster(
                 name=cluster_name,
                 arn=cluster_arn,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 encryptionConfig=False,
             )
         )
@@ -64,7 +67,7 @@ def test_secrets_encryption(self):
             EKSCluster(
                 name=cluster_name,
                 arn=cluster_arn,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 encryptionConfig=True,
             )
         )
diff --git a/tests/providers/aws/services/eks/eks_cluster_network_policy_enabled/eks_cluster_network_policy_enabled_test.py b/tests/providers/aws/services/eks/eks_cluster_network_policy_enabled/eks_cluster_network_policy_enabled_test.py
new file mode 100644
index 00000000000..d1264f637d7
--- /dev/null
+++ b/tests/providers/aws/services/eks/eks_cluster_network_policy_enabled/eks_cluster_network_policy_enabled_test.py
@@ -0,0 +1,96 @@
+from unittest import mock
+
+from prowler.providers.aws.services.eks.eks_service import EKSCluster
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+)
+
+cluster_name = "cluster_test"
+cluster_arn = (
+    f"arn:aws:eks:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:cluster/{cluster_name}"
+)
+
+
+class Test_eks_cluster_network_policy_enabled:
+    def test_no_clusters(self):
+        eks_client = mock.MagicMock
+        eks_client.clusters = []
+        with mock.patch(
+            "prowler.providers.aws.services.eks.eks_service.EKS",
+            eks_client,
+        ):
+            from prowler.providers.aws.services.eks.eks_cluster_network_policy_enabled.eks_cluster_network_policy_enabled import (
+                eks_cluster_network_policy_enabled,
+            )
+
+            check = eks_cluster_network_policy_enabled()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_cluster_without_sg(self):
+        eks_client = mock.MagicMock
+        eks_client.clusters = []
+        eks_client.clusters.append(
+            EKSCluster(
+                name=cluster_name,
+                arn=cluster_arn,
+                region=AWS_REGION_EU_WEST_1,
+                logging=None,
+            )
+        )
+
+        with mock.patch(
+            "prowler.providers.aws.services.eks.eks_service.EKS",
+            eks_client,
+        ):
+            from prowler.providers.aws.services.eks.eks_cluster_network_policy_enabled.eks_cluster_network_policy_enabled import (
+                eks_cluster_network_policy_enabled,
+            )
+
+            check = eks_cluster_network_policy_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"EKS cluster {cluster_name} does not have a Network Policy. Cluster security group ID is not set."
+            )
+            assert result[0].resource_id == cluster_name
+            assert result[0].resource_arn == cluster_arn
+            assert result[0].resource_tags == []
+            assert result[0].region == AWS_REGION_EU_WEST_1
+
+    def test_cluster_with_sg(self):
+        eks_client = mock.MagicMock
+        eks_client.clusters = []
+        eks_client.clusters.append(
+            EKSCluster(
+                name=cluster_name,
+                arn=cluster_arn,
+                region=AWS_REGION_EU_WEST_1,
+                logging=None,
+                security_group_id="sg-123456789",
+            )
+        )
+
+        with mock.patch(
+            "prowler.providers.aws.services.eks.eks_service.EKS",
+            eks_client,
+        ):
+            from prowler.providers.aws.services.eks.eks_cluster_network_policy_enabled.eks_cluster_network_policy_enabled import (
+                eks_cluster_network_policy_enabled,
+            )
+
+            check = eks_cluster_network_policy_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"EKS cluster {cluster_name} has a Network Policy with the security group sg-123456789."
+            )
+            assert result[0].resource_id == cluster_name
+            assert result[0].resource_arn == cluster_arn
+            assert result[0].resource_tags == []
+            assert result[0].region == AWS_REGION_EU_WEST_1
diff --git a/tests/providers/aws/services/eks/eks_cluster_private_nodes_enabled/eks_cluster_private_nodes_enabled_test.py b/tests/providers/aws/services/eks/eks_cluster_private_nodes_enabled/eks_cluster_private_nodes_enabled_test.py
new file mode 100644
index 00000000000..4598c051972
--- /dev/null
+++ b/tests/providers/aws/services/eks/eks_cluster_private_nodes_enabled/eks_cluster_private_nodes_enabled_test.py
@@ -0,0 +1,98 @@
+from unittest import mock
+
+from prowler.providers.aws.services.eks.eks_service import EKSCluster
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+)
+
+cluster_name = "cluster_test"
+cluster_arn = (
+    f"arn:aws:eks:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:cluster/{cluster_name}"
+)
+
+
+class Test_eks_cluster_private_nodes_enabled:
+    def test_no_clusters(self):
+        eks_client = mock.MagicMock
+        eks_client.clusters = []
+        with mock.patch(
+            "prowler.providers.aws.services.eks.eks_service.EKS",
+            eks_client,
+        ):
+            from prowler.providers.aws.services.eks.eks_cluster_private_nodes_enabled.eks_cluster_private_nodes_enabled import (
+                eks_cluster_private_nodes_enabled,
+            )
+
+            check = eks_cluster_private_nodes_enabled()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_cluster_with_private_nodes(self):
+        eks_client = mock.MagicMock
+        eks_client.clusters = []
+        eks_client.clusters.append(
+            EKSCluster(
+                name=cluster_name,
+                arn=cluster_arn,
+                region=AWS_REGION_EU_WEST_1,
+                logging=None,
+                public_access_cidrs=["203.0.113.5/32"],
+                endpoint_private_access=True,
+            )
+        )
+
+        with mock.patch(
+            "prowler.providers.aws.services.eks.eks_service.EKS",
+            eks_client,
+        ):
+            from prowler.providers.aws.services.eks.eks_cluster_private_nodes_enabled.eks_cluster_private_nodes_enabled import (
+                eks_cluster_private_nodes_enabled,
+            )
+
+            check = eks_cluster_private_nodes_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"EKS cluster {cluster_name} is created with private nodes."
+            )
+            assert result[0].resource_id == cluster_name
+            assert result[0].resource_arn == cluster_arn
+            assert result[0].resource_tags == []
+            assert result[0].region == AWS_REGION_EU_WEST_1
+
+    def test_endpoint_without_private_nodes(self):
+        eks_client = mock.MagicMock
+        eks_client.clusters = []
+        eks_client.clusters.append(
+            EKSCluster(
+                name=cluster_name,
+                arn=cluster_arn,
+                region=AWS_REGION_EU_WEST_1,
+                logging=None,
+                endpoint_private_access=False,
+            )
+        )
+
+        with mock.patch(
+            "prowler.providers.aws.services.eks.eks_service.EKS",
+            eks_client,
+        ):
+            from prowler.providers.aws.services.eks.eks_cluster_private_nodes_enabled.eks_cluster_private_nodes_enabled import (
+                eks_cluster_private_nodes_enabled,
+            )
+
+            check = eks_cluster_private_nodes_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Cluster endpoint private access is not enabled for EKS cluster {cluster_name}."
+            )
+            assert result[0].resource_id == cluster_name
+            assert result[0].resource_arn == cluster_arn
+            assert result[0].resource_tags == []
+            assert result[0].region == AWS_REGION_EU_WEST_1
diff --git a/tests/providers/aws/services/eks/eks_control_plane_endpoint_access_restricted/eks_control_plane_endpoint_access_restricted_test.py b/tests/providers/aws/services/eks/eks_control_plane_endpoint_access_restricted/eks_control_plane_endpoint_access_restricted_test.py
index c6f4aa8d9d4..a150aa64066 100644
--- a/tests/providers/aws/services/eks/eks_control_plane_endpoint_access_restricted/eks_control_plane_endpoint_access_restricted_test.py
+++ b/tests/providers/aws/services/eks/eks_control_plane_endpoint_access_restricted/eks_control_plane_endpoint_access_restricted_test.py
@@ -2,12 +2,15 @@
 from unittest import mock
 
 from prowler.providers.aws.services.eks.eks_service import EKSCluster
-
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+)
 
 cluster_name = "cluster_test"
-cluster_arn = f"arn:aws:eks:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:cluster/{cluster_name}"
+cluster_arn = (
+    f"arn:aws:eks:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:cluster/{cluster_name}"
+)
 
 
 class Test_eks_control_plane_endpoint_access_restricted:
@@ -33,7 +36,7 @@ def test_control_plane_access_private(self):
             EKSCluster(
                 name=cluster_name,
                 arn=cluster_arn,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 logging=None,
                 endpoint_public_access=False,
                 endpoint_private_access=True,
@@ -60,7 +63,7 @@ def test_control_plane_access_private(self):
             assert result[0].resource_id == cluster_name
             assert result[0].resource_arn == cluster_arn
             assert result[0].resource_tags == []
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
     def test_control_plane_access_restricted(self):
         eks_client = mock.MagicMock
@@ -69,7 +72,7 @@ def test_control_plane_access_restricted(self):
             EKSCluster(
                 name=cluster_name,
                 arn=cluster_arn,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 logging=None,
                 endpoint_public_access=True,
                 endpoint_private_access=False,
@@ -96,7 +99,7 @@ def test_control_plane_access_restricted(self):
             assert result[0].resource_id == cluster_name
             assert result[0].resource_arn == cluster_arn
             assert result[0].resource_tags == []
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
     def test_control_plane_public(self):
         eks_client = mock.MagicMock
@@ -105,7 +108,7 @@ def test_control_plane_public(self):
             EKSCluster(
                 name=cluster_name,
                 arn=cluster_arn,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 logging=None,
                 endpoint_public_access=True,
                 endpoint_private_access=False,
@@ -132,7 +135,7 @@ def test_control_plane_public(self):
             assert result[0].resource_id == cluster_name
             assert result[0].resource_arn == cluster_arn
             assert result[0].resource_tags == []
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
     def test_control_plane_public_and_private(self):
         eks_client = mock.MagicMock
@@ -141,7 +144,7 @@ def test_control_plane_public_and_private(self):
             EKSCluster(
                 name=cluster_name,
                 arn=cluster_arn,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 logging=None,
                 endpoint_public_access=True,
                 endpoint_private_access=True,
@@ -168,4 +171,4 @@ def test_control_plane_public_and_private(self):
             assert result[0].resource_id == cluster_name
             assert result[0].resource_arn == cluster_arn
             assert result[0].resource_tags == []
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
diff --git a/tests/providers/aws/services/eks/eks_control_plane_logging_all_types_enabled/eks_control_plane_logging_all_types_enabled_test.py b/tests/providers/aws/services/eks/eks_control_plane_logging_all_types_enabled/eks_control_plane_logging_all_types_enabled_test.py
index 601213aaa83..5931360bdf3 100644
--- a/tests/providers/aws/services/eks/eks_control_plane_logging_all_types_enabled/eks_control_plane_logging_all_types_enabled_test.py
+++ b/tests/providers/aws/services/eks/eks_control_plane_logging_all_types_enabled/eks_control_plane_logging_all_types_enabled_test.py
@@ -5,12 +5,15 @@
     EKSCluster,
     EKSClusterLoggingEntity,
 )
-
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+)
 
 cluster_name = "cluster_test"
-cluster_arn = f"arn:aws:eks:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:cluster/{cluster_name}"
+cluster_arn = (
+    f"arn:aws:eks:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:cluster/{cluster_name}"
+)
 
 
 class Test_eks_control_plane_logging_all_types_enabled:
@@ -36,7 +39,7 @@ def test_control_plane_not_loggging(self):
             EKSCluster(
                 name=cluster_name,
                 arn=cluster_arn,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 logging=None,
             )
         )
@@ -67,7 +70,7 @@ def test_control_plane_incomplete_loggging(self):
             EKSCluster(
                 name=cluster_name,
                 arn=cluster_arn,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 logging=EKSClusterLoggingEntity(
                     types=["api", "audit", "authenticator", "controllerManager"],
                     enabled=True,
@@ -101,7 +104,7 @@ def test_control_plane_complete_loggging(self):
             EKSCluster(
                 name=cluster_name,
                 arn=cluster_arn,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 logging=EKSClusterLoggingEntity(
                     types=[
                         "api",
diff --git a/tests/providers/aws/services/eks/eks_endpoints_not_publicly_accessible/eks_endpoints_not_publicly_accessible_test.py b/tests/providers/aws/services/eks/eks_endpoints_not_publicly_accessible/eks_endpoints_not_publicly_accessible_test.py
index 58e0bbaa565..7901b679c4d 100644
--- a/tests/providers/aws/services/eks/eks_endpoints_not_publicly_accessible/eks_endpoints_not_publicly_accessible_test.py
+++ b/tests/providers/aws/services/eks/eks_endpoints_not_publicly_accessible/eks_endpoints_not_publicly_accessible_test.py
@@ -2,12 +2,15 @@
 from unittest import mock
 
 from prowler.providers.aws.services.eks.eks_service import EKSCluster
-
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+)
 
 cluster_name = "cluster_test"
-cluster_arn = f"arn:aws:eks:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:cluster/{cluster_name}"
+cluster_arn = (
+    f"arn:aws:eks:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:cluster/{cluster_name}"
+)
 
 
 class Test_eks_endpoints_not_publicly_accessible:
@@ -33,7 +36,7 @@ def test_endpoint_public_access(self):
             EKSCluster(
                 name=cluster_name,
                 arn=cluster_arn,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 logging=None,
                 endpoint_public_access=True,
                 endpoint_private_access=False,
@@ -59,7 +62,7 @@ def test_endpoint_public_access(self):
             assert result[0].resource_id == cluster_name
             assert result[0].resource_arn == cluster_arn
             assert result[0].resource_tags == []
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
     def test_endpoint_not_public_access(self):
         eks_client = mock.MagicMock
@@ -68,7 +71,7 @@ def test_endpoint_not_public_access(self):
             EKSCluster(
                 name=cluster_name,
                 arn=cluster_arn,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 logging=None,
                 endpoint_public_access=False,
                 endpoint_private_access=True,
@@ -94,4 +97,4 @@ def test_endpoint_not_public_access(self):
             assert result[0].resource_id == cluster_name
             assert result[0].resource_arn == cluster_arn
             assert result[0].resource_tags == []
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
diff --git a/tests/providers/aws/services/eks/eks_service_test.py b/tests/providers/aws/services/eks/eks_service_test.py
index ec52e85a824..ba0675d6f19 100644
--- a/tests/providers/aws/services/eks/eks_service_test.py
+++ b/tests/providers/aws/services/eks/eks_service_test.py
@@ -1,14 +1,14 @@
 from unittest.mock import patch
 
-from boto3 import client, session
-from moto import mock_ec2, mock_eks
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.eks.eks_service import EKS
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "eu-west-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    set_mocked_aws_audit_info,
+)
 
 cluster_name = "test"
 cidr_block_vpc = "10.0.0.0/16"
@@ -16,10 +16,12 @@
 cidr_block_subnet_2 = "10.0.4.0/22"
 
 
-def mock_generate_regional_clients(service, audit_info, _):
-    regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
-    regional_client.region = AWS_REGION
-    return {AWS_REGION: regional_client}
+def mock_generate_regional_clients(service, audit_info):
+    regional_client = audit_info.audit_session.client(
+        service, region_name=AWS_REGION_EU_WEST_1
+    )
+    regional_client.region = AWS_REGION_EU_WEST_1
+    return {AWS_REGION_EU_WEST_1: regional_client}
 
 
 @patch(
@@ -27,62 +29,30 @@ def mock_generate_regional_clients(service, audit_info, _):
     new=mock_generate_regional_clients,
 )
 class Test_EKS_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test EKS Service
     def test_service(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         eks = EKS(audit_info)
         assert eks.service == "eks"
 
     # Test EKS client
     def test_client(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         eks = EKS(audit_info)
         for reg_client in eks.regional_clients.values():
             assert reg_client.__class__.__name__ == "EKS"
 
     # Test EKS session
     def test__get_session__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         eks = EKS(audit_info)
         assert eks.session.__class__.__name__ == "Session"
 
     # Test EKS list clusters
-    @mock_ec2
-    @mock_eks
+    @mock_aws
     def test__list_clusters(self):
-        ec2_client = client("ec2", region_name=AWS_REGION)
-        eks_client = client("eks", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_EU_WEST_1)
+        eks_client = client("eks", region_name=AWS_REGION_EU_WEST_1)
         vpc = ec2_client.create_vpc(CidrBlock=cidr_block_vpc)
         subnet1 = ec2_client.create_subnet(
             VpcId=vpc["Vpc"]["VpcId"], CidrBlock=cidr_block_subnet_1
@@ -103,19 +73,18 @@ def test__list_clusters(self):
             roleArn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:role/eks-service-role-AWSServiceRoleForAmazonEKS-J7ONKE3BQ4PI",
             tags={"test": "test"},
         )
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         eks = EKS(audit_info)
         assert len(eks.clusters) == 1
         assert eks.clusters[0].name == cluster_name
-        assert eks.clusters[0].region == AWS_REGION
+        assert eks.clusters[0].region == AWS_REGION_EU_WEST_1
         assert eks.clusters[0].tags == [{"test": "test"}]
 
     # Test EKS describe clusters
-    @mock_ec2
-    @mock_eks
+    @mock_aws
     def test__describe_clusters(self):
-        ec2_client = client("ec2", region_name=AWS_REGION)
-        eks_client = client("eks", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_EU_WEST_1)
+        eks_client = client("eks", region_name=AWS_REGION_EU_WEST_1)
         vpc = ec2_client.create_vpc(CidrBlock=cidr_block_vpc)
         subnet1 = ec2_client.create_subnet(
             VpcId=vpc["Vpc"]["VpcId"], CidrBlock=cidr_block_subnet_1
@@ -157,11 +126,11 @@ def test__describe_clusters(self):
                 },
             ],
         )
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         eks = EKS(audit_info)
         assert len(eks.clusters) == 1
         assert eks.clusters[0].name == cluster_name
-        assert eks.clusters[0].region == AWS_REGION
+        assert eks.clusters[0].region == AWS_REGION_EU_WEST_1
         assert eks.clusters[0].arn == cluster["cluster"]["arn"]
         assert eks.clusters[0].logging.types == ["api"]
         assert eks.clusters[0].logging.enabled
diff --git a/tests/providers/aws/services/elasticache/elasticache_cluster_uses_public_subnet/elasticache_cluster_uses_public_subnet_test.py b/tests/providers/aws/services/elasticache/elasticache_cluster_uses_public_subnet/elasticache_cluster_uses_public_subnet_test.py
index ae917ba8aac..5f3ae884ac9 100644
--- a/tests/providers/aws/services/elasticache/elasticache_cluster_uses_public_subnet/elasticache_cluster_uses_public_subnet_test.py
+++ b/tests/providers/aws/services/elasticache/elasticache_cluster_uses_public_subnet/elasticache_cluster_uses_public_subnet_test.py
@@ -1,16 +1,17 @@
 from unittest import mock
 
-from boto3 import session
 from mock import MagicMock, patch
-from moto import mock_ec2
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.elasticache.elasticache_service import Cluster
 from prowler.providers.aws.services.vpc.vpc_service import VpcSubnet
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_US_EAST_1,
+    AWS_REGION_US_EAST_1_AZA,
+    AWS_REGION_US_EAST_1_AZB,
+    set_mocked_aws_audit_info,
+)
 from tests.providers.aws.services.elasticache.elasticache_service_test import (
-    AWS_REGION_AZ1,
-    AWS_REGION_AZ2,
     ELASTICACHE_CLUSTER_ARN,
     ELASTICACHE_CLUSTER_NAME,
     ELASTICACHE_CLUSTER_TAGS,
@@ -20,47 +21,13 @@
     mock_make_api_call,
 )
 
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_ACCOUNT_ARN = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
-AWS_REGION = "us-east-1"
-
 VPC_ID = "vpc-12345678901234567"
 
 
 # Patch every AWS call using Boto3
 @patch("botocore.client.BaseClient._make_api_call", new=mock_make_api_call)
 class Test_elasticache_cluster_uses_public_subnet:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=AWS_ACCOUNT_ARN,
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=[AWS_REGION],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_elasticache_no_clusters(self):
         # Mock VPC Service
         vpc_client = MagicMock
@@ -72,7 +39,7 @@ def test_elasticache_no_clusters(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elasticache.elasticache_service.ElastiCache",
             new=elasticache_service,
@@ -100,7 +67,7 @@ def test_elasticache_clusters_using_private_subnets(self):
             arn=ELASTICACHE_CLUSTER_ARN,
             name=ELASTICACHE_CLUSTER_NAME,
             id=ELASTICACHE_CLUSTER_NAME,
-            region=AWS_REGION,
+            region=AWS_REGION_US_EAST_1,
             cache_subnet_group_id=SUBNET_GROUP_NAME,
             subnets=[SUBNET_1, SUBNET_2],
             tags=ELASTICACHE_CLUSTER_TAGS,
@@ -116,10 +83,10 @@ def test_elasticache_clusters_using_private_subnets(self):
             default=False,
             vpc_id=VPC_ID,
             cidr_block="192.168.0.0/24",
-            availability_zone=AWS_REGION_AZ1,
+            availability_zone=AWS_REGION_US_EAST_1_AZA,
             public=False,
             nat_gateway=False,
-            region=AWS_REGION,
+            region=AWS_REGION_US_EAST_1,
             tags=[],
             mapPublicIpOnLaunch=False,
         )
@@ -130,17 +97,17 @@ def test_elasticache_clusters_using_private_subnets(self):
             default=False,
             vpc_id=VPC_ID,
             cidr_block="192.168.0.1/24",
-            availability_zone=AWS_REGION_AZ2,
+            availability_zone=AWS_REGION_US_EAST_1_AZB,
             public=False,
             nat_gateway=False,
-            region=AWS_REGION,
+            region=AWS_REGION_US_EAST_1,
             tags=[],
             mapPublicIpOnLaunch=False,
         )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elasticache.elasticache_service.ElastiCache",
             new=elasticache_service,
@@ -163,7 +130,7 @@ def test_elasticache_clusters_using_private_subnets(self):
                 result[0].status_extended
                 == f"Cluster {ELASTICACHE_CLUSTER_NAME} is not using public subnets."
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_id == ELASTICACHE_CLUSTER_NAME
             assert result[0].resource_arn == ELASTICACHE_CLUSTER_ARN
             assert result[0].resource_tags == ELASTICACHE_CLUSTER_TAGS
@@ -177,7 +144,7 @@ def test_elasticache_clusters_using_public_subnets(self):
             arn=ELASTICACHE_CLUSTER_ARN,
             name=ELASTICACHE_CLUSTER_NAME,
             id=ELASTICACHE_CLUSTER_NAME,
-            region=AWS_REGION,
+            region=AWS_REGION_US_EAST_1,
             cache_subnet_group_id=SUBNET_GROUP_NAME,
             subnets=[SUBNET_1, SUBNET_2],
             tags=ELASTICACHE_CLUSTER_TAGS,
@@ -193,10 +160,10 @@ def test_elasticache_clusters_using_public_subnets(self):
             default=False,
             vpc_id=VPC_ID,
             cidr_block="192.168.0.0/24",
-            availability_zone=AWS_REGION_AZ1,
+            availability_zone=AWS_REGION_US_EAST_1_AZA,
             public=True,
             nat_gateway=False,
-            region=AWS_REGION,
+            region=AWS_REGION_US_EAST_1,
             tags=[],
             mapPublicIpOnLaunch=False,
         )
@@ -207,17 +174,17 @@ def test_elasticache_clusters_using_public_subnets(self):
             default=False,
             vpc_id=VPC_ID,
             cidr_block="192.168.0.1/24",
-            availability_zone=AWS_REGION_AZ2,
+            availability_zone=AWS_REGION_US_EAST_1_AZB,
             public=True,
             nat_gateway=False,
-            region=AWS_REGION,
+            region=AWS_REGION_US_EAST_1,
             tags=[],
             mapPublicIpOnLaunch=False,
         )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elasticache.elasticache_service.ElastiCache",
             new=elasticache_service,
@@ -240,7 +207,7 @@ def test_elasticache_clusters_using_public_subnets(self):
                 result[0].status_extended
                 == f"Cluster {ELASTICACHE_CLUSTER_NAME} is using subnet-1, subnet-2 public subnets."
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_id == ELASTICACHE_CLUSTER_NAME
             assert result[0].resource_arn == ELASTICACHE_CLUSTER_ARN
             assert result[0].resource_tags == ELASTICACHE_CLUSTER_TAGS
diff --git a/tests/providers/aws/services/elasticache/elasticache_service_test.py b/tests/providers/aws/services/elasticache/elasticache_service_test.py
index e41853da917..4030c804760 100644
--- a/tests/providers/aws/services/elasticache/elasticache_service_test.py
+++ b/tests/providers/aws/services/elasticache/elasticache_service_test.py
@@ -1,29 +1,24 @@
 import botocore
-from boto3 import session
 from mock import patch
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.elasticache.elasticache_service import (
     Cluster,
     ElastiCache,
 )
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_ACCOUNT_ARN = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
-
-AWS_REGION = "us-east-1"
-AWS_REGION_AZ1 = "us-east-1a"
-AWS_REGION_AZ2 = "us-east-b"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+    AWS_REGION_US_EAST_1_AZA,
+    AWS_REGION_US_EAST_1_AZB,
+    set_mocked_aws_audit_info,
+)
 
 SUBNET_GROUP_NAME = "default"
 SUBNET_1 = "subnet-1"
 SUBNET_2 = "subnet-2"
 
 ELASTICACHE_CLUSTER_NAME = "test-cluster"
-ELASTICACHE_CLUSTER_ARN = (
-    f"arn:aws:elasticache:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:{ELASTICACHE_CLUSTER_NAME}"
-)
+ELASTICACHE_CLUSTER_ARN = f"arn:aws:elasticache:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:{ELASTICACHE_CLUSTER_NAME}"
 ELASTICACHE_ENGINE = "redis"
 
 ELASTICACHE_CLUSTER_TAGS = [
@@ -63,16 +58,20 @@ def mock_make_api_call(self, operation_name, kwargs):
                     "Subnets": [
                         {
                             "SubnetIdentifier": "subnet-1",
-                            "SubnetAvailabilityZone": {"Name": AWS_REGION_AZ1},
+                            "SubnetAvailabilityZone": {
+                                "Name": AWS_REGION_US_EAST_1_AZA
+                            },
                             "SubnetStatus": "Active",
                         },
                         {
                             "SubnetIdentifier": "subnet-2",
-                            "SubnetAvailabilityZone": {"Name": AWS_REGION_AZ2},
+                            "SubnetAvailabilityZone": {
+                                "Name": AWS_REGION_US_EAST_1_AZB
+                            },
                             "SubnetStatus": "Active",
                         },
                     ],
-                    "DBSubnetGroupArn": f"arn:aws:rds:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:subgrp:{SUBNET_GROUP_NAME}",
+                    "DBSubnetGroupArn": f"arn:aws:rds:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:subgrp:{SUBNET_GROUP_NAME}",
                 }
             ]
         }
@@ -82,10 +81,12 @@ def mock_make_api_call(self, operation_name, kwargs):
     return make_api_call(self, operation_name, kwargs)
 
 
-def mock_generate_regional_clients(service, audit_info, _):
-    regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
-    regional_client.region = AWS_REGION
-    return {AWS_REGION: regional_client}
+def mock_generate_regional_clients(service, audit_info):
+    regional_client = audit_info.audit_session.client(
+        service, region_name=AWS_REGION_US_EAST_1
+    )
+    regional_client.region = AWS_REGION_US_EAST_1
+    return {AWS_REGION_US_EAST_1: regional_client}
 
 
 @patch(
@@ -95,64 +96,33 @@ def mock_generate_regional_clients(service, audit_info, _):
 # Patch every AWS call using Boto3
 @patch("botocore.client.BaseClient._make_api_call", new=mock_make_api_call)
 class Test_ElastiCache_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=AWS_ACCOUNT_ARN,
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test ElastiCache Service
     def test_service(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         elasticache = ElastiCache(audit_info)
         assert elasticache.service == "elasticache"
 
     # Test ElastiCache Client]
     def test_client(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         elasticache = ElastiCache(audit_info)
         assert elasticache.client.__class__.__name__ == "ElastiCache"
 
     # Test ElastiCache Session
     def test__get_session__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         elasticache = ElastiCache(audit_info)
         assert elasticache.session.__class__.__name__ == "Session"
 
     # Test ElastiCache Session
     def test_audited_account(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         elasticache = ElastiCache(audit_info)
         assert elasticache.audited_account == AWS_ACCOUNT_NUMBER
 
     # Test ElastiCache Clusters
     def test_describe_cache_clusters(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         elasticache = ElastiCache(audit_info)
 
         assert len(elasticache.clusters) == 1
@@ -161,7 +131,7 @@ def test_describe_cache_clusters(self):
             arn=ELASTICACHE_CLUSTER_ARN,
             name=ELASTICACHE_CLUSTER_NAME,
             id=ELASTICACHE_CLUSTER_NAME,
-            region=AWS_REGION,
+            region=AWS_REGION_US_EAST_1,
             cache_subnet_group_id=SUBNET_GROUP_NAME,
             subnets=[SUBNET_1, SUBNET_2],
             tags=ELASTICACHE_CLUSTER_TAGS,
diff --git a/tests/providers/aws/services/elb/elb_insecure_ssl_ciphers/elb_insecure_ssl_ciphers_test.py b/tests/providers/aws/services/elb/elb_insecure_ssl_ciphers/elb_insecure_ssl_ciphers_test.py
index 7a4c31bec8a..af4f5bd95d7 100644
--- a/tests/providers/aws/services/elb/elb_insecure_ssl_ciphers/elb_insecure_ssl_ciphers_test.py
+++ b/tests/providers/aws/services/elb/elb_insecure_ssl_ciphers/elb_insecure_ssl_ciphers_test.py
@@ -1,61 +1,32 @@
-from re import search
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2, mock_elb
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_EU_WEST_1_AZA,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
-AWS_REGION = "eu-west-1"
 AWS_ACCOUNT_NUMBER = "123456789012"
-elb_arn = (
-    f"arn:aws:elasticloadbalancing:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:loadbalancer/my-lb"
-)
+elb_arn = f"arn:aws:elasticloadbalancing:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:loadbalancer/my-lb"
 
 
 class Test_elb_insecure_ssl_ciphers:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_elb
+    @mock_aws
     def test_elb_no_balancers(self):
         from prowler.providers.aws.services.elb.elb_service import ELB
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elb.elb_insecure_ssl_ciphers.elb_insecure_ssl_ciphers.elb_client",
-            new=ELB(self.set_mocked_audit_info()),
+            new=ELB(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             # Test Check
             from prowler.providers.aws.services.elb.elb_insecure_ssl_ciphers.elb_insecure_ssl_ciphers import (
@@ -67,11 +38,10 @@ def test_elb_no_balancers(self):
 
             assert len(result) == 0
 
-    @mock_ec2
-    @mock_elb
+    @mock_aws
     def test_elb_listener_with_secure_policy(self):
-        elb = client("elb", region_name=AWS_REGION)
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        elb = client("elb", region_name=AWS_REGION_EU_WEST_1)
+        ec2 = resource("ec2", region_name=AWS_REGION_EU_WEST_1)
 
         security_group = ec2.create_security_group(
             GroupName="sg01", Description="Test security group sg01"
@@ -83,7 +53,7 @@ def test_elb_listener_with_secure_policy(self):
                 {"Protocol": "tcp", "LoadBalancerPort": 80, "InstancePort": 8080},
                 {"Protocol": "https", "LoadBalancerPort": 443, "InstancePort": 9000},
             ],
-            AvailabilityZones=[f"{AWS_REGION}a"],
+            AvailabilityZones=[AWS_REGION_EU_WEST_1_AZA],
             Scheme="internal",
             SecurityGroups=[security_group.id],
         )
@@ -99,10 +69,12 @@ def test_elb_listener_with_secure_policy(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elb.elb_insecure_ssl_ciphers.elb_insecure_ssl_ciphers.elb_client",
-            new=ELB(self.set_mocked_audit_info()),
+            new=ELB(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             from prowler.providers.aws.services.elb.elb_insecure_ssl_ciphers.elb_insecure_ssl_ciphers import (
                 elb_insecure_ssl_ciphers,
@@ -113,18 +85,18 @@ def test_elb_listener_with_secure_policy(self):
 
             assert len(result) == 1
             assert result[0].status == "PASS"
-            assert search(
-                "does not have insecure SSL protocols or ciphers",
-                result[0].status_extended,
+            assert (
+                result[0].status_extended
+                == "ELB my-lb does not have insecure SSL protocols or ciphers."
             )
             assert result[0].resource_id == "my-lb"
             assert result[0].resource_arn == elb_arn
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_ec2
-    @mock_elb
+    @mock_aws
     def test_elb_with_HTTPS_listener(self):
-        elb = client("elb", region_name=AWS_REGION)
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        elb = client("elb", region_name=AWS_REGION_EU_WEST_1)
+        ec2 = resource("ec2", region_name=AWS_REGION_EU_WEST_1)
 
         security_group = ec2.create_security_group(
             GroupName="sg01", Description="Test security group sg01"
@@ -136,7 +108,7 @@ def test_elb_with_HTTPS_listener(self):
                 {"Protocol": "tcp", "LoadBalancerPort": 80, "InstancePort": 8080},
                 {"Protocol": "https", "LoadBalancerPort": 443, "InstancePort": 9000},
             ],
-            AvailabilityZones=[f"{AWS_REGION}a"],
+            AvailabilityZones=[AWS_REGION_EU_WEST_1_AZA],
             Scheme="internal",
             SecurityGroups=[security_group.id],
         )
@@ -145,10 +117,12 @@ def test_elb_with_HTTPS_listener(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elb.elb_insecure_ssl_ciphers.elb_insecure_ssl_ciphers.elb_client",
-            new=ELB(self.set_mocked_audit_info()),
+            new=ELB(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             from prowler.providers.aws.services.elb.elb_insecure_ssl_ciphers.elb_insecure_ssl_ciphers import (
                 elb_insecure_ssl_ciphers,
@@ -159,9 +133,10 @@ def test_elb_with_HTTPS_listener(self):
 
             assert len(result) == 1
             assert result[0].status == "FAIL"
-            assert search(
-                "has listeners with insecure SSL protocols or ciphers",
-                result[0].status_extended,
+            assert (
+                result[0].status_extended
+                == "ELB my-lb has listeners with insecure SSL protocols or ciphers."
             )
             assert result[0].resource_id == "my-lb"
             assert result[0].resource_arn == elb_arn
+            assert result[0].region == AWS_REGION_EU_WEST_1
diff --git a/tests/providers/aws/services/elb/elb_internet_facing/elb_internet_facing_test.py b/tests/providers/aws/services/elb/elb_internet_facing/elb_internet_facing_test.py
index 0a6d38d3db0..d40cdf82741 100644
--- a/tests/providers/aws/services/elb/elb_internet_facing/elb_internet_facing_test.py
+++ b/tests/providers/aws/services/elb/elb_internet_facing/elb_internet_facing_test.py
@@ -1,11 +1,14 @@
-from re import search
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2, mock_elb
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_EU_WEST_1_AZA,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 AWS_REGION = "eu-west-1"
 AWS_ACCOUNT_NUMBER = "123456789012"
@@ -15,47 +18,18 @@
 
 
 class Test_elb_request_smugling:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_elb
+    @mock_aws
     def test_elb_no_balancers(self):
         from prowler.providers.aws.services.elb.elb_service import ELB
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elb.elb_internet_facing.elb_internet_facing.elb_client",
-            new=ELB(self.set_mocked_audit_info()),
+            new=ELB(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             # Test Check
             from prowler.providers.aws.services.elb.elb_internet_facing.elb_internet_facing import (
@@ -67,8 +41,7 @@ def test_elb_no_balancers(self):
 
             assert len(result) == 0
 
-    @mock_ec2
-    @mock_elb
+    @mock_aws
     def test_elb_private(self):
         elb = client("elb", region_name=AWS_REGION)
         ec2 = resource("ec2", region_name=AWS_REGION)
@@ -83,7 +56,7 @@ def test_elb_private(self):
                 {"Protocol": "tcp", "LoadBalancerPort": 80, "InstancePort": 8080},
                 {"Protocol": "http", "LoadBalancerPort": 81, "InstancePort": 9000},
             ],
-            AvailabilityZones=[f"{AWS_REGION}a"],
+            AvailabilityZones=[AWS_REGION_EU_WEST_1_AZA],
             Scheme="internal",
             SecurityGroups=[security_group.id],
         )
@@ -92,10 +65,12 @@ def test_elb_private(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elb.elb_internet_facing.elb_internet_facing.elb_client",
-            new=ELB(self.set_mocked_audit_info()),
+            new=ELB(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             from prowler.providers.aws.services.elb.elb_internet_facing.elb_internet_facing import (
                 elb_internet_facing,
@@ -106,15 +81,12 @@ def test_elb_private(self):
 
             assert len(result) == 1
             assert result[0].status == "PASS"
-            assert search(
-                "is not internet facing",
-                result[0].status_extended,
-            )
+            assert result[0].status_extended == "ELB my-lb is not internet facing."
             assert result[0].resource_id == "my-lb"
             assert result[0].resource_arn == elb_arn
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_ec2
-    @mock_elb
+    @mock_aws
     def test_elb_with_deletion_protection(self):
         elb = client("elb", region_name=AWS_REGION)
         ec2 = resource("ec2", region_name=AWS_REGION)
@@ -129,7 +101,7 @@ def test_elb_with_deletion_protection(self):
                 {"Protocol": "tcp", "LoadBalancerPort": 80, "InstancePort": 8080},
                 {"Protocol": "http", "LoadBalancerPort": 81, "InstancePort": 9000},
             ],
-            AvailabilityZones=[f"{AWS_REGION}a"],
+            AvailabilityZones=[AWS_REGION_EU_WEST_1_AZA],
             Scheme="internet-facing",
             SecurityGroups=[security_group.id],
         )
@@ -138,10 +110,12 @@ def test_elb_with_deletion_protection(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elb.elb_internet_facing.elb_internet_facing.elb_client",
-            new=ELB(self.set_mocked_audit_info()),
+            new=ELB(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             from prowler.providers.aws.services.elb.elb_internet_facing.elb_internet_facing import (
                 elb_internet_facing,
@@ -152,9 +126,10 @@ def test_elb_with_deletion_protection(self):
 
             assert len(result) == 1
             assert result[0].status == "FAIL"
-            assert search(
-                "is internet facing",
-                result[0].status_extended,
+            assert (
+                result[0].status_extended
+                == "ELB my-lb is internet facing in my-lb.us-east-1.elb.amazonaws.com."
             )
             assert result[0].resource_id == "my-lb"
             assert result[0].resource_arn == elb_arn
+            assert result[0].region == AWS_REGION_EU_WEST_1
diff --git a/tests/providers/aws/services/elb/elb_logging_enabled/elb_logging_enabled_test.py b/tests/providers/aws/services/elb/elb_logging_enabled/elb_logging_enabled_test.py
index 784a1b6a216..5e8b7fc1cbf 100644
--- a/tests/providers/aws/services/elb/elb_logging_enabled/elb_logging_enabled_test.py
+++ b/tests/providers/aws/services/elb/elb_logging_enabled/elb_logging_enabled_test.py
@@ -1,11 +1,14 @@
-from re import search
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2, mock_elb
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_EU_WEST_1_AZA,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 AWS_REGION = "eu-west-1"
 AWS_ACCOUNT_NUMBER = "123456789012"
@@ -15,47 +18,18 @@
 
 
 class Test_elb_logging_enabled:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_elb
+    @mock_aws
     def test_elb_no_balancers(self):
         from prowler.providers.aws.services.elb.elb_service import ELB
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elb.elb_logging_enabled.elb_logging_enabled.elb_client",
-            new=ELB(self.set_mocked_audit_info()),
+            new=ELB(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             # Test Check
             from prowler.providers.aws.services.elb.elb_logging_enabled.elb_logging_enabled import (
@@ -67,8 +41,7 @@ def test_elb_no_balancers(self):
 
             assert len(result) == 0
 
-    @mock_ec2
-    @mock_elb
+    @mock_aws
     def test_elb_without_access_log(self):
         elb = client("elb", region_name=AWS_REGION)
         ec2 = resource("ec2", region_name=AWS_REGION)
@@ -83,7 +56,7 @@ def test_elb_without_access_log(self):
                 {"Protocol": "tcp", "LoadBalancerPort": 80, "InstancePort": 8080},
                 {"Protocol": "http", "LoadBalancerPort": 81, "InstancePort": 9000},
             ],
-            AvailabilityZones=[f"{AWS_REGION}a"],
+            AvailabilityZones=[AWS_REGION_EU_WEST_1_AZA],
             Scheme="internal",
             SecurityGroups=[security_group.id],
         )
@@ -92,10 +65,12 @@ def test_elb_without_access_log(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elb.elb_logging_enabled.elb_logging_enabled.elb_client",
-            new=ELB(self.set_mocked_audit_info()),
+            new=ELB(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             from prowler.providers.aws.services.elb.elb_logging_enabled.elb_logging_enabled import (
                 elb_logging_enabled,
@@ -106,15 +81,14 @@ def test_elb_without_access_log(self):
 
             assert len(result) == 1
             assert result[0].status == "FAIL"
-            assert search(
-                "does not have access logs configured",
-                result[0].status_extended,
+            assert (
+                result[0].status_extended
+                == "ELB my-lb does not have access logs configured."
             )
             assert result[0].resource_id == "my-lb"
             assert result[0].resource_arn == elb_arn
 
-    @mock_ec2
-    @mock_elb
+    @mock_aws
     def test_elb_with_deletion_protection(self):
         elb = client("elb", region_name=AWS_REGION)
         ec2 = resource("ec2", region_name=AWS_REGION)
@@ -129,7 +103,7 @@ def test_elb_with_deletion_protection(self):
                 {"Protocol": "tcp", "LoadBalancerPort": 80, "InstancePort": 8080},
                 {"Protocol": "http", "LoadBalancerPort": 81, "InstancePort": 9000},
             ],
-            AvailabilityZones=[f"{AWS_REGION}a"],
+            AvailabilityZones=[AWS_REGION_EU_WEST_1_AZA],
             Scheme="internal",
             SecurityGroups=[security_group.id],
         )
@@ -150,10 +124,12 @@ def test_elb_with_deletion_protection(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elb.elb_logging_enabled.elb_logging_enabled.elb_client",
-            new=ELB(self.set_mocked_audit_info()),
+            new=ELB(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             from prowler.providers.aws.services.elb.elb_logging_enabled.elb_logging_enabled import (
                 elb_logging_enabled,
@@ -164,9 +140,9 @@ def test_elb_with_deletion_protection(self):
 
             assert len(result) == 1
             assert result[0].status == "PASS"
-            assert search(
-                "has access logs to S3 configured",
-                result[0].status_extended,
+            assert (
+                result[0].status_extended
+                == "ELB my-lb has access logs to S3 configured."
             )
             assert result[0].resource_id == "my-lb"
             assert result[0].resource_arn == elb_arn
diff --git a/tests/providers/aws/services/elb/elb_service_test.py b/tests/providers/aws/services/elb/elb_service_test.py
index 51c21c06cfb..ef51a701dc4 100644
--- a/tests/providers/aws/services/elb/elb_service_test.py
+++ b/tests/providers/aws/services/elb/elb_service_test.py
@@ -1,77 +1,45 @@
-from boto3 import client, resource, session
-from moto import mock_ec2, mock_elb
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.elb.elb_service import ELB
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_ELB_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test ELB Service
-    @mock_elb
+    @mock_aws
     def test_service(self):
         # ELB client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         elb = ELB(audit_info)
         assert elb.service == "elb"
 
     # Test ELB Client
-    @mock_elb
+    @mock_aws
     def test_client(self):
         # ELB client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         elb = ELB(audit_info)
         for regional_client in elb.regional_clients.values():
             assert regional_client.__class__.__name__ == "ElasticLoadBalancing"
 
     # Test ELB Session
-    @mock_elb
+    @mock_aws
     def test__get_session__(self):
         # ELB client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         elb = ELB(audit_info)
         assert elb.session.__class__.__name__ == "Session"
 
     # Test ELB Describe Load Balancers
-    @mock_ec2
-    @mock_elb
+    @mock_aws
     def test__describe_load_balancers__(self):
-        elb = client("elb", region_name=AWS_REGION)
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        elb = client("elb", region_name=AWS_REGION_US_EAST_1)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
 
         security_group = ec2.create_security_group(
             GroupName="sg01", Description="Test security group sg01"
@@ -83,28 +51,27 @@ def test__describe_load_balancers__(self):
                 {"Protocol": "tcp", "LoadBalancerPort": 80, "InstancePort": 8080},
                 {"Protocol": "http", "LoadBalancerPort": 81, "InstancePort": 9000},
             ],
-            AvailabilityZones=[f"{AWS_REGION}a"],
+            AvailabilityZones=[f"{AWS_REGION_US_EAST_1}a"],
             Scheme="internal",
             SecurityGroups=[security_group.id],
         )
         # ELB client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         elb = ELB(audit_info)
         assert len(elb.loadbalancers) == 1
         assert elb.loadbalancers[0].name == "my-lb"
-        assert elb.loadbalancers[0].region == AWS_REGION
+        assert elb.loadbalancers[0].region == AWS_REGION_US_EAST_1
         assert elb.loadbalancers[0].scheme == "internal"
         assert (
             elb.loadbalancers[0].arn
-            == f"arn:aws:elasticloadbalancing:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:loadbalancer/my-lb"
+            == f"arn:aws:elasticloadbalancing:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:loadbalancer/my-lb"
         )
 
     # Test ELB Describe Load Balancers Attributes
-    @mock_ec2
-    @mock_elb
+    @mock_aws
     def test__describe_load_balancer_attributes__(self):
-        elb = client("elb", region_name=AWS_REGION)
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        elb = client("elb", region_name=AWS_REGION_US_EAST_1)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
 
         security_group = ec2.create_security_group(
             GroupName="sg01", Description="Test security group sg01"
@@ -116,7 +83,7 @@ def test__describe_load_balancer_attributes__(self):
                 {"Protocol": "tcp", "LoadBalancerPort": 80, "InstancePort": 8080},
                 {"Protocol": "http", "LoadBalancerPort": 81, "InstancePort": 9000},
             ],
-            AvailabilityZones=[f"{AWS_REGION}a"],
+            AvailabilityZones=[f"{AWS_REGION_US_EAST_1}a"],
             Scheme="internal",
             SecurityGroups=[security_group.id],
         )
@@ -133,13 +100,13 @@ def test__describe_load_balancer_attributes__(self):
             },
         )
         # ELB client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         elb = ELB(audit_info)
         assert elb.loadbalancers[0].name == "my-lb"
-        assert elb.loadbalancers[0].region == AWS_REGION
+        assert elb.loadbalancers[0].region == AWS_REGION_US_EAST_1
         assert elb.loadbalancers[0].scheme == "internal"
         assert elb.loadbalancers[0].access_logs
         assert (
             elb.loadbalancers[0].arn
-            == f"arn:aws:elasticloadbalancing:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:loadbalancer/my-lb"
+            == f"arn:aws:elasticloadbalancing:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:loadbalancer/my-lb"
         )
diff --git a/tests/providers/aws/services/elb/elb_ssl_listeners/elb_ssl_listeners_test.py b/tests/providers/aws/services/elb/elb_ssl_listeners/elb_ssl_listeners_test.py
index 885ba09aa27..267a70c30c3 100644
--- a/tests/providers/aws/services/elb/elb_ssl_listeners/elb_ssl_listeners_test.py
+++ b/tests/providers/aws/services/elb/elb_ssl_listeners/elb_ssl_listeners_test.py
@@ -1,11 +1,14 @@
-from re import search
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2, mock_elb
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_EU_WEST_1_AZA,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 AWS_REGION = "eu-west-1"
 AWS_ACCOUNT_NUMBER = "123456789012"
@@ -15,47 +18,18 @@
 
 
 class Test_elb_ssl_listeners:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_elb
+    @mock_aws
     def test_elb_no_balancers(self):
         from prowler.providers.aws.services.elb.elb_service import ELB
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elb.elb_ssl_listeners.elb_ssl_listeners.elb_client",
-            new=ELB(self.set_mocked_audit_info()),
+            new=ELB(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             # Test Check
             from prowler.providers.aws.services.elb.elb_ssl_listeners.elb_ssl_listeners import (
@@ -67,8 +41,7 @@ def test_elb_no_balancers(self):
 
             assert len(result) == 0
 
-    @mock_ec2
-    @mock_elb
+    @mock_aws
     def test_elb_with_HTTP_listener(self):
         elb = client("elb", region_name=AWS_REGION)
         ec2 = resource("ec2", region_name=AWS_REGION)
@@ -83,7 +56,7 @@ def test_elb_with_HTTP_listener(self):
                 {"Protocol": "tcp", "LoadBalancerPort": 80, "InstancePort": 8080},
                 {"Protocol": "http", "LoadBalancerPort": 81, "InstancePort": 9000},
             ],
-            AvailabilityZones=[f"{AWS_REGION}a"],
+            AvailabilityZones=[AWS_REGION_EU_WEST_1_AZA],
             Scheme="internal",
             SecurityGroups=[security_group.id],
         )
@@ -92,10 +65,12 @@ def test_elb_with_HTTP_listener(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elb.elb_ssl_listeners.elb_ssl_listeners.elb_client",
-            new=ELB(self.set_mocked_audit_info()),
+            new=ELB(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             from prowler.providers.aws.services.elb.elb_ssl_listeners.elb_ssl_listeners import (
                 elb_ssl_listeners,
@@ -106,15 +81,11 @@ def test_elb_with_HTTP_listener(self):
 
             assert len(result) == 1
             assert result[0].status == "FAIL"
-            assert search(
-                "has non-encrypted listeners",
-                result[0].status_extended,
-            )
+            assert result[0].status_extended == "ELB my-lb has non-encrypted listeners."
             assert result[0].resource_id == "my-lb"
             assert result[0].resource_arn == elb_arn
 
-    @mock_ec2
-    @mock_elb
+    @mock_aws
     def test_elb_with_HTTPS_listener(self):
         elb = client("elb", region_name=AWS_REGION)
         ec2 = resource("ec2", region_name=AWS_REGION)
@@ -128,7 +99,7 @@ def test_elb_with_HTTPS_listener(self):
             Listeners=[
                 {"Protocol": "https", "LoadBalancerPort": 443, "InstancePort": 9000},
             ],
-            AvailabilityZones=[f"{AWS_REGION}a"],
+            AvailabilityZones=[AWS_REGION_EU_WEST_1_AZA],
             Scheme="internal",
             SecurityGroups=[security_group.id],
         )
@@ -136,10 +107,12 @@ def test_elb_with_HTTPS_listener(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elb.elb_ssl_listeners.elb_ssl_listeners.elb_client",
-            new=ELB(self.set_mocked_audit_info()),
+            new=ELB(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             from prowler.providers.aws.services.elb.elb_ssl_listeners.elb_ssl_listeners import (
                 elb_ssl_listeners,
@@ -150,9 +123,6 @@ def test_elb_with_HTTPS_listener(self):
 
             assert len(result) == 1
             assert result[0].status == "PASS"
-            assert search(
-                "has HTTPS listeners only",
-                result[0].status_extended,
-            )
+            assert result[0].status_extended == "ELB my-lb has HTTPS listeners only."
             assert result[0].resource_id == "my-lb"
             assert result[0].resource_arn == elb_arn
diff --git a/tests/providers/aws/services/elbv2/elbv2_deletion_protection/elbv2_deletion_protection_test.py b/tests/providers/aws/services/elbv2/elbv2_deletion_protection/elbv2_deletion_protection_test.py
index 500647b3f13..955edac08f5 100644
--- a/tests/providers/aws/services/elbv2/elbv2_deletion_protection/elbv2_deletion_protection_test.py
+++ b/tests/providers/aws/services/elbv2/elbv2_deletion_protection/elbv2_deletion_protection_test.py
@@ -1,58 +1,31 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2, mock_elbv2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_EU_WEST_1_AZA,
+    AWS_REGION_EU_WEST_1_AZB,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_elbv2_deletion_protection:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_elbv2
+    @mock_aws
     def test_elb_no_balancers(self):
         from prowler.providers.aws.services.elbv2.elbv2_service import ELBv2
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_deletion_protection.elbv2_deletion_protection.elbv2_client",
-            new=ELBv2(self.set_mocked_audit_info()),
+            new=ELBv2(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             # Test Check
             from prowler.providers.aws.services.elbv2.elbv2_deletion_protection.elbv2_deletion_protection import (
@@ -64,21 +37,24 @@ def test_elb_no_balancers(self):
 
             assert len(result) == 0
 
-    @mock_ec2
-    @mock_elbv2
+    @mock_aws
     def test_elbv2_without_deletion_protection(self):
-        conn = client("elbv2", region_name=AWS_REGION)
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        conn = client("elbv2", region_name=AWS_REGION_EU_WEST_1)
+        ec2 = resource("ec2", region_name=AWS_REGION_EU_WEST_1)
 
         security_group = ec2.create_security_group(
             GroupName="a-security-group", Description="First One"
         )
         vpc = ec2.create_vpc(CidrBlock="172.28.7.0/24", InstanceTenancy="default")
         subnet1 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.192/26", AvailabilityZone=f"{AWS_REGION}a"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.192/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZA,
         )
         subnet2 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.0/26", AvailabilityZone=f"{AWS_REGION}b"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.0/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZB,
         )
 
         lb = conn.create_load_balancer(
@@ -100,10 +76,12 @@ def test_elbv2_without_deletion_protection(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_deletion_protection.elbv2_deletion_protection.elbv2_client",
-            new=ELBv2(self.set_mocked_audit_info()),
+            new=ELBv2(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             from prowler.providers.aws.services.elbv2.elbv2_deletion_protection.elbv2_deletion_protection import (
                 elbv2_deletion_protection,
@@ -121,21 +99,24 @@ def test_elbv2_without_deletion_protection(self):
             assert result[0].resource_id == "my-lb"
             assert result[0].resource_arn == lb["LoadBalancerArn"]
 
-    @mock_ec2
-    @mock_elbv2
+    @mock_aws
     def test_elbv2_with_deletion_protection(self):
-        conn = client("elbv2", region_name=AWS_REGION)
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        conn = client("elbv2", region_name=AWS_REGION_EU_WEST_1)
+        ec2 = resource("ec2", region_name=AWS_REGION_EU_WEST_1)
 
         security_group = ec2.create_security_group(
             GroupName="a-security-group", Description="First One"
         )
         vpc = ec2.create_vpc(CidrBlock="172.28.7.0/24", InstanceTenancy="default")
         subnet1 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.192/26", AvailabilityZone=f"{AWS_REGION}a"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.192/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZA,
         )
         subnet2 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.0/26", AvailabilityZone=f"{AWS_REGION}b"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.0/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZB,
         )
 
         lb = conn.create_load_balancer(
@@ -156,10 +137,12 @@ def test_elbv2_with_deletion_protection(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_deletion_protection.elbv2_deletion_protection.elbv2_client",
-            new=ELBv2(self.set_mocked_audit_info()),
+            new=ELBv2(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             from prowler.providers.aws.services.elbv2.elbv2_deletion_protection.elbv2_deletion_protection import (
                 elbv2_deletion_protection,
diff --git a/tests/providers/aws/services/elbv2/elbv2_desync_mitigation_mode/elbv2_desync_mitigation_mode_test.py b/tests/providers/aws/services/elbv2/elbv2_desync_mitigation_mode/elbv2_desync_mitigation_mode_test.py
index 23cf23f5b7b..b8b1a9c40b7 100644
--- a/tests/providers/aws/services/elbv2/elbv2_desync_mitigation_mode/elbv2_desync_mitigation_mode_test.py
+++ b/tests/providers/aws/services/elbv2/elbv2_desync_mitigation_mode/elbv2_desync_mitigation_mode_test.py
@@ -1,58 +1,31 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2, mock_elbv2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_EU_WEST_1_AZA,
+    AWS_REGION_EU_WEST_1_AZB,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_elbv2_desync_mitigation_mode:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=AWS_REGION,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_elbv2
+    @mock_aws
     def test_elb_no_balancers(self):
         from prowler.providers.aws.services.elbv2.elbv2_service import ELBv2
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_desync_mitigation_mode.elbv2_desync_mitigation_mode.elbv2_client",
-            new=ELBv2(self.set_mocked_audit_info()),
+            new=ELBv2(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             # Test Check
             from prowler.providers.aws.services.elbv2.elbv2_desync_mitigation_mode.elbv2_desync_mitigation_mode import (
@@ -64,21 +37,24 @@ def test_elb_no_balancers(self):
 
             assert len(result) == 0
 
-    @mock_ec2
-    @mock_elbv2
+    @mock_aws
     def test_elbv2_without_desync_mitigation_mode_and_not_dropping_headers(self):
-        conn = client("elbv2", region_name=AWS_REGION)
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        conn = client("elbv2", region_name=AWS_REGION_EU_WEST_1)
+        ec2 = resource("ec2", region_name=AWS_REGION_EU_WEST_1)
 
         security_group = ec2.create_security_group(
             GroupName="a-security-group", Description="First One"
         )
         vpc = ec2.create_vpc(CidrBlock="172.28.7.0/24", InstanceTenancy="default")
         subnet1 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.192/26", AvailabilityZone=f"{AWS_REGION}a"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.192/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZA,
         )
         subnet2 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.0/26", AvailabilityZone=f"{AWS_REGION}b"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.0/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZB,
         )
 
         lb = conn.create_load_balancer(
@@ -104,10 +80,12 @@ def test_elbv2_without_desync_mitigation_mode_and_not_dropping_headers(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_desync_mitigation_mode.elbv2_desync_mitigation_mode.elbv2_client",
-            new=ELBv2(self.set_mocked_audit_info()),
+            new=ELBv2(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             from prowler.providers.aws.services.elbv2.elbv2_desync_mitigation_mode.elbv2_desync_mitigation_mode import (
                 elbv2_desync_mitigation_mode,
@@ -125,21 +103,24 @@ def test_elbv2_without_desync_mitigation_mode_and_not_dropping_headers(self):
             assert result[0].resource_id == "my-lb"
             assert result[0].resource_arn == lb["LoadBalancerArn"]
 
-    @mock_ec2
-    @mock_elbv2
+    @mock_aws
     def test_elbv2_without_desync_mitigation_mode_but_dropping_headers(self):
-        conn = client("elbv2", region_name=AWS_REGION)
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        conn = client("elbv2", region_name=AWS_REGION_EU_WEST_1)
+        ec2 = resource("ec2", region_name=AWS_REGION_EU_WEST_1)
 
         security_group = ec2.create_security_group(
             GroupName="a-security-group", Description="First One"
         )
         vpc = ec2.create_vpc(CidrBlock="172.28.7.0/24", InstanceTenancy="default")
         subnet1 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.192/26", AvailabilityZone=f"{AWS_REGION}a"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.192/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZA,
         )
         subnet2 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.0/26", AvailabilityZone=f"{AWS_REGION}b"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.0/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZB,
         )
 
         lb = conn.create_load_balancer(
@@ -165,10 +146,12 @@ def test_elbv2_without_desync_mitigation_mode_but_dropping_headers(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_desync_mitigation_mode.elbv2_desync_mitigation_mode.elbv2_client",
-            new=ELBv2(self.set_mocked_audit_info()),
+            new=ELBv2(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             from prowler.providers.aws.services.elbv2.elbv2_desync_mitigation_mode.elbv2_desync_mitigation_mode import (
                 elbv2_desync_mitigation_mode,
@@ -186,21 +169,24 @@ def test_elbv2_without_desync_mitigation_mode_but_dropping_headers(self):
             assert result[0].resource_id == "my-lb"
             assert result[0].resource_arn == lb["LoadBalancerArn"]
 
-    @mock_ec2
-    @mock_elbv2
+    @mock_aws
     def test_elbv2_with_desync_mitigation_mode(self):
-        conn = client("elbv2", region_name=AWS_REGION)
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        conn = client("elbv2", region_name=AWS_REGION_EU_WEST_1)
+        ec2 = resource("ec2", region_name=AWS_REGION_EU_WEST_1)
 
         security_group = ec2.create_security_group(
             GroupName="a-security-group", Description="First One"
         )
         vpc = ec2.create_vpc(CidrBlock="172.28.7.0/24", InstanceTenancy="default")
         subnet1 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.192/26", AvailabilityZone=f"{AWS_REGION}a"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.192/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZA,
         )
         subnet2 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.0/26", AvailabilityZone=f"{AWS_REGION}b"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.0/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZB,
         )
 
         lb = conn.create_load_balancer(
@@ -221,10 +207,12 @@ def test_elbv2_with_desync_mitigation_mode(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_desync_mitigation_mode.elbv2_desync_mitigation_mode.elbv2_client",
-            new=ELBv2(self.set_mocked_audit_info()),
+            new=ELBv2(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             from prowler.providers.aws.services.elbv2.elbv2_desync_mitigation_mode.elbv2_desync_mitigation_mode import (
                 elbv2_desync_mitigation_mode,
diff --git a/tests/providers/aws/services/elbv2/elbv2_insecure_ssl_ciphers/elbv2_insecure_ssl_ciphers_test.py b/tests/providers/aws/services/elbv2/elbv2_insecure_ssl_ciphers/elbv2_insecure_ssl_ciphers_test.py
index d5aadac0089..3403242b445 100644
--- a/tests/providers/aws/services/elbv2/elbv2_insecure_ssl_ciphers/elbv2_insecure_ssl_ciphers_test.py
+++ b/tests/providers/aws/services/elbv2/elbv2_insecure_ssl_ciphers/elbv2_insecure_ssl_ciphers_test.py
@@ -1,58 +1,31 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2, mock_elbv2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_EU_WEST_1_AZA,
+    AWS_REGION_EU_WEST_1_AZB,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_elbv2_insecure_ssl_ciphers:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_elbv2
+    @mock_aws
     def test_elb_no_balancers(self):
         from prowler.providers.aws.services.elbv2.elbv2_service import ELBv2
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_insecure_ssl_ciphers.elbv2_insecure_ssl_ciphers.elbv2_client",
-            new=ELBv2(self.set_mocked_audit_info()),
+            new=ELBv2(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             # Test Check
             from prowler.providers.aws.services.elbv2.elbv2_insecure_ssl_ciphers.elbv2_insecure_ssl_ciphers import (
@@ -64,21 +37,24 @@ def test_elb_no_balancers(self):
 
             assert len(result) == 0
 
-    @mock_ec2
-    @mock_elbv2
+    @mock_aws
     def test_elbv2_listener_with_secure_policy(self):
-        conn = client("elbv2", region_name=AWS_REGION)
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        conn = client("elbv2", region_name=AWS_REGION_EU_WEST_1)
+        ec2 = resource("ec2", region_name=AWS_REGION_EU_WEST_1)
 
         security_group = ec2.create_security_group(
             GroupName="a-security-group", Description="First One"
         )
         vpc = ec2.create_vpc(CidrBlock="172.28.7.0/24", InstanceTenancy="default")
         subnet1 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.192/26", AvailabilityZone=f"{AWS_REGION}a"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.192/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZA,
         )
         subnet2 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.0/26", AvailabilityZone=f"{AWS_REGION}b"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.0/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZB,
         )
 
         lb = conn.create_load_balancer(
@@ -117,10 +93,12 @@ def test_elbv2_listener_with_secure_policy(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_insecure_ssl_ciphers.elbv2_insecure_ssl_ciphers.elbv2_client",
-            new=ELBv2(self.set_mocked_audit_info()),
+            new=ELBv2(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             from prowler.providers.aws.services.elbv2.elbv2_insecure_ssl_ciphers.elbv2_insecure_ssl_ciphers import (
                 elbv2_insecure_ssl_ciphers,
@@ -138,21 +116,24 @@ def test_elbv2_listener_with_secure_policy(self):
             assert result[0].resource_id == "my-lb"
             assert result[0].resource_arn == lb["LoadBalancerArn"]
 
-    @mock_ec2
-    @mock_elbv2
+    @mock_aws
     def test_elbv2_with_HTTPS_listener(self):
-        conn = client("elbv2", region_name=AWS_REGION)
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        conn = client("elbv2", region_name=AWS_REGION_EU_WEST_1)
+        ec2 = resource("ec2", region_name=AWS_REGION_EU_WEST_1)
 
         security_group = ec2.create_security_group(
             GroupName="a-security-group", Description="First One"
         )
         vpc = ec2.create_vpc(CidrBlock="172.28.7.0/24", InstanceTenancy="default")
         subnet1 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.192/26", AvailabilityZone=f"{AWS_REGION}a"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.192/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZA,
         )
         subnet2 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.0/26", AvailabilityZone=f"{AWS_REGION}b"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.0/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZB,
         )
 
         lb = conn.create_load_balancer(
@@ -189,10 +170,12 @@ def test_elbv2_with_HTTPS_listener(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_insecure_ssl_ciphers.elbv2_insecure_ssl_ciphers.elbv2_client",
-            new=ELBv2(self.set_mocked_audit_info()),
+            new=ELBv2(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             from prowler.providers.aws.services.elbv2.elbv2_insecure_ssl_ciphers.elbv2_insecure_ssl_ciphers import (
                 elbv2_insecure_ssl_ciphers,
diff --git a/tests/providers/aws/services/elbv2/elbv2_internet_facing/elbv2_internet_facing_test.py b/tests/providers/aws/services/elbv2/elbv2_internet_facing/elbv2_internet_facing_test.py
index f0e513e6565..0bee01c5b4d 100644
--- a/tests/providers/aws/services/elbv2/elbv2_internet_facing/elbv2_internet_facing_test.py
+++ b/tests/providers/aws/services/elbv2/elbv2_internet_facing/elbv2_internet_facing_test.py
@@ -1,58 +1,31 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2, mock_elbv2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_EU_WEST_1_AZA,
+    AWS_REGION_EU_WEST_1_AZB,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_elbv2_internet_facing:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_elbv2
+    @mock_aws
     def test_elb_no_balancers(self):
         from prowler.providers.aws.services.elbv2.elbv2_service import ELBv2
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_internet_facing.elbv2_internet_facing.elbv2_client",
-            new=ELBv2(self.set_mocked_audit_info()),
+            new=ELBv2(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             # Test Check
             from prowler.providers.aws.services.elbv2.elbv2_internet_facing.elbv2_internet_facing import (
@@ -64,21 +37,24 @@ def test_elb_no_balancers(self):
 
             assert len(result) == 0
 
-    @mock_ec2
-    @mock_elbv2
+    @mock_aws
     def test_elbv2_private(self):
-        conn = client("elbv2", region_name=AWS_REGION)
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        conn = client("elbv2", region_name=AWS_REGION_EU_WEST_1)
+        ec2 = resource("ec2", region_name=AWS_REGION_EU_WEST_1)
 
         security_group = ec2.create_security_group(
             GroupName="a-security-group", Description="First One"
         )
         vpc = ec2.create_vpc(CidrBlock="172.28.7.0/24", InstanceTenancy="default")
         subnet1 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.192/26", AvailabilityZone=f"{AWS_REGION}a"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.192/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZA,
         )
         subnet2 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.0/26", AvailabilityZone=f"{AWS_REGION}b"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.0/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZB,
         )
 
         lb = conn.create_load_balancer(
@@ -93,10 +69,12 @@ def test_elbv2_private(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_internet_facing.elbv2_internet_facing.elbv2_client",
-            new=ELBv2(self.set_mocked_audit_info()),
+            new=ELBv2(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             from prowler.providers.aws.services.elbv2.elbv2_internet_facing.elbv2_internet_facing import (
                 elbv2_internet_facing,
@@ -114,21 +92,24 @@ def test_elbv2_private(self):
             assert result[0].resource_id == "my-lb"
             assert result[0].resource_arn == lb["LoadBalancerArn"]
 
-    @mock_ec2
-    @mock_elbv2
+    @mock_aws
     def test_elbv2_internet_facing(self):
-        conn = client("elbv2", region_name=AWS_REGION)
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        conn = client("elbv2", region_name=AWS_REGION_EU_WEST_1)
+        ec2 = resource("ec2", region_name=AWS_REGION_EU_WEST_1)
 
         security_group = ec2.create_security_group(
             GroupName="a-security-group", Description="First One"
         )
         vpc = ec2.create_vpc(CidrBlock="172.28.7.0/24", InstanceTenancy="default")
         subnet1 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.192/26", AvailabilityZone=f"{AWS_REGION}a"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.192/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZA,
         )
         subnet2 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.0/26", AvailabilityZone=f"{AWS_REGION}b"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.0/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZB,
         )
 
         lb = conn.create_load_balancer(
@@ -142,10 +123,12 @@ def test_elbv2_internet_facing(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_internet_facing.elbv2_internet_facing.elbv2_client",
-            new=ELBv2(self.set_mocked_audit_info()),
+            new=ELBv2(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             from prowler.providers.aws.services.elbv2.elbv2_internet_facing.elbv2_internet_facing import (
                 elbv2_internet_facing,
diff --git a/tests/providers/aws/services/elbv2/elbv2_listeners_underneath/elbv2_listeners_underneath_test.py b/tests/providers/aws/services/elbv2/elbv2_listeners_underneath/elbv2_listeners_underneath_test.py
index 02b724fab7b..76ebf4960a5 100644
--- a/tests/providers/aws/services/elbv2/elbv2_listeners_underneath/elbv2_listeners_underneath_test.py
+++ b/tests/providers/aws/services/elbv2/elbv2_listeners_underneath/elbv2_listeners_underneath_test.py
@@ -1,58 +1,31 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2, mock_elbv2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_EU_WEST_1_AZA,
+    AWS_REGION_EU_WEST_1_AZB,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_elbv2_listeners_underneath:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_elbv2
+    @mock_aws
     def test_elb_no_balancers(self):
         from prowler.providers.aws.services.elbv2.elbv2_service import ELBv2
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_listeners_underneath.elbv2_listeners_underneath.elbv2_client",
-            new=ELBv2(self.set_mocked_audit_info()),
+            new=ELBv2(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             # Test Check
             from prowler.providers.aws.services.elbv2.elbv2_listeners_underneath.elbv2_listeners_underneath import (
@@ -64,21 +37,24 @@ def test_elb_no_balancers(self):
 
             assert len(result) == 0
 
-    @mock_ec2
-    @mock_elbv2
+    @mock_aws
     def test_elbv2_without_listeners(self):
-        conn = client("elbv2", region_name=AWS_REGION)
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        conn = client("elbv2", region_name=AWS_REGION_EU_WEST_1)
+        ec2 = resource("ec2", region_name=AWS_REGION_EU_WEST_1)
 
         security_group = ec2.create_security_group(
             GroupName="a-security-group", Description="First One"
         )
         vpc = ec2.create_vpc(CidrBlock="172.28.7.0/24", InstanceTenancy="default")
         subnet1 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.192/26", AvailabilityZone=f"{AWS_REGION}a"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.192/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZA,
         )
         subnet2 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.0/26", AvailabilityZone=f"{AWS_REGION}b"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.0/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZB,
         )
 
         lb = conn.create_load_balancer(
@@ -93,10 +69,12 @@ def test_elbv2_without_listeners(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_listeners_underneath.elbv2_listeners_underneath.elbv2_client",
-            new=ELBv2(self.set_mocked_audit_info()),
+            new=ELBv2(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             from prowler.providers.aws.services.elbv2.elbv2_listeners_underneath.elbv2_listeners_underneath import (
                 elbv2_listeners_underneath,
@@ -114,21 +92,24 @@ def test_elbv2_without_listeners(self):
             assert result[0].resource_id == "my-lb"
             assert result[0].resource_arn == lb["LoadBalancerArn"]
 
-    @mock_ec2
-    @mock_elbv2
+    @mock_aws
     def test_elbv2_with_listeners(self):
-        conn = client("elbv2", region_name=AWS_REGION)
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        conn = client("elbv2", region_name=AWS_REGION_EU_WEST_1)
+        ec2 = resource("ec2", region_name=AWS_REGION_EU_WEST_1)
 
         security_group = ec2.create_security_group(
             GroupName="a-security-group", Description="First One"
         )
         vpc = ec2.create_vpc(CidrBlock="172.28.7.0/24", InstanceTenancy="default")
         subnet1 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.192/26", AvailabilityZone=f"{AWS_REGION}a"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.192/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZA,
         )
         subnet2 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.0/26", AvailabilityZone=f"{AWS_REGION}b"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.0/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZB,
         )
 
         lb = conn.create_load_balancer(
@@ -164,10 +145,12 @@ def test_elbv2_with_listeners(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_listeners_underneath.elbv2_listeners_underneath.elbv2_client",
-            new=ELBv2(self.set_mocked_audit_info()),
+            new=ELBv2(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             from prowler.providers.aws.services.elbv2.elbv2_listeners_underneath.elbv2_listeners_underneath import (
                 elbv2_listeners_underneath,
diff --git a/tests/providers/aws/services/elbv2/elbv2_logging_enabled/elbv2_logging_enabled_test.py b/tests/providers/aws/services/elbv2/elbv2_logging_enabled/elbv2_logging_enabled_test.py
index 144c5174504..f86dc328290 100644
--- a/tests/providers/aws/services/elbv2/elbv2_logging_enabled/elbv2_logging_enabled_test.py
+++ b/tests/providers/aws/services/elbv2/elbv2_logging_enabled/elbv2_logging_enabled_test.py
@@ -1,58 +1,31 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2, mock_elbv2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_EU_WEST_1_AZA,
+    AWS_REGION_EU_WEST_1_AZB,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_elbv2_logging_enabled:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_elbv2
+    @mock_aws
     def test_elb_no_balancers(self):
         from prowler.providers.aws.services.elbv2.elbv2_service import ELBv2
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_logging_enabled.elbv2_logging_enabled.elbv2_client",
-            new=ELBv2(self.set_mocked_audit_info()),
+            new=ELBv2(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             # Test Check
             from prowler.providers.aws.services.elbv2.elbv2_logging_enabled.elbv2_logging_enabled import (
@@ -64,21 +37,24 @@ def test_elb_no_balancers(self):
 
             assert len(result) == 0
 
-    @mock_ec2
-    @mock_elbv2
+    @mock_aws
     def test_elbv2_without_logging_enabled(self):
-        conn = client("elbv2", region_name=AWS_REGION)
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        conn = client("elbv2", region_name=AWS_REGION_EU_WEST_1)
+        ec2 = resource("ec2", region_name=AWS_REGION_EU_WEST_1)
 
         security_group = ec2.create_security_group(
             GroupName="a-security-group", Description="First One"
         )
         vpc = ec2.create_vpc(CidrBlock="172.28.7.0/24", InstanceTenancy="default")
         subnet1 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.192/26", AvailabilityZone=f"{AWS_REGION}a"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.192/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZA,
         )
         subnet2 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.0/26", AvailabilityZone=f"{AWS_REGION}b"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.0/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZB,
         )
 
         lb = conn.create_load_balancer(
@@ -103,10 +79,12 @@ def test_elbv2_without_logging_enabled(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_logging_enabled.elbv2_logging_enabled.elbv2_client",
-            new=ELBv2(self.set_mocked_audit_info()),
+            new=ELBv2(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             from prowler.providers.aws.services.elbv2.elbv2_logging_enabled.elbv2_logging_enabled import (
                 elbv2_logging_enabled,
@@ -124,21 +102,24 @@ def test_elbv2_without_logging_enabled(self):
             assert result[0].resource_id == "my-lb"
             assert result[0].resource_arn == lb["LoadBalancerArn"]
 
-    @mock_ec2
-    @mock_elbv2
+    @mock_aws
     def test_elbv2_with_logging_enabled(self):
-        conn = client("elbv2", region_name=AWS_REGION)
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        conn = client("elbv2", region_name=AWS_REGION_EU_WEST_1)
+        ec2 = resource("ec2", region_name=AWS_REGION_EU_WEST_1)
 
         security_group = ec2.create_security_group(
             GroupName="a-security-group", Description="First One"
         )
         vpc = ec2.create_vpc(CidrBlock="172.28.7.0/24", InstanceTenancy="default")
         subnet1 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.192/26", AvailabilityZone=f"{AWS_REGION}a"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.192/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZA,
         )
         subnet2 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.0/26", AvailabilityZone=f"{AWS_REGION}b"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.0/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZB,
         )
 
         lb = conn.create_load_balancer(
@@ -162,10 +143,12 @@ def test_elbv2_with_logging_enabled(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_logging_enabled.elbv2_logging_enabled.elbv2_client",
-            new=ELBv2(self.set_mocked_audit_info()),
+            new=ELBv2(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             from prowler.providers.aws.services.elbv2.elbv2_logging_enabled.elbv2_logging_enabled import (
                 elbv2_logging_enabled,
diff --git a/tests/providers/aws/services/elbv2/elbv2_service_test.py b/tests/providers/aws/services/elbv2/elbv2_service_test.py
index 5760ba2e0d1..573d084a6e3 100644
--- a/tests/providers/aws/services/elbv2/elbv2_service_test.py
+++ b/tests/providers/aws/services/elbv2/elbv2_service_test.py
@@ -1,87 +1,67 @@
-from boto3 import client, resource, session
-from moto import mock_ec2, mock_elbv2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.elbv2.elbv2_service import ELBv2
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_EU_WEST_1_AZA,
+    AWS_REGION_EU_WEST_1_AZB,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_ELBv2_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test ELBv2 Service
-    @mock_elbv2
+    @mock_aws
     def test_service(self):
         # ELBv2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         elbv2 = ELBv2(audit_info)
         assert elbv2.service == "elbv2"
 
     # Test ELBv2 Client
-    @mock_elbv2
+    @mock_aws
     def test_client(self):
         # ELBv2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         elbv2 = ELBv2(audit_info)
         for regional_client in elbv2.regional_clients.values():
             assert regional_client.__class__.__name__ == "ElasticLoadBalancingv2"
 
     # Test ELBv2 Session
-    @mock_elbv2
+    @mock_aws
     def test__get_session__(self):
         # ELBv2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         elbv2 = ELBv2(audit_info)
         assert elbv2.session.__class__.__name__ == "Session"
 
     # Test ELBv2 Describe Load Balancers
-    @mock_ec2
-    @mock_elbv2
+    @mock_aws
     def test__describe_load_balancers__(self):
-        conn = client("elbv2", region_name=AWS_REGION)
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        conn = client("elbv2", region_name=AWS_REGION_EU_WEST_1)
+        ec2 = resource("ec2", region_name=AWS_REGION_EU_WEST_1)
 
         security_group = ec2.create_security_group(
             GroupName="a-security-group", Description="First One"
         )
         vpc = ec2.create_vpc(CidrBlock="172.28.7.0/24", InstanceTenancy="default")
         subnet1 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.192/26", AvailabilityZone=f"{AWS_REGION}a"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.192/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZA,
         )
         subnet2 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.0/26", AvailabilityZone=f"{AWS_REGION}b"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.0/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZB,
         )
 
         lb = conn.create_load_balancer(
@@ -91,30 +71,35 @@ def test__describe_load_balancers__(self):
             Scheme="internal",
         )["LoadBalancers"][0]
         # ELBv2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         elbv2 = ELBv2(audit_info)
         assert len(elbv2.loadbalancersv2) == 1
         assert elbv2.loadbalancersv2[0].name == "my-lb"
-        assert elbv2.loadbalancersv2[0].region == AWS_REGION
+        assert elbv2.loadbalancersv2[0].region == AWS_REGION_EU_WEST_1
         assert elbv2.loadbalancersv2[0].scheme == "internal"
         assert elbv2.loadbalancersv2[0].arn == lb["LoadBalancerArn"]
 
     # Test ELBv2 Describe Listeners
-    @mock_ec2
-    @mock_elbv2
+    @mock_aws
     def test__describe_listeners__(self):
-        conn = client("elbv2", region_name=AWS_REGION)
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        conn = client("elbv2", region_name=AWS_REGION_EU_WEST_1)
+        ec2 = resource("ec2", region_name=AWS_REGION_EU_WEST_1)
 
         security_group = ec2.create_security_group(
             GroupName="a-security-group", Description="First One"
         )
         vpc = ec2.create_vpc(CidrBlock="172.28.7.0/24", InstanceTenancy="default")
         subnet1 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.192/26", AvailabilityZone=f"{AWS_REGION}a"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.192/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZA,
         )
         subnet2 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.0/26", AvailabilityZone=f"{AWS_REGION}b"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.0/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZB,
         )
 
         lb = conn.create_load_balancer(
@@ -140,28 +125,33 @@ def test__describe_listeners__(self):
             ],
         )
         # ELBv2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         elbv2 = ELBv2(audit_info)
         assert len(elbv2.loadbalancersv2[0].listeners) == 1
         assert elbv2.loadbalancersv2[0].listeners[0].protocol == "HTTP"
         assert elbv2.loadbalancersv2[0].listeners[0].port == 443
 
     # Test ELBv2 Describe Load Balancers Attributes
-    @mock_ec2
-    @mock_elbv2
+    @mock_aws
     def test__describe_load_balancer_attributes__(self):
-        conn = client("elbv2", region_name=AWS_REGION)
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        conn = client("elbv2", region_name=AWS_REGION_EU_WEST_1)
+        ec2 = resource("ec2", region_name=AWS_REGION_EU_WEST_1)
 
         security_group = ec2.create_security_group(
             GroupName="a-security-group", Description="First One"
         )
         vpc = ec2.create_vpc(CidrBlock="172.28.7.0/24", InstanceTenancy="default")
         subnet1 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.192/26", AvailabilityZone=f"{AWS_REGION}a"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.192/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZA,
         )
         subnet2 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.0/26", AvailabilityZone=f"{AWS_REGION}b"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.0/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZB,
         )
 
         lb = conn.create_load_balancer(
@@ -184,7 +174,9 @@ def test__describe_load_balancer_attributes__(self):
             ],
         )
         # ELBv2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         elbv2 = ELBv2(audit_info)
         assert len(elbv2.loadbalancersv2) == 1
         assert elbv2.loadbalancersv2[0].desync_mitigation_mode == "defensive"
@@ -193,21 +185,24 @@ def test__describe_load_balancer_attributes__(self):
         assert elbv2.loadbalancersv2[0].drop_invalid_header_fields == "false"
 
     # Test ELBv2 Describe Load Balancers Attributes
-    @mock_ec2
-    @mock_elbv2
+    @mock_aws
     def test__describe_rules__(self):
-        conn = client("elbv2", region_name=AWS_REGION)
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        conn = client("elbv2", region_name=AWS_REGION_EU_WEST_1)
+        ec2 = resource("ec2", region_name=AWS_REGION_EU_WEST_1)
 
         security_group = ec2.create_security_group(
             GroupName="a-security-group", Description="First One"
         )
         vpc = ec2.create_vpc(CidrBlock="172.28.7.0/24", InstanceTenancy="default")
         subnet1 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.192/26", AvailabilityZone=f"{AWS_REGION}a"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.192/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZA,
         )
         subnet2 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.0/26", AvailabilityZone=f"{AWS_REGION}b"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.0/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZB,
         )
 
         lb = conn.create_load_balancer(
@@ -233,7 +228,9 @@ def test__describe_rules__(self):
             DefaultActions=actions,
         )
         # ELBv2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+        )
         elbv2 = ELBv2(audit_info)
         assert len(elbv2.loadbalancersv2) == 1
         assert elbv2.loadbalancersv2[0].listeners[0].rules[0].actions == actions
diff --git a/tests/providers/aws/services/elbv2/elbv2_ssl_listeners/elbv2_ssl_listeners_test.py b/tests/providers/aws/services/elbv2/elbv2_ssl_listeners/elbv2_ssl_listeners_test.py
index e20ab90add5..29f262ad075 100644
--- a/tests/providers/aws/services/elbv2/elbv2_ssl_listeners/elbv2_ssl_listeners_test.py
+++ b/tests/providers/aws/services/elbv2/elbv2_ssl_listeners/elbv2_ssl_listeners_test.py
@@ -1,58 +1,31 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2, mock_elbv2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_EU_WEST_1_AZA,
+    AWS_REGION_EU_WEST_1_AZB,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_elbv2_ssl_listeners:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_elbv2
+    @mock_aws
     def test_elb_no_balancers(self):
         from prowler.providers.aws.services.elbv2.elbv2_service import ELBv2
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_ssl_listeners.elbv2_ssl_listeners.elbv2_client",
-            new=ELBv2(self.set_mocked_audit_info()),
+            new=ELBv2(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             # Test Check
             from prowler.providers.aws.services.elbv2.elbv2_ssl_listeners.elbv2_ssl_listeners import (
@@ -64,21 +37,24 @@ def test_elb_no_balancers(self):
 
             assert len(result) == 0
 
-    @mock_ec2
-    @mock_elbv2
+    @mock_aws
     def test_elbv2_with_HTTP_listener(self):
-        conn = client("elbv2", region_name=AWS_REGION)
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        conn = client("elbv2", region_name=AWS_REGION_EU_WEST_1)
+        ec2 = resource("ec2", region_name=AWS_REGION_EU_WEST_1)
 
         security_group = ec2.create_security_group(
             GroupName="a-security-group", Description="First One"
         )
         vpc = ec2.create_vpc(CidrBlock="172.28.7.0/24", InstanceTenancy="default")
         subnet1 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.192/26", AvailabilityZone=f"{AWS_REGION}a"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.192/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZA,
         )
         subnet2 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.0/26", AvailabilityZone=f"{AWS_REGION}b"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.0/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZB,
         )
 
         lb = conn.create_load_balancer(
@@ -115,10 +91,12 @@ def test_elbv2_with_HTTP_listener(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_ssl_listeners.elbv2_ssl_listeners.elbv2_client",
-            new=ELBv2(self.set_mocked_audit_info()),
+            new=ELBv2(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             from prowler.providers.aws.services.elbv2.elbv2_ssl_listeners.elbv2_ssl_listeners import (
                 elbv2_ssl_listeners,
@@ -136,21 +114,24 @@ def test_elbv2_with_HTTP_listener(self):
             assert result[0].resource_id == "my-lb"
             assert result[0].resource_arn == lb["LoadBalancerArn"]
 
-    @mock_ec2
-    @mock_elbv2
+    @mock_aws
     def test_elbv2_with_HTTPS_listener(self):
-        conn = client("elbv2", region_name=AWS_REGION)
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        conn = client("elbv2", region_name=AWS_REGION_EU_WEST_1)
+        ec2 = resource("ec2", region_name=AWS_REGION_EU_WEST_1)
 
         security_group = ec2.create_security_group(
             GroupName="a-security-group", Description="First One"
         )
         vpc = ec2.create_vpc(CidrBlock="172.28.7.0/24", InstanceTenancy="default")
         subnet1 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.192/26", AvailabilityZone=f"{AWS_REGION}a"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.192/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZA,
         )
         subnet2 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.0/26", AvailabilityZone=f"{AWS_REGION}b"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.0/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZB,
         )
 
         lb = conn.create_load_balancer(
@@ -186,10 +167,12 @@ def test_elbv2_with_HTTPS_listener(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_ssl_listeners.elbv2_ssl_listeners.elbv2_client",
-            new=ELBv2(self.set_mocked_audit_info()),
+            new=ELBv2(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             from prowler.providers.aws.services.elbv2.elbv2_ssl_listeners.elbv2_ssl_listeners import (
                 elbv2_ssl_listeners,
@@ -207,21 +190,24 @@ def test_elbv2_with_HTTPS_listener(self):
             assert result[0].resource_id == "my-lb"
             assert result[0].resource_arn == lb["LoadBalancerArn"]
 
-    @mock_ec2
-    @mock_elbv2
+    @mock_aws
     def test_elbv2_with_HTTPS_redirection(self):
-        conn = client("elbv2", region_name=AWS_REGION)
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        conn = client("elbv2", region_name=AWS_REGION_EU_WEST_1)
+        ec2 = resource("ec2", region_name=AWS_REGION_EU_WEST_1)
 
         security_group = ec2.create_security_group(
             GroupName="a-security-group", Description="First One"
         )
         vpc = ec2.create_vpc(CidrBlock="172.28.7.0/24", InstanceTenancy="default")
         subnet1 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.192/26", AvailabilityZone=f"{AWS_REGION}a"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.192/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZA,
         )
         subnet2 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.0/26", AvailabilityZone=f"{AWS_REGION}b"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.0/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZB,
         )
 
         lb = conn.create_load_balancer(
@@ -250,10 +236,12 @@ def test_elbv2_with_HTTPS_redirection(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_ssl_listeners.elbv2_ssl_listeners.elbv2_client",
-            new=ELBv2(self.set_mocked_audit_info()),
+            new=ELBv2(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             from prowler.providers.aws.services.elbv2.elbv2_ssl_listeners.elbv2_ssl_listeners import (
                 elbv2_ssl_listeners,
diff --git a/tests/providers/aws/services/elbv2/elbv2_waf_acl_attached/elbv2_waf_acl_attached_test.py b/tests/providers/aws/services/elbv2/elbv2_waf_acl_attached/elbv2_waf_acl_attached_test.py
index cb5379b111d..467ca3b157b 100644
--- a/tests/providers/aws/services/elbv2/elbv2_waf_acl_attached/elbv2_waf_acl_attached_test.py
+++ b/tests/providers/aws/services/elbv2/elbv2_waf_acl_attached/elbv2_waf_acl_attached_test.py
@@ -2,14 +2,16 @@
 from unittest import mock
 
 import botocore
-from boto3 import client, resource, session
-from moto import mock_ec2, mock_elbv2, mock_wafv2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_EU_WEST_1_AZA,
+    AWS_REGION_EU_WEST_1_AZB,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 # Mocking WAF-Regional Calls
 make_api_call = botocore.client.BaseClient._make_api_call
@@ -34,39 +36,7 @@ def mock_make_api_call(self, operation_name, kwarg):
 
 
 class Test_elbv2_waf_acl_attached:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_wafv2
-    @mock_elbv2
+    @mock_aws
     def test_elb_no_balancers(self):
         from prowler.providers.aws.services.elbv2.elbv2_service import ELBv2
         from prowler.providers.aws.services.waf.waf_service import WAF
@@ -74,16 +44,22 @@ def test_elb_no_balancers(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_waf_acl_attached.elbv2_waf_acl_attached.elbv2_client",
-            new=ELBv2(self.set_mocked_audit_info()),
+            new=ELBv2(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_waf_acl_attached.elbv2_waf_acl_attached.wafv2_client",
-            new=WAFv2(self.set_mocked_audit_info()),
+            new=WAFv2(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_waf_acl_attached.elbv2_waf_acl_attached.waf_client",
-            new=WAF(self.set_mocked_audit_info()),
+            new=WAF(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             # Test Check
             from prowler.providers.aws.services.elbv2.elbv2_waf_acl_attached.elbv2_waf_acl_attached import (
@@ -95,12 +71,10 @@ def test_elb_no_balancers(self):
 
             assert len(result) == 0
 
-    @mock_wafv2
-    @mock_ec2
-    @mock_elbv2
+    @mock_aws
     def test_elbv2_without_WAF(self):
-        conn = client("elbv2", region_name=AWS_REGION)
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        conn = client("elbv2", region_name=AWS_REGION_EU_WEST_1)
+        ec2 = resource("ec2", region_name=AWS_REGION_EU_WEST_1)
         wafv2 = client("wafv2", region_name="us-east-1")
         _ = wafv2.create_web_acl(
             Scope="REGIONAL",
@@ -117,10 +91,14 @@ def test_elbv2_without_WAF(self):
         )
         vpc = ec2.create_vpc(CidrBlock="172.28.7.0/24", InstanceTenancy="default")
         subnet1 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.192/26", AvailabilityZone=f"{AWS_REGION}a"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.192/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZA,
         )
         subnet2 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.0/26", AvailabilityZone=f"{AWS_REGION}b"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.0/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZB,
         )
 
         lb = conn.create_load_balancer(
@@ -137,16 +115,22 @@ def test_elbv2_without_WAF(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_waf_acl_attached.elbv2_waf_acl_attached.elbv2_client",
-            new=ELBv2(self.set_mocked_audit_info()),
+            new=ELBv2(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_waf_acl_attached.elbv2_waf_acl_attached.wafv2_client",
-            new=WAFv2(self.set_mocked_audit_info()),
+            new=WAFv2(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_waf_acl_attached.elbv2_waf_acl_attached.waf_client",
-            new=WAF(self.set_mocked_audit_info()),
+            new=WAF(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ):
             # Test Check
             from prowler.providers.aws.services.elbv2.elbv2_waf_acl_attached.elbv2_waf_acl_attached import (
@@ -165,12 +149,10 @@ def test_elbv2_without_WAF(self):
             assert result[0].resource_id == "my-lb"
             assert result[0].resource_arn == lb["LoadBalancerArn"]
 
-    @mock_wafv2
-    @mock_ec2
-    @mock_elbv2
+    @mock_aws
     def test_elbv2_with_WAF(self):
-        conn = client("elbv2", region_name=AWS_REGION)
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        conn = client("elbv2", region_name=AWS_REGION_EU_WEST_1)
+        ec2 = resource("ec2", region_name=AWS_REGION_EU_WEST_1)
         wafv2 = client("wafv2", region_name="us-east-1")
         waf = wafv2.create_web_acl(
             Scope="REGIONAL",
@@ -187,10 +169,14 @@ def test_elbv2_with_WAF(self):
         )
         vpc = ec2.create_vpc(CidrBlock="172.28.7.0/24", InstanceTenancy="default")
         subnet1 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.192/26", AvailabilityZone=f"{AWS_REGION}a"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.192/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZA,
         )
         subnet2 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.0/26", AvailabilityZone=f"{AWS_REGION}b"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.0/26",
+            AvailabilityZone=AWS_REGION_EU_WEST_1_AZB,
         )
 
         lb = conn.create_load_balancer(
@@ -209,17 +195,25 @@ def test_elbv2_with_WAF(self):
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            new=self.set_mocked_audit_info(),
+            new=set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_waf_acl_attached.elbv2_waf_acl_attached.elbv2_client",
-            new=ELBv2(self.set_mocked_audit_info()),
+            new=ELBv2(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ), mock.patch(
             "prowler.providers.aws.services.elbv2.elbv2_waf_acl_attached.elbv2_waf_acl_attached.wafv2_client",
-            new=WAFv2(self.set_mocked_audit_info()),
+            new=WAFv2(
+                set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+            ),
         ) as service_client:
             with mock.patch(
                 "prowler.providers.aws.services.elbv2.elbv2_waf_acl_attached.elbv2_waf_acl_attached.waf_client",
-                new=WAF(self.set_mocked_audit_info()),
+                new=WAF(
+                    set_mocked_aws_audit_info(
+                        [AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1]
+                    )
+                ),
             ):
                 # Test Check
                 from prowler.providers.aws.services.elbv2.elbv2_waf_acl_attached.elbv2_waf_acl_attached import (
diff --git a/tests/providers/aws/services/emr/emr_cluster_account_public_block_enabled/emr_cluster_account_public_block_enabled_test.py b/tests/providers/aws/services/emr/emr_cluster_account_public_block_enabled/emr_cluster_account_public_block_enabled_test.py
index 3ec7a40412e..f2af2bc2d19 100644
--- a/tests/providers/aws/services/emr/emr_cluster_account_public_block_enabled/emr_cluster_account_public_block_enabled_test.py
+++ b/tests/providers/aws/services/emr/emr_cluster_account_public_block_enabled/emr_cluster_account_public_block_enabled_test.py
@@ -1,20 +1,20 @@
 from unittest import mock
 
-from moto.core import DEFAULT_ACCOUNT_ID
-
 from prowler.providers.aws.services.emr.emr_service import (
     BlockPublicAccessConfiguration,
 )
-
-AWS_REGION = "eu-west-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+)
 
 
 class Test_emr_cluster_account_public_block_enabled:
     def test_account_public_block_enabled(self):
         emr_client = mock.MagicMock
-        emr_client.audited_account = DEFAULT_ACCOUNT_ID
+        emr_client.audited_account = AWS_ACCOUNT_NUMBER
         emr_client.block_public_access_configuration = {
-            AWS_REGION: BlockPublicAccessConfiguration(
+            AWS_REGION_EU_WEST_1: BlockPublicAccessConfiguration(
                 block_public_security_group_rules=True
             )
         }
@@ -31,8 +31,8 @@ def test_account_public_block_enabled(self):
             result = check.execute()
 
             assert len(result) == 1
-            assert result[0].region == AWS_REGION
-            assert result[0].resource_id == DEFAULT_ACCOUNT_ID
+            assert result[0].region == AWS_REGION_EU_WEST_1
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
             assert result[0].status == "PASS"
             assert (
                 result[0].status_extended
@@ -41,9 +41,9 @@ def test_account_public_block_enabled(self):
 
     def test_account_public_block_disabled(self):
         emr_client = mock.MagicMock
-        emr_client.audited_account = DEFAULT_ACCOUNT_ID
+        emr_client.audited_account = AWS_ACCOUNT_NUMBER
         emr_client.block_public_access_configuration = {
-            AWS_REGION: BlockPublicAccessConfiguration(
+            AWS_REGION_EU_WEST_1: BlockPublicAccessConfiguration(
                 block_public_security_group_rules=False
             )
         }
@@ -60,8 +60,8 @@ def test_account_public_block_disabled(self):
             result = check.execute()
 
             assert len(result) == 1
-            assert result[0].region == AWS_REGION
-            assert result[0].resource_id == DEFAULT_ACCOUNT_ID
+            assert result[0].region == AWS_REGION_EU_WEST_1
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
             assert result[0].status == "FAIL"
             assert (
                 result[0].status_extended
diff --git a/tests/providers/aws/services/emr/emr_cluster_master_nodes_no_public_ip/emr_cluster_master_nodes_no_public_ip_test.py b/tests/providers/aws/services/emr/emr_cluster_master_nodes_no_public_ip/emr_cluster_master_nodes_no_public_ip_test.py
index 3e4dc742df1..d33628ec826 100644
--- a/tests/providers/aws/services/emr/emr_cluster_master_nodes_no_public_ip/emr_cluster_master_nodes_no_public_ip_test.py
+++ b/tests/providers/aws/services/emr/emr_cluster_master_nodes_no_public_ip/emr_cluster_master_nodes_no_public_ip_test.py
@@ -1,10 +1,10 @@
 from unittest import mock
 
-from moto.core import DEFAULT_ACCOUNT_ID
-
 from prowler.providers.aws.services.emr.emr_service import Cluster, ClusterStatus
-
-AWS_REGION = "eu-west-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+)
 
 
 class Test_emr_cluster_master_nodes_no_public_ip:
@@ -29,14 +29,14 @@ def test_cluster_public_running(self):
         emr_client = mock.MagicMock
         cluster_name = "test-cluster"
         cluster_id = "j-XWO1UKVCC6FCV"
-        cluster_arn = f"arn:aws:elasticmapreduce:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:cluster/{cluster_name}"
+        cluster_arn = f"arn:aws:elasticmapreduce:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:cluster/{cluster_name}"
         emr_client.clusters = {
             "test-cluster": Cluster(
                 id=cluster_id,
                 arn=cluster_arn,
                 name=cluster_name,
                 status=ClusterStatus.RUNNING,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 master_public_dns_name="test.amazonaws.com",
                 public=True,
             )
@@ -54,7 +54,7 @@ def test_cluster_public_running(self):
             result = check.execute()
 
             assert len(result) == 1
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
             assert result[0].resource_id == cluster_id
             assert result[0].resource_arn == cluster_arn
             assert result[0].status == "FAIL"
@@ -67,14 +67,14 @@ def test_cluster_private_running(self):
         emr_client = mock.MagicMock
         cluster_name = "test-cluster"
         cluster_id = "j-XWO1UKVCC6FCV"
-        cluster_arn = f"arn:aws:elasticmapreduce:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:cluster/{cluster_name}"
+        cluster_arn = f"arn:aws:elasticmapreduce:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:cluster/{cluster_name}"
         emr_client.clusters = {
             "test-cluster": Cluster(
                 id=cluster_id,
                 arn=cluster_arn,
                 name=cluster_name,
                 status=ClusterStatus.RUNNING,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 master_public_dns_name="compute.internal",
                 public=False,
             )
@@ -92,7 +92,7 @@ def test_cluster_private_running(self):
             result = check.execute()
 
             assert len(result) == 1
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
             assert result[0].resource_id == cluster_id
             assert result[0].resource_arn == cluster_arn
             assert result[0].status == "PASS"
@@ -105,14 +105,14 @@ def test_cluster_public_terminated(self):
         emr_client = mock.MagicMock
         cluster_name = "test-cluster"
         cluster_id = "j-XWO1UKVCC6FCV"
-        cluster_arn = f"arn:aws:elasticmapreduce:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:cluster/{cluster_name}"
+        cluster_arn = f"arn:aws:elasticmapreduce:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:cluster/{cluster_name}"
         emr_client.clusters = {
             "test-cluster": Cluster(
                 id=cluster_id,
                 arn=cluster_arn,
                 name=cluster_name,
                 status=ClusterStatus.TERMINATED,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 master_public_dns_name="test.amazonaws.com",
                 public=True,
             )
@@ -135,14 +135,14 @@ def test_cluster_private_bootstrapping(self):
         emr_client = mock.MagicMock
         cluster_name = "test-cluster"
         cluster_id = "j-XWO1UKVCC6FCV"
-        cluster_arn = f"arn:aws:elasticmapreduce:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:cluster/{cluster_name}"
+        cluster_arn = f"arn:aws:elasticmapreduce:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:cluster/{cluster_name}"
         emr_client.clusters = {
             "test-cluster": Cluster(
                 id=cluster_id,
                 arn=cluster_arn,
                 name=cluster_name,
                 status=ClusterStatus.BOOTSTRAPPING,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 master_public_dns_name="compute.internal",
                 public=False,
             )
@@ -160,7 +160,7 @@ def test_cluster_private_bootstrapping(self):
             result = check.execute()
 
             assert len(result) == 1
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
             assert result[0].resource_id == cluster_id
             assert result[0].resource_arn == cluster_arn
             assert result[0].status == "PASS"
diff --git a/tests/providers/aws/services/emr/emr_cluster_publicly_accesible/emr_cluster_publicly_accesible_test.py b/tests/providers/aws/services/emr/emr_cluster_publicly_accesible/emr_cluster_publicly_accesible_test.py
index 01498aa4f8f..481f3827e81 100644
--- a/tests/providers/aws/services/emr/emr_cluster_publicly_accesible/emr_cluster_publicly_accesible_test.py
+++ b/tests/providers/aws/services/emr/emr_cluster_publicly_accesible/emr_cluster_publicly_accesible_test.py
@@ -1,49 +1,18 @@
 from unittest import mock
 from uuid import uuid4
 
-from boto3 import resource, session
-from moto import mock_ec2
-from moto.core import DEFAULT_ACCOUNT_ID
+from boto3 import resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.audit_info import AWS_Audit_Info
 from prowler.providers.aws.services.emr.emr_service import Cluster, ClusterStatus, Node
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "eu-west-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_emr_cluster_publicly_accesible:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=None,
-            audited_account_arn=None,
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     def test_no_clusters(self):
         # EMR Client
         emr_client = mock.MagicMock
@@ -68,10 +37,10 @@ def test_no_clusters(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_clusters_master_public_sg(self):
         # EC2 Client
-        ec2 = resource("ec2", AWS_REGION)
+        ec2 = resource("ec2", AWS_REGION_EU_WEST_1)
         # Create Security Group
         master_security_group = ec2.create_security_group(
             GroupName=str(uuid4()), Description="test-decurity-group"
@@ -87,14 +56,14 @@ def test_clusters_master_public_sg(self):
         emr_client = mock.MagicMock
         cluster_name = "test-cluster"
         cluster_id = "j-XWO1UKVCC6FCV"
-        cluster_arn = f"arn:aws:elasticmapreduce:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:cluster/{cluster_name}"
+        cluster_arn = f"arn:aws:elasticmapreduce:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:cluster/{cluster_name}"
         emr_client.clusters = {
             "test-cluster": Cluster(
                 id=cluster_id,
                 arn=cluster_arn,
                 name=cluster_name,
                 status=ClusterStatus.RUNNING,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 master_public_dns_name="test.amazonaws.com",
                 public=True,
                 master=Node(
@@ -113,10 +82,10 @@ def test_clusters_master_public_sg(self):
             new=emr_client,
         ), mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.emr.emr_cluster_publicly_accesible.emr_cluster_publicly_accesible.ec2_client",
-            new=EC2(self.set_mocked_audit_info()),
+            new=EC2(set_mocked_aws_audit_info()),
         ):
             # Test Check
             from prowler.providers.aws.services.emr.emr_cluster_publicly_accesible.emr_cluster_publicly_accesible import (
@@ -127,7 +96,7 @@ def test_clusters_master_public_sg(self):
             result = check.execute()
 
             assert len(result) == 1
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
             assert result[0].resource_id == cluster_id
             assert result[0].resource_arn == cluster_arn
             assert result[0].status == "FAIL"
@@ -136,10 +105,10 @@ def test_clusters_master_public_sg(self):
                 == f"EMR Cluster {cluster_id} is publicly accessible through the following Security Groups: Master Node {master_expected_public_sgs}"
             )
 
-    @mock_ec2
+    @mock_aws
     def test_clusters_master_private_sg(self):
         # EC2 Client
-        ec2 = resource("ec2", AWS_REGION)
+        ec2 = resource("ec2", AWS_REGION_EU_WEST_1)
         # Create Security Group
         master_security_group = ec2.create_security_group(
             GroupName=str(uuid4()), Description="test-decurity-group"
@@ -155,14 +124,14 @@ def test_clusters_master_private_sg(self):
         emr_client = mock.MagicMock
         cluster_name = "test-cluster"
         cluster_id = "j-XWO1UKVCC6FCV"
-        cluster_arn = f"arn:aws:elasticmapreduce:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:cluster/{cluster_name}"
+        cluster_arn = f"arn:aws:elasticmapreduce:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:cluster/{cluster_name}"
         emr_client.clusters = {
             "test-cluster": Cluster(
                 id=cluster_id,
                 arn=cluster_arn,
                 name=cluster_name,
                 status=ClusterStatus.RUNNING,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 master_public_dns_name="test.amazonaws.com",
                 public=True,
                 master=Node(
@@ -179,10 +148,10 @@ def test_clusters_master_private_sg(self):
             new=emr_client,
         ), mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.emr.emr_cluster_publicly_accesible.emr_cluster_publicly_accesible.ec2_client",
-            new=EC2(self.set_mocked_audit_info()),
+            new=EC2(set_mocked_aws_audit_info()),
         ):
             # Test Check
             from prowler.providers.aws.services.emr.emr_cluster_publicly_accesible.emr_cluster_publicly_accesible import (
@@ -193,7 +162,7 @@ def test_clusters_master_private_sg(self):
             result = check.execute()
 
             assert len(result) == 1
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
             assert result[0].resource_id == cluster_id
             assert result[0].resource_arn == cluster_arn
             assert result[0].status == "PASS"
@@ -202,10 +171,10 @@ def test_clusters_master_private_sg(self):
                 == f"EMR Cluster {cluster_id} is not publicly accessible."
             )
 
-    @mock_ec2
+    @mock_aws
     def test_clusters_master_private_slave_public_sg(self):
         # EC2 Client
-        ec2 = resource("ec2", AWS_REGION)
+        ec2 = resource("ec2", AWS_REGION_EU_WEST_1)
         # Create Master Security Group
         master_security_group = ec2.create_security_group(
             GroupName=str(uuid4()), Description="test-decurity-group"
@@ -232,14 +201,14 @@ def test_clusters_master_private_slave_public_sg(self):
         emr_client = mock.MagicMock
         cluster_name = "test-cluster"
         cluster_id = "j-XWO1UKVCC6FCV"
-        cluster_arn = f"arn:aws:elasticmapreduce:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:cluster/{cluster_name}"
+        cluster_arn = f"arn:aws:elasticmapreduce:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:cluster/{cluster_name}"
         emr_client.clusters = {
             "test-cluster": Cluster(
                 id=cluster_id,
                 arn=cluster_arn,
                 name=cluster_name,
                 status=ClusterStatus.RUNNING,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 master_public_dns_name="test.amazonaws.com",
                 public=True,
                 master=Node(
@@ -262,10 +231,10 @@ def test_clusters_master_private_slave_public_sg(self):
             new=emr_client,
         ), mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.emr.emr_cluster_publicly_accesible.emr_cluster_publicly_accesible.ec2_client",
-            new=EC2(self.set_mocked_audit_info()),
+            new=EC2(set_mocked_aws_audit_info()),
         ):
             # Test Check
             from prowler.providers.aws.services.emr.emr_cluster_publicly_accesible.emr_cluster_publicly_accesible import (
@@ -276,7 +245,7 @@ def test_clusters_master_private_slave_public_sg(self):
             result = check.execute()
 
             assert len(result) == 1
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
             assert result[0].resource_id == cluster_id
             assert result[0].resource_arn == cluster_arn
             assert result[0].status == "FAIL"
@@ -285,10 +254,10 @@ def test_clusters_master_private_slave_public_sg(self):
                 == f"EMR Cluster {cluster_id} is publicly accessible through the following Security Groups: Slaves Nodes {slave_expected_public_sgs}"
             )
 
-    @mock_ec2
+    @mock_aws
     def test_clusters_master_public_slave_private_two_sg(self):
         # EC2 Client
-        ec2 = resource("ec2", AWS_REGION)
+        ec2 = resource("ec2", AWS_REGION_EU_WEST_1)
         # Create Master Security Group
         master_security_group = ec2.create_security_group(
             GroupName=str(uuid4()), Description="test-decurity-group"
@@ -315,14 +284,14 @@ def test_clusters_master_public_slave_private_two_sg(self):
         emr_client = mock.MagicMock
         cluster_name = "test-cluster"
         cluster_id = "j-XWO1UKVCC6FCV"
-        cluster_arn = f"arn:aws:elasticmapreduce:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:cluster/{cluster_name}"
+        cluster_arn = f"arn:aws:elasticmapreduce:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:cluster/{cluster_name}"
         emr_client.clusters = {
             "test-cluster": Cluster(
                 id=cluster_id,
                 arn=cluster_arn,
                 name=cluster_name,
                 status=ClusterStatus.RUNNING,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 master_public_dns_name="test.amazonaws.com",
                 public=True,
                 master=Node(
@@ -348,10 +317,10 @@ def test_clusters_master_public_slave_private_two_sg(self):
             new=emr_client,
         ), mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.emr.emr_cluster_publicly_accesible.emr_cluster_publicly_accesible.ec2_client",
-            new=EC2(self.set_mocked_audit_info()),
+            new=EC2(set_mocked_aws_audit_info()),
         ):
             # Test Check
             from prowler.providers.aws.services.emr.emr_cluster_publicly_accesible.emr_cluster_publicly_accesible import (
@@ -362,7 +331,7 @@ def test_clusters_master_public_slave_private_two_sg(self):
             result = check.execute()
 
             assert len(result) == 1
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
             assert result[0].resource_id == cluster_id
             assert result[0].resource_arn == cluster_arn
             assert result[0].status == "FAIL"
@@ -371,10 +340,10 @@ def test_clusters_master_public_slave_private_two_sg(self):
                 == f"EMR Cluster {cluster_id} is publicly accessible through the following Security Groups: Master Node {master_expected_public_sgs}"
             )
 
-    @mock_ec2
+    @mock_aws
     def test_clusters_master_private_slave_public_sg_none_additional_sgs(self):
         # EC2 Client
-        ec2 = resource("ec2", AWS_REGION)
+        ec2 = resource("ec2", AWS_REGION_EU_WEST_1)
         # Create Master Security Group
         master_security_group = ec2.create_security_group(
             GroupName=str(uuid4()), Description="test-decurity-group"
@@ -401,14 +370,14 @@ def test_clusters_master_private_slave_public_sg_none_additional_sgs(self):
         emr_client = mock.MagicMock
         cluster_name = "test-cluster"
         cluster_id = "j-XWO1UKVCC6FCV"
-        cluster_arn = f"arn:aws:elasticmapreduce:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:cluster/{cluster_name}"
+        cluster_arn = f"arn:aws:elasticmapreduce:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:cluster/{cluster_name}"
         emr_client.clusters = {
             "test-cluster": Cluster(
                 id=cluster_id,
                 arn=cluster_arn,
                 name=cluster_name,
                 status=ClusterStatus.RUNNING,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 master_public_dns_name="test.amazonaws.com",
                 public=True,
                 master=Node(
@@ -431,10 +400,10 @@ def test_clusters_master_private_slave_public_sg_none_additional_sgs(self):
             new=emr_client,
         ), mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
-            self.set_mocked_audit_info(),
+            set_mocked_aws_audit_info(),
         ), mock.patch(
             "prowler.providers.aws.services.emr.emr_cluster_publicly_accesible.emr_cluster_publicly_accesible.ec2_client",
-            new=EC2(self.set_mocked_audit_info()),
+            new=EC2(set_mocked_aws_audit_info()),
         ):
             # Test Check
             from prowler.providers.aws.services.emr.emr_cluster_publicly_accesible.emr_cluster_publicly_accesible import (
@@ -445,7 +414,7 @@ def test_clusters_master_private_slave_public_sg_none_additional_sgs(self):
             result = check.execute()
 
             assert len(result) == 1
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
             assert result[0].resource_id == cluster_id
             assert result[0].resource_arn == cluster_arn
             assert result[0].status == "FAIL"
diff --git a/tests/providers/aws/services/emr/emr_service_test.py b/tests/providers/aws/services/emr/emr_service_test.py
index 6a4cc8accf9..be1dd131bfd 100644
--- a/tests/providers/aws/services/emr/emr_service_test.py
+++ b/tests/providers/aws/services/emr/emr_service_test.py
@@ -2,17 +2,15 @@
 from unittest.mock import patch
 
 import botocore
-from boto3 import client, session
-from moto import mock_emr
-from moto.core import DEFAULT_ACCOUNT_ID
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.emr.emr_service import EMR, ClusterStatus
-from prowler.providers.common.models import Audit_Metadata
-
-# Mock Test Region
-AWS_REGION = "eu-west-1"
-
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    set_mocked_aws_audit_info,
+)
 
 # Mocking Access Analyzer Calls
 make_api_call = botocore.client.BaseClient._make_api_call
@@ -38,10 +36,12 @@ def mock_make_api_call(self, operation_name, kwarg):
 
 
 # Mock generate_regional_clients()
-def mock_generate_regional_clients(service, audit_info, _):
-    regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
-    regional_client.region = AWS_REGION
-    return {AWS_REGION: regional_client}
+def mock_generate_regional_clients(service, audit_info):
+    regional_client = audit_info.audit_session.client(
+        service, region_name=AWS_REGION_EU_WEST_1
+    )
+    regional_client.region = AWS_REGION_EU_WEST_1
+    return {AWS_REGION_EU_WEST_1: regional_client}
 
 
 @patch(
@@ -50,59 +50,29 @@ def mock_generate_regional_clients(service, audit_info, _):
 )
 @patch("botocore.client.BaseClient._make_api_call", new=mock_make_api_call)
 class Test_EMR_Service:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=DEFAULT_ACCOUNT_ID,
-            audited_account_arn=f"arn:aws:iam::{DEFAULT_ACCOUNT_ID}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test EMR Client
-    @mock_emr
+    @mock_aws
     def test__get_client__(self):
-        emr = EMR(self.set_mocked_audit_info())
-        assert emr.regional_clients[AWS_REGION].__class__.__name__ == "EMR"
+        emr = EMR(set_mocked_aws_audit_info())
+        assert emr.regional_clients[AWS_REGION_EU_WEST_1].__class__.__name__ == "EMR"
 
     # Test EMR Session
-    @mock_emr
+    @mock_aws
     def test__get_session__(self):
-        emr = EMR(self.set_mocked_audit_info())
+        emr = EMR(set_mocked_aws_audit_info())
         assert emr.session.__class__.__name__ == "Session"
 
     # Test EMR Service
-    @mock_emr
+    @mock_aws
     def test__get_service__(self):
-        emr = EMR(self.set_mocked_audit_info())
+        emr = EMR(set_mocked_aws_audit_info())
         assert emr.service == "emr"
 
     # Test __list_clusters__ and __describe_cluster__
-    @mock_emr
+    @mock_aws
     def test__list_clusters__(self):
         # Create EMR Cluster
-        emr_client = client("emr", region_name=AWS_REGION)
+        emr_client = client("emr", region_name=AWS_REGION_EU_WEST_1)
         cluster_name = "test-cluster"
         run_job_flow_args = dict(
             Instances={
@@ -123,7 +93,7 @@ def test__list_clusters__(self):
         )
         cluster_id = emr_client.run_job_flow(**run_job_flow_args)["JobFlowId"]
         # EMR Class
-        emr = EMR(self.set_mocked_audit_info())
+        emr = EMR(set_mocked_aws_audit_info())
 
         assert len(emr.clusters) == 1
         assert emr.clusters[cluster_id].id == cluster_id
@@ -131,9 +101,9 @@ def test__list_clusters__(self):
         assert emr.clusters[cluster_id].status == ClusterStatus.WAITING
         assert (
             emr.clusters[cluster_id].arn
-            == f"arn:aws:elasticmapreduce:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:cluster/{cluster_id}"
+            == f"arn:aws:elasticmapreduce:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:cluster/{cluster_id}"
         )
-        assert emr.clusters[cluster_id].region == AWS_REGION
+        assert emr.clusters[cluster_id].region == AWS_REGION_EU_WEST_1
         assert (
             emr.clusters[cluster_id].master_public_dns_name
             == "ec2-184-0-0-1.us-west-1.compute.amazonaws.com"
@@ -143,11 +113,11 @@ def test__list_clusters__(self):
             {"Key": "test", "Value": "test"},
         ]
 
-    @mock_emr
+    @mock_aws
     def test__get_block_public_access_configuration__(self):
-        emr = EMR(self.set_mocked_audit_info())
+        emr = EMR(set_mocked_aws_audit_info())
 
         assert len(emr.block_public_access_configuration) == 1
         assert emr.block_public_access_configuration[
-            AWS_REGION
+            AWS_REGION_EU_WEST_1
         ].block_public_security_group_rules
diff --git a/tests/providers/aws/services/fms/fms_policy_compliant/fms_policy_compliant_test.py b/tests/providers/aws/services/fms/fms_policy_compliant/fms_policy_compliant_test.py
index b3a77bd3243..18325fb7447 100644
--- a/tests/providers/aws/services/fms/fms_policy_compliant/fms_policy_compliant_test.py
+++ b/tests/providers/aws/services/fms/fms_policy_compliant/fms_policy_compliant_test.py
@@ -4,15 +4,16 @@
     Policy,
     PolicyAccountComplianceStatus,
 )
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+)
 
 
 class Test_fms_policy_compliant:
     def test_fms_not_admin(self):
         fms_client = mock.MagicMock
-        fms_client.region = AWS_REGION
+        fms_client.region = AWS_REGION_US_EAST_1
         fms_client.fms_admin_account = False
         with mock.patch(
             "prowler.providers.aws.services.fms.fms_service.FMS",
@@ -32,7 +33,7 @@ def test_fms_admin_with_non_compliant_policies(self):
         fms_client = mock.MagicMock
         fms_client.audited_account = AWS_ACCOUNT_NUMBER
         fms_client.audited_account_arn = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
-        fms_client.region = AWS_REGION
+        fms_client.region = AWS_REGION_US_EAST_1
         fms_client.fms_admin_account = True
         fms_client.fms_policies = [
             Policy(
@@ -72,13 +73,13 @@ def test_fms_admin_with_non_compliant_policies(self):
             )
             assert result[0].resource_id == "12345678901"
             assert result[0].resource_arn == "arn:aws:fms:us-east-1:12345678901"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
     def test_fms_admin_with_compliant_policies(self):
         fms_client = mock.MagicMock
         fms_client.audited_account = AWS_ACCOUNT_NUMBER
         fms_client.audited_account_arn = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
-        fms_client.region = AWS_REGION
+        fms_client.region = AWS_REGION_US_EAST_1
         fms_client.fms_admin_account = True
         fms_client.fms_policies = [
             Policy(
@@ -117,13 +118,13 @@ def test_fms_admin_with_compliant_policies(self):
             )
             assert result[0].resource_id == AWS_ACCOUNT_NUMBER
             assert result[0].resource_arn == f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
     def test_fms_admin_with_non_and_compliant_policies(self):
         fms_client = mock.MagicMock
         fms_client.audited_account = AWS_ACCOUNT_NUMBER
         fms_client.audited_account_arn = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
-        fms_client.region = AWS_REGION
+        fms_client.region = AWS_REGION_US_EAST_1
         fms_client.fms_admin_account = True
         fms_client.fms_policies = [
             Policy(
@@ -168,4 +169,79 @@ def test_fms_admin_with_non_and_compliant_policies(self):
             )
             assert result[0].resource_id == "12345678901"
             assert result[0].resource_arn == "arn:aws:fms:us-east-1:12345678901"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
+
+    def test_fms_admin_without_policies(self):
+        fms_client = mock.MagicMock
+        fms_client.audited_account = AWS_ACCOUNT_NUMBER
+        fms_client.audited_account_arn = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
+        fms_client.region = AWS_REGION_US_EAST_1
+        fms_client.fms_admin_account = True
+        fms_client.fms_policies = []
+        with mock.patch(
+            "prowler.providers.aws.services.fms.fms_service.FMS",
+            new=fms_client,
+        ):
+            # Test Check
+            from prowler.providers.aws.services.fms.fms_policy_compliant.fms_policy_compliant import (
+                fms_policy_compliant,
+            )
+
+            check = fms_policy_compliant()
+            result = check.execute()
+
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"FMS without any compliant policy for account {AWS_ACCOUNT_NUMBER}."
+            )
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+            assert result[0].resource_arn == fms_client.audited_account_arn
+            assert result[0].region == AWS_REGION_US_EAST_1
+
+    def test_fms_admin_with_policy_with_null_status(self):
+        fms_client = mock.MagicMock
+        fms_client.audited_account = AWS_ACCOUNT_NUMBER
+        fms_client.audited_account_arn = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
+        fms_client.region = AWS_REGION_US_EAST_1
+        fms_client.fms_admin_account = True
+        fms_client.fms_policies = [
+            Policy(
+                arn="arn:aws:fms:us-east-1:12345678901",
+                id="12345678901",
+                name="test",
+                resource_type="AWS::EC2::Instance",
+                service_type="WAF",
+                remediation_enabled=True,
+                delete_unused_managed_resources=True,
+                compliance_status=[
+                    PolicyAccountComplianceStatus(
+                        account_id="12345678901",
+                        policy_id="12345678901",
+                        status="",
+                    ),
+                ],
+            )
+        ]
+        with mock.patch(
+            "prowler.providers.aws.services.fms.fms_service.FMS",
+            new=fms_client,
+        ):
+            # Test Check
+            from prowler.providers.aws.services.fms.fms_policy_compliant.fms_policy_compliant import (
+                fms_policy_compliant,
+            )
+
+            check = fms_policy_compliant()
+            result = check.execute()
+
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"FMS with non-compliant policy {fms_client.fms_policies[0].name} for account {fms_client.fms_policies[0].compliance_status[0].account_id}."
+            )
+            assert result[0].resource_id == "12345678901"
+            assert result[0].resource_arn == "arn:aws:fms:us-east-1:12345678901"
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/fms/fms_service_test.py b/tests/providers/aws/services/fms/fms_service_test.py
index 6d432db454c..dd0ce16c98f 100644
--- a/tests/providers/aws/services/fms/fms_service_test.py
+++ b/tests/providers/aws/services/fms/fms_service_test.py
@@ -2,14 +2,10 @@
 from unittest.mock import patch
 
 import botocore
-from boto3 import session
 
-from prowler.providers.aws.lib.audit_info.audit_info import AWS_Audit_Info
 from prowler.providers.aws.services.fms.fms_service import FMS
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import set_mocked_aws_audit_info
 
-# Mock Test Region
-AWS_REGION = "us-east-1"
 POLICY_ARN = "arn:aws:fms:us-east-1:123456789012:policy/MyFMSManagedPolicy"
 POLICY_ID = "12345678-1234-1234-1234-123456789012"
 POLICY_NAME = "MyFMSManagedPolicy"
@@ -65,49 +61,18 @@ def mock_make_api_call(self, operation_name, kwargs):
 # Patch every AWS call using Boto3
 @patch("botocore.client.BaseClient._make_api_call", new=mock_make_api_call)
 class Test_FMS_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=None,
-            audited_account_arn=None,
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     def test__get_client__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         fms = FMS(audit_info)
         assert fms.client.__class__.__name__ == "FMS"
 
     def test__get_service__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         fms = FMS(audit_info)
         assert fms.service == "fms"
 
     def test__list_policies__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         fms = FMS(audit_info)
         assert len(fms.fms_policies) == 1
         assert fms.fms_admin_account is True
@@ -123,7 +88,7 @@ def test__list_policies__(self):
         )
 
     def test__list_compliance_status__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         fms = FMS(audit_info)
         assert len(fms.fms_policies) == 1
         assert fms.fms_policies[0].compliance_status[0].status == "COMPLIANT"
diff --git a/tests/providers/aws/services/glacier/glacier_service_test.py b/tests/providers/aws/services/glacier/glacier_service_test.py
index 8c8a3f63a6d..acaf3c0fdd5 100644
--- a/tests/providers/aws/services/glacier/glacier_service_test.py
+++ b/tests/providers/aws/services/glacier/glacier_service_test.py
@@ -2,29 +2,27 @@
 from unittest.mock import patch
 
 import botocore
-from boto3 import session
-from moto.core import DEFAULT_ACCOUNT_ID
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.glacier.glacier_service import Glacier
-from prowler.providers.common.models import Audit_Metadata
-
-# Mock Test Region
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 # Mocking Access Analyzer Calls
 make_api_call = botocore.client.BaseClient._make_api_call
 
 TEST_VAULT_ARN = (
-    f"arn:aws:glacier:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:vaults/examplevault"
+    f"arn:aws:glacier:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:vaults/examplevault"
 )
 vault_json_policy = {
     "Version": "2012-10-17",
     "Statement": [
         {
             "Sid": "cross-account-upload",
-            "Principal": {"AWS": [f"arn:aws:iam::{DEFAULT_ACCOUNT_ID}:root"]},
+            "Principal": {"AWS": [f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"]},
             "Effect": "Allow",
             "Action": [
                 "glacier:UploadArchive",
@@ -64,10 +62,12 @@ def mock_make_api_call(self, operation_name, kwarg):
 
 
 # Mock generate_regional_clients()
-def mock_generate_regional_clients(service, audit_info, _):
-    regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
-    regional_client.region = AWS_REGION
-    return {AWS_REGION: regional_client}
+def mock_generate_regional_clients(service, audit_info):
+    regional_client = audit_info.audit_session.client(
+        service, region_name=AWS_REGION_EU_WEST_1
+    )
+    regional_client.region = AWS_REGION_EU_WEST_1
+    return {AWS_REGION_EU_WEST_1: regional_client}
 
 
 # Patch every AWS call using Boto3 and generate_regional_clients to have 1 client
@@ -77,76 +77,58 @@ def mock_generate_regional_clients(service, audit_info, _):
     new=mock_generate_regional_clients,
 )
 class Test_Glacier_Service:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
     # Test Glacier Client
     def test__get_client__(self):
-        glacier = Glacier(self.set_mocked_audit_info())
-        assert glacier.regional_clients[AWS_REGION].__class__.__name__ == "Glacier"
+        glacier = Glacier(
+            set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+        )
+        assert (
+            glacier.regional_clients[AWS_REGION_EU_WEST_1].__class__.__name__
+            == "Glacier"
+        )
 
     # Test Glacier Session
     def test__get_session__(self):
-        glacier = Glacier(self.set_mocked_audit_info())
+        glacier = Glacier(
+            set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+        )
         assert glacier.session.__class__.__name__ == "Session"
 
     # Test Glacier Service
     def test__get_service__(self):
-        glacier = Glacier(self.set_mocked_audit_info())
+        glacier = Glacier(
+            set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+        )
         assert glacier.service == "glacier"
 
     def test__list_vaults__(self):
         # Set partition for the service
-        glacier = Glacier(self.set_mocked_audit_info())
+        glacier = Glacier(
+            set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+        )
         vault_name = "examplevault"
         assert len(glacier.vaults) == 1
         assert glacier.vaults[TEST_VAULT_ARN]
         assert glacier.vaults[TEST_VAULT_ARN].name == vault_name
         assert (
             glacier.vaults[TEST_VAULT_ARN].arn
-            == f"arn:aws:glacier:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:vaults/examplevault"
+            == f"arn:aws:glacier:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:vaults/examplevault"
         )
-        assert glacier.vaults[TEST_VAULT_ARN].region == AWS_REGION
+        assert glacier.vaults[TEST_VAULT_ARN].region == AWS_REGION_EU_WEST_1
         assert glacier.vaults[TEST_VAULT_ARN].tags == [{"test": "test"}]
 
     def test__get_vault_access_policy__(self):
         # Set partition for the service
-        glacier = Glacier(self.set_mocked_audit_info())
+        glacier = Glacier(
+            set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1, AWS_REGION_US_EAST_1])
+        )
         vault_name = "examplevault"
         assert len(glacier.vaults) == 1
         assert glacier.vaults[TEST_VAULT_ARN]
         assert glacier.vaults[TEST_VAULT_ARN].name == vault_name
         assert (
             glacier.vaults[TEST_VAULT_ARN].arn
-            == f"arn:aws:glacier:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:vaults/examplevault"
+            == f"arn:aws:glacier:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:vaults/examplevault"
         )
-        assert glacier.vaults[TEST_VAULT_ARN].region == AWS_REGION
+        assert glacier.vaults[TEST_VAULT_ARN].region == AWS_REGION_EU_WEST_1
         assert glacier.vaults[TEST_VAULT_ARN].access_policy == vault_json_policy
diff --git a/tests/providers/aws/services/glacier/glacier_vaults_policy_public_access/glacier_vaults_policy_public_access_test.py b/tests/providers/aws/services/glacier/glacier_vaults_policy_public_access/glacier_vaults_policy_public_access_test.py
index e5145fae711..fe18b12a42b 100644
--- a/tests/providers/aws/services/glacier/glacier_vaults_policy_public_access/glacier_vaults_policy_public_access_test.py
+++ b/tests/providers/aws/services/glacier/glacier_vaults_policy_public_access/glacier_vaults_policy_public_access_test.py
@@ -1,10 +1,10 @@
 from unittest import mock
 
-from moto.core import DEFAULT_ACCOUNT_ID
-
 from prowler.providers.aws.services.glacier.glacier_service import Vault
-
-AWS_REGION = "eu-west-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+)
 
 
 class Test_glacier_vaults_policy_public_access:
@@ -28,15 +28,13 @@ def test_no_vaults(self):
     def test_vault_no_policy(self):
         glacier_client = mock.MagicMock
         vault_name = "test-vault"
-        vault_arn = (
-            f"arn:aws:glacier:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:vaults/examplevault"
-        )
+        vault_arn = f"arn:aws:glacier:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:vaults/examplevault"
         glacier_client.vaults = {
             vault_name: Vault(
                 name=vault_name,
                 arn=vault_arn,
                 access_policy={},
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
             )
         }
         with mock.patch(
@@ -52,7 +50,7 @@ def test_vault_no_policy(self):
             result = check.execute()
 
             assert len(result) == 1
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
             assert result[0].resource_id == vault_name
             assert result[0].resource_arn == vault_arn
             assert result[0].status == "PASS"
@@ -64,9 +62,7 @@ def test_vault_no_policy(self):
     def test_vault_policy_pricipal_aws_list_asterisk(self):
         glacier_client = mock.MagicMock
         vault_name = "test-vault"
-        vault_arn = (
-            f"arn:aws:glacier:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:vaults/examplevault"
-        )
+        vault_arn = f"arn:aws:glacier:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:vaults/examplevault"
         glacier_client.vaults = {
             vault_name: Vault(
                 name=vault_name,
@@ -76,7 +72,7 @@ def test_vault_policy_pricipal_aws_list_asterisk(self):
                     "Statement": [
                         {
                             "Sid": "cross-account-upload",
-                            "Principal": {"AWS": ["*", DEFAULT_ACCOUNT_ID]},
+                            "Principal": {"AWS": ["*", AWS_ACCOUNT_NUMBER]},
                             "Effect": "Allow",
                             "Action": [
                                 "glacier:UploadArchive",
@@ -85,12 +81,12 @@ def test_vault_policy_pricipal_aws_list_asterisk(self):
                                 "glacier:CompleteMultipartUpload",
                             ],
                             "Resource": [
-                                f"arn:aws:glacier:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:vaults/examplevault"
+                                f"arn:aws:glacier:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:vaults/examplevault"
                             ],
                         }
                     ],
                 },
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
             )
         }
         with mock.patch(
@@ -106,7 +102,7 @@ def test_vault_policy_pricipal_aws_list_asterisk(self):
             result = check.execute()
 
             assert len(result) == 1
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
             assert result[0].resource_id == vault_name
             assert result[0].resource_arn == vault_arn
             assert result[0].status == "FAIL"
@@ -118,9 +114,7 @@ def test_vault_policy_pricipal_aws_list_asterisk(self):
     def test_vault_policy_pricipal_asterisk(self):
         glacier_client = mock.MagicMock
         vault_name = "test-vault"
-        vault_arn = (
-            f"arn:aws:glacier:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:vaults/examplevault"
-        )
+        vault_arn = f"arn:aws:glacier:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:vaults/examplevault"
         glacier_client.vaults = {
             vault_name: Vault(
                 name=vault_name,
@@ -139,12 +133,12 @@ def test_vault_policy_pricipal_asterisk(self):
                                 "glacier:CompleteMultipartUpload",
                             ],
                             "Resource": [
-                                f"arn:aws:glacier:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:vaults/examplevault"
+                                f"arn:aws:glacier:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:vaults/examplevault"
                             ],
                         }
                     ],
                 },
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
             )
         }
         with mock.patch(
@@ -160,7 +154,7 @@ def test_vault_policy_pricipal_asterisk(self):
             result = check.execute()
 
             assert len(result) == 1
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
             assert result[0].resource_id == vault_name
             assert result[0].resource_arn == vault_arn
             assert result[0].status == "FAIL"
@@ -172,9 +166,7 @@ def test_vault_policy_pricipal_asterisk(self):
     def test_vault_policy_pricipal_canonical_user_asterisk(self):
         glacier_client = mock.MagicMock
         vault_name = "test-vault"
-        vault_arn = (
-            f"arn:aws:glacier:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:vaults/examplevault"
-        )
+        vault_arn = f"arn:aws:glacier:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:vaults/examplevault"
         glacier_client.vaults = {
             vault_name: Vault(
                 name=vault_name,
@@ -193,12 +185,12 @@ def test_vault_policy_pricipal_canonical_user_asterisk(self):
                                 "glacier:CompleteMultipartUpload",
                             ],
                             "Resource": [
-                                f"arn:aws:glacier:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:vaults/examplevault"
+                                f"arn:aws:glacier:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:vaults/examplevault"
                             ],
                         }
                     ],
                 },
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
             )
         }
         with mock.patch(
@@ -214,7 +206,7 @@ def test_vault_policy_pricipal_canonical_user_asterisk(self):
             result = check.execute()
 
             assert len(result) == 1
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
             assert result[0].resource_id == vault_name
             assert result[0].resource_arn == vault_arn
             assert result[0].status == "FAIL"
@@ -226,9 +218,7 @@ def test_vault_policy_pricipal_canonical_user_asterisk(self):
     def test_vault_policy_private(self):
         glacier_client = mock.MagicMock
         vault_name = "test-vault"
-        vault_arn = (
-            f"arn:aws:glacier:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:vaults/examplevault"
-        )
+        vault_arn = f"arn:aws:glacier:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:vaults/examplevault"
         glacier_client.vaults = {
             vault_name: Vault(
                 name=vault_name,
@@ -240,7 +230,7 @@ def test_vault_policy_private(self):
                             "Sid": "cross-account-upload",
                             "Principal": {
                                 "CanonicalUser": [
-                                    f"arn:aws:iam::{DEFAULT_ACCOUNT_ID}:root",
+                                    f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
                                 ]
                             },
                             "Effect": "Allow",
@@ -251,12 +241,12 @@ def test_vault_policy_private(self):
                                 "glacier:CompleteMultipartUpload",
                             ],
                             "Resource": [
-                                f"arn:aws:glacier:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:vaults/examplevault"
+                                f"arn:aws:glacier:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:vaults/examplevault"
                             ],
                         }
                     ],
                 },
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
             )
         }
         with mock.patch(
@@ -272,7 +262,7 @@ def test_vault_policy_private(self):
             result = check.execute()
 
             assert len(result) == 1
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
             assert result[0].resource_id == vault_name
             assert result[0].resource_arn == vault_arn
             assert result[0].status == "PASS"
diff --git a/tests/providers/aws/services/globalaccelerator/globalaccelerator_service_test.py b/tests/providers/aws/services/globalaccelerator/globalaccelerator_service_test.py
index 9e0f076d0d2..a4e299b4585 100644
--- a/tests/providers/aws/services/globalaccelerator/globalaccelerator_service_test.py
+++ b/tests/providers/aws/services/globalaccelerator/globalaccelerator_service_test.py
@@ -1,21 +1,19 @@
 import botocore
-from boto3 import session
 from mock import patch
-from moto.core import DEFAULT_ACCOUNT_ID
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.globalaccelerator.globalaccelerator_service import (
     GlobalAccelerator,
 )
-from prowler.providers.common.models import Audit_Metadata
-
-# Mock Test Region
-AWS_REGION = "us-west-2"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_WEST_2,
+    set_mocked_aws_audit_info,
+)
 
 # Mocking Access Analyzer Calls
 make_api_call = botocore.client.BaseClient._make_api_call
 
-TEST_ACCELERATOR_ARN = f"arn:aws:globalaccelerator::{DEFAULT_ACCOUNT_ID}:accelerator/5555abcd-abcd-5555-abcd-5555EXAMPLE1"
+TEST_ACCELERATOR_ARN = f"arn:aws:globalaccelerator::{AWS_ACCOUNT_NUMBER}:accelerator/5555abcd-abcd-5555-abcd-5555EXAMPLE1"
 
 
 def mock_make_api_call(self, operation_name, kwarg):
@@ -50,61 +48,30 @@ def mock_make_api_call(self, operation_name, kwarg):
 # Patch every AWS call using Boto3 and generate_regional_clients to have 1 client
 @patch("botocore.client.BaseClient._make_api_call", new=mock_make_api_call)
 class Test_GlobalAccelerator_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=DEFAULT_ACCOUNT_ID,
-            audited_account_arn=f"arn:aws:iam::{DEFAULT_ACCOUNT_ID}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=AWS_REGION,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test GlobalAccelerator Service
     def test_service(self):
         # GlobalAccelerator client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         globalaccelerator = GlobalAccelerator(audit_info)
         assert globalaccelerator.service == "globalaccelerator"
 
     # Test GlobalAccelerator Client
     def test_client(self):
         # GlobalAccelerator client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         globalaccelerator = GlobalAccelerator(audit_info)
         assert globalaccelerator.client.__class__.__name__ == "GlobalAccelerator"
 
     # Test GlobalAccelerator Session
     def test__get_session__(self):
         # GlobalAccelerator client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         globalaccelerator = GlobalAccelerator(audit_info)
         assert globalaccelerator.session.__class__.__name__ == "Session"
 
     def test__list_accelerators__(self):
         # GlobalAccelerator client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         globalaccelerator = GlobalAccelerator(audit_info)
 
         accelerator_name = "TestAccelerator"
@@ -120,5 +87,8 @@ def test__list_accelerators__(self):
             globalaccelerator.accelerators[TEST_ACCELERATOR_ARN].arn
             == TEST_ACCELERATOR_ARN
         )
-        assert globalaccelerator.accelerators[TEST_ACCELERATOR_ARN].region == AWS_REGION
+        assert (
+            globalaccelerator.accelerators[TEST_ACCELERATOR_ARN].region
+            == AWS_REGION_US_WEST_2
+        )
         assert globalaccelerator.accelerators[TEST_ACCELERATOR_ARN].enabled
diff --git a/tests/providers/aws/services/glue/glue_data_catalogs_connection_passwords_encryption_enabled/glue_data_catalogs_connection_passwords_encryption_enabled_test.py b/tests/providers/aws/services/glue/glue_data_catalogs_connection_passwords_encryption_enabled/glue_data_catalogs_connection_passwords_encryption_enabled_test.py
index f1750d05cba..73d3dbf91bc 100644
--- a/tests/providers/aws/services/glue/glue_data_catalogs_connection_passwords_encryption_enabled/glue_data_catalogs_connection_passwords_encryption_enabled_test.py
+++ b/tests/providers/aws/services/glue/glue_data_catalogs_connection_passwords_encryption_enabled/glue_data_catalogs_connection_passwords_encryption_enabled_test.py
@@ -1,52 +1,16 @@
 from unittest import mock
 
-from boto3 import session
-
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.glue.glue_service import CatalogEncryptionSetting
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_glue_data_catalogs_connection_passwords_encryption_enabled:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-                region_name=AWS_REGION,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=AWS_REGION,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-            ignore_unused_services=False,
-        )
-        return audit_info
-
     def test_glue_no_settings(self):
         glue_client = mock.MagicMock
-        glue_client.audit_info = self.set_mocked_audit_info()
+        glue_client.audit_info = set_mocked_aws_audit_info()
         glue_client.catalog_encryption_settings = []
 
         with mock.patch(
@@ -65,13 +29,13 @@ def test_glue_no_settings(self):
 
     def test_glue_catalog_password_unencrypted(self):
         glue_client = mock.MagicMock
-        glue_client.audit_info = self.set_mocked_audit_info()
+        glue_client.audit_info = set_mocked_aws_audit_info()
         glue_client.catalog_encryption_settings = [
             CatalogEncryptionSetting(
                 mode="DISABLED",
                 tables=False,
                 kms_id=None,
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 password_encryption=False,
                 password_kms_id=None,
             )
@@ -97,17 +61,17 @@ def test_glue_catalog_password_unencrypted(self):
                 == "Glue data catalog connection password is not encrypted."
             )
             assert result[0].resource_id == "12345678912"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
     def test_glue_catalog_password_unencrypted_ignoring(self):
         glue_client = mock.MagicMock
-        glue_client.audit_info = self.set_mocked_audit_info()
+        glue_client.audit_info = set_mocked_aws_audit_info()
         glue_client.catalog_encryption_settings = [
             CatalogEncryptionSetting(
                 mode="DISABLED",
                 tables=False,
                 kms_id=None,
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 password_encryption=False,
                 password_kms_id=None,
             )
@@ -130,13 +94,13 @@ def test_glue_catalog_password_unencrypted_ignoring(self):
 
     def test_glue_catalog_password_unencrypted_ignoring_with_tables(self):
         glue_client = mock.MagicMock
-        glue_client.audit_info = self.set_mocked_audit_info()
+        glue_client.audit_info = set_mocked_aws_audit_info()
         glue_client.catalog_encryption_settings = [
             CatalogEncryptionSetting(
                 mode="DISABLED",
                 tables=True,
                 kms_id=None,
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 password_encryption=False,
                 password_kms_id=None,
             )
@@ -162,16 +126,16 @@ def test_glue_catalog_password_unencrypted_ignoring_with_tables(self):
                 == "Glue data catalog connection password is not encrypted."
             )
             assert result[0].resource_id == "12345678912"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
     def test_glue_catalog_encrypted(self):
         glue_client = mock.MagicMock
-        glue_client.audit_info = self.set_mocked_audit_info()
+        glue_client.audit_info = set_mocked_aws_audit_info()
         glue_client.catalog_encryption_settings = [
             CatalogEncryptionSetting(
                 mode="DISABLED",
                 tables=False,
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 password_encryption=True,
                 password_kms_id="kms-key",
             )
@@ -197,4 +161,4 @@ def test_glue_catalog_encrypted(self):
                 == "Glue data catalog connection password is encrypted with KMS key kms-key."
             )
             assert result[0].resource_id == "12345678912"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/glue/glue_data_catalogs_metadata_encryption_enabled/glue_data_catalogs_metadata_encryption_enabled_test.py b/tests/providers/aws/services/glue/glue_data_catalogs_metadata_encryption_enabled/glue_data_catalogs_metadata_encryption_enabled_test.py
index 6adddca894e..9d1e7faa524 100644
--- a/tests/providers/aws/services/glue/glue_data_catalogs_metadata_encryption_enabled/glue_data_catalogs_metadata_encryption_enabled_test.py
+++ b/tests/providers/aws/services/glue/glue_data_catalogs_metadata_encryption_enabled/glue_data_catalogs_metadata_encryption_enabled_test.py
@@ -1,53 +1,17 @@
 from re import search
 from unittest import mock
 
-from boto3 import session
-
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.glue.glue_service import CatalogEncryptionSetting
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_glue_data_catalogs_metadata_encryption_enabled:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-                region_name=AWS_REGION,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=AWS_REGION,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-            ignore_unused_services=False,
-        )
-        return audit_info
-
     def test_glue_no_settings(self):
         glue_client = mock.MagicMock
-        glue_client.audit_info = self.set_mocked_audit_info()
+        glue_client.audit_info = set_mocked_aws_audit_info
         glue_client.catalog_encryption_settings = []
 
         with mock.patch(
@@ -66,13 +30,13 @@ def test_glue_no_settings(self):
 
     def test_glue_catalog_unencrypted(self):
         glue_client = mock.MagicMock
-        glue_client.audit_info = self.set_mocked_audit_info()
+        glue_client.audit_info = set_mocked_aws_audit_info()
         glue_client.catalog_encryption_settings = [
             CatalogEncryptionSetting(
                 mode="disabled.",
                 tables=False,
                 kms_id=None,
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 password_encryption=False,
                 password_kms_id=None,
             )
@@ -98,17 +62,17 @@ def test_glue_catalog_unencrypted(self):
                 == "Glue data catalog settings have metadata encryption disabled."
             )
             assert result[0].resource_id == "12345678912"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
     def test_glue_catalog_unencrypted_ignoring(self):
         glue_client = mock.MagicMock
-        glue_client.audit_info = self.set_mocked_audit_info()
+        glue_client.audit_info = set_mocked_aws_audit_info()
         glue_client.catalog_encryption_settings = [
             CatalogEncryptionSetting(
                 mode="disabled.",
                 tables=False,
                 kms_id=None,
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 password_encryption=False,
                 password_kms_id=None,
             )
@@ -132,13 +96,13 @@ def test_glue_catalog_unencrypted_ignoring(self):
 
     def test_glue_catalog_unencrypted_ignoring_with_tables(self):
         glue_client = mock.MagicMock
-        glue_client.audit_info = self.set_mocked_audit_info()
+        glue_client.audit_info = set_mocked_aws_audit_info()
         glue_client.catalog_encryption_settings = [
             CatalogEncryptionSetting(
                 mode="disabled.",
                 tables=True,
                 kms_id=None,
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 password_encryption=False,
                 password_kms_id=None,
             )
@@ -165,17 +129,17 @@ def test_glue_catalog_unencrypted_ignoring_with_tables(self):
                 result[0].status_extended,
             )
             assert result[0].resource_id == "12345678912"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
     def test_glue_catalog_encrypted(self):
         glue_client = mock.MagicMock
-        glue_client.audit_info = self.set_mocked_audit_info()
+        glue_client.audit_info = set_mocked_aws_audit_info()
         glue_client.catalog_encryption_settings = [
             CatalogEncryptionSetting(
                 mode="SSE-KMS",
                 kms_id="kms-key",
                 tables=False,
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 password_encryption=False,
                 password_kms_id=None,
             )
@@ -201,4 +165,4 @@ def test_glue_catalog_encrypted(self):
                 == "Glue data catalog settings have metadata encryption enabled with KMS key kms-key."
             )
             assert result[0].resource_id == "12345678912"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/glue/glue_database_connections_ssl_enabled/glue_database_connections_ssl_enabled_test.py b/tests/providers/aws/services/glue/glue_database_connections_ssl_enabled/glue_database_connections_ssl_enabled_test.py
index c38426a8cca..df7e4d9616e 100644
--- a/tests/providers/aws/services/glue/glue_database_connections_ssl_enabled/glue_database_connections_ssl_enabled_test.py
+++ b/tests/providers/aws/services/glue/glue_database_connections_ssl_enabled/glue_database_connections_ssl_enabled_test.py
@@ -2,8 +2,7 @@
 from unittest import mock
 
 from prowler.providers.aws.services.glue.glue_service import Connection
-
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import AWS_REGION_US_EAST_1
 
 
 class Test_glue_database_connections_ssl_enabled:
@@ -37,7 +36,7 @@ def test_glue_table_no_SSL(self):
                     "CONNECTOR_URL": "s3://bck-dev",
                     "CONNECTOR_CLASS_NAME": "test",
                 },
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 arn="arn_test",
             )
         ]
@@ -76,7 +75,7 @@ def test_glue_table_with_SSL(self):
                     "CONNECTOR_CLASS_NAME": "test",
                     "JDBC_ENFORCE_SSL": "true",
                 },
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 arn="arn_test",
             )
         ]
diff --git a/tests/providers/aws/services/glue/glue_development_endpoints_cloudwatch_logs_encryption_enabled/glue_development_endpoints_cloudwatch_logs_encryption_enabled_test.py b/tests/providers/aws/services/glue/glue_development_endpoints_cloudwatch_logs_encryption_enabled/glue_development_endpoints_cloudwatch_logs_encryption_enabled_test.py
index 72f0a25caeb..b28e80a193a 100644
--- a/tests/providers/aws/services/glue/glue_development_endpoints_cloudwatch_logs_encryption_enabled/glue_development_endpoints_cloudwatch_logs_encryption_enabled_test.py
+++ b/tests/providers/aws/services/glue/glue_development_endpoints_cloudwatch_logs_encryption_enabled/glue_development_endpoints_cloudwatch_logs_encryption_enabled_test.py
@@ -2,8 +2,7 @@
 from unittest import mock
 
 from prowler.providers.aws.services.glue.glue_service import DevEndpoint, SecurityConfig
-
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import AWS_REGION_US_EAST_1
 
 
 class Test_glue_development_endpoints_cloudwatch_logs_encryption_enabled:
@@ -31,7 +30,7 @@ def test_glue_encrypted_endpoint(self):
             DevEndpoint(
                 name="test",
                 security="sec_config",
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 arn="arn_test",
             )
         ]
@@ -42,7 +41,7 @@ def test_glue_encrypted_endpoint(self):
                 cw_key_arn="key_arn",
                 s3_encryption="DISABLED",
                 jb_encryption="DISABLED",
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
             )
         ]
 
@@ -73,7 +72,7 @@ def test_glue_unencrypted_endpoint(self):
             DevEndpoint(
                 name="test",
                 security="sec_config",
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 arn="arn_test",
             )
         ]
@@ -83,7 +82,7 @@ def test_glue_unencrypted_endpoint(self):
                 s3_encryption="DISABLED",
                 cw_encryption="DISABLED",
                 jb_encryption="DISABLED",
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
             )
         ]
 
@@ -114,7 +113,7 @@ def test_glue_no_sec_configs(self):
             DevEndpoint(
                 name="test",
                 security="sec_config",
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 arn="arn_test",
             )
         ]
diff --git a/tests/providers/aws/services/glue/glue_development_endpoints_job_bookmark_encryption_enabled/glue_development_endpoints_job_bookmark_encryption_enabled_test.py b/tests/providers/aws/services/glue/glue_development_endpoints_job_bookmark_encryption_enabled/glue_development_endpoints_job_bookmark_encryption_enabled_test.py
index 1adbe40acf5..2a1615aa171 100644
--- a/tests/providers/aws/services/glue/glue_development_endpoints_job_bookmark_encryption_enabled/glue_development_endpoints_job_bookmark_encryption_enabled_test.py
+++ b/tests/providers/aws/services/glue/glue_development_endpoints_job_bookmark_encryption_enabled/glue_development_endpoints_job_bookmark_encryption_enabled_test.py
@@ -2,8 +2,7 @@
 from unittest import mock
 
 from prowler.providers.aws.services.glue.glue_service import DevEndpoint, SecurityConfig
-
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import AWS_REGION_US_EAST_1
 
 
 class Test_glue_development_endpoints_job_bookmark_encryption_enabled:
@@ -31,7 +30,7 @@ def test_glue_encrypted_endpoint(self):
             DevEndpoint(
                 name="test",
                 security="sec_config",
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 arn="arn_test",
             )
         ]
@@ -42,7 +41,7 @@ def test_glue_encrypted_endpoint(self):
                 jb_key_arn="key_arn",
                 cw_encryption="DISABLED",
                 s3_encryption="DISABLED",
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
             )
         ]
 
@@ -73,7 +72,7 @@ def test_glue_unencrypted_endpoint(self):
             DevEndpoint(
                 name="test",
                 security="sec_config",
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 arn="arn_test",
             )
         ]
@@ -83,7 +82,7 @@ def test_glue_unencrypted_endpoint(self):
                 s3_encryption="DISABLED",
                 cw_encryption="DISABLED",
                 jb_encryption="DISABLED",
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
             )
         ]
 
@@ -114,7 +113,7 @@ def test_glue_no_sec_configs(self):
             DevEndpoint(
                 name="test",
                 security="sec_config",
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 arn="arn_test",
             )
         ]
diff --git a/tests/providers/aws/services/glue/glue_development_endpoints_s3_encryption_enabled/glue_development_endpoints_s3_encryption_enabled_test.py b/tests/providers/aws/services/glue/glue_development_endpoints_s3_encryption_enabled/glue_development_endpoints_s3_encryption_enabled_test.py
index cc645f8cd4b..96de6949bc2 100644
--- a/tests/providers/aws/services/glue/glue_development_endpoints_s3_encryption_enabled/glue_development_endpoints_s3_encryption_enabled_test.py
+++ b/tests/providers/aws/services/glue/glue_development_endpoints_s3_encryption_enabled/glue_development_endpoints_s3_encryption_enabled_test.py
@@ -2,8 +2,7 @@
 from unittest import mock
 
 from prowler.providers.aws.services.glue.glue_service import DevEndpoint, SecurityConfig
-
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import AWS_REGION_US_EAST_1
 
 
 class Test_glue_development_endpoints_s3_encryption_enabled:
@@ -31,7 +30,7 @@ def test_glue_encrypted_endpoint(self):
             DevEndpoint(
                 name="test",
                 security="sec_config",
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 arn="arn_test",
             )
         ]
@@ -42,7 +41,7 @@ def test_glue_encrypted_endpoint(self):
                 s3_key_arn="key_arn",
                 cw_encryption="DISABLED",
                 jb_encryption="DISABLED",
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
             )
         ]
 
@@ -73,7 +72,7 @@ def test_glue_unencrypted_endpoint(self):
             DevEndpoint(
                 name="test",
                 security="sec_config",
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 arn="arn_test",
             )
         ]
@@ -83,7 +82,7 @@ def test_glue_unencrypted_endpoint(self):
                 s3_encryption="DISABLED",
                 cw_encryption="DISABLED",
                 jb_encryption="DISABLED",
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
             )
         ]
 
@@ -114,7 +113,7 @@ def test_glue_no_sec_configs(self):
             DevEndpoint(
                 name="test",
                 security="sec_config",
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 arn="arn_test",
             )
         ]
diff --git a/tests/providers/aws/services/glue/glue_etl_jobs_amazon_s3_encryption_enabled/glue_etl_jobs_amazon_s3_encryption_enabled_test.py b/tests/providers/aws/services/glue/glue_etl_jobs_amazon_s3_encryption_enabled/glue_etl_jobs_amazon_s3_encryption_enabled_test.py
index 922b66d9295..545d5fe8f29 100644
--- a/tests/providers/aws/services/glue/glue_etl_jobs_amazon_s3_encryption_enabled/glue_etl_jobs_amazon_s3_encryption_enabled_test.py
+++ b/tests/providers/aws/services/glue/glue_etl_jobs_amazon_s3_encryption_enabled/glue_etl_jobs_amazon_s3_encryption_enabled_test.py
@@ -2,8 +2,7 @@
 from unittest import mock
 
 from prowler.providers.aws.services.glue.glue_service import Job, SecurityConfig
-
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import AWS_REGION_US_EAST_1
 
 
 class Test_glue_etl_jobs_amazon_s3_encryption_enabled:
@@ -32,7 +31,7 @@ def test_glue_encrypted_job(self):
                 name="test",
                 security="sec_config",
                 arguments=None,
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 arn="arn_test",
             )
         ]
@@ -43,7 +42,7 @@ def test_glue_encrypted_job(self):
                 s3_key_arn="key_arn",
                 cw_encryption="DISABLED",
                 jb_encryption="DISABLED",
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
             )
         ]
 
@@ -75,7 +74,7 @@ def test_glue_unencrypted_job(self):
                 name="test",
                 security="sec_config",
                 arguments=None,
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 arn="arn_test",
             )
         ]
@@ -85,7 +84,7 @@ def test_glue_unencrypted_job(self):
                 s3_encryption="DISABLED",
                 cw_encryption="DISABLED",
                 jb_encryption="DISABLED",
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
             )
         ]
 
@@ -116,7 +115,7 @@ def test_glue_no_sec_configs(self):
             Job(
                 name="test",
                 security="sec_config",
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 arn="arn_test",
             )
         ]
@@ -153,7 +152,7 @@ def test_glue_encrypted_job_with_argument(self):
                     "--encryption-type": "sse-s3",
                     "--enable-job-insights": "false",
                 },
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 arn="arn_test",
             )
         ]
diff --git a/tests/providers/aws/services/glue/glue_etl_jobs_cloudwatch_logs_encryption_enabled/glue_etl_jobs_cloudwatch_logs_encryption_enabled_test.py b/tests/providers/aws/services/glue/glue_etl_jobs_cloudwatch_logs_encryption_enabled/glue_etl_jobs_cloudwatch_logs_encryption_enabled_test.py
index d6d7be3256c..607c9196543 100644
--- a/tests/providers/aws/services/glue/glue_etl_jobs_cloudwatch_logs_encryption_enabled/glue_etl_jobs_cloudwatch_logs_encryption_enabled_test.py
+++ b/tests/providers/aws/services/glue/glue_etl_jobs_cloudwatch_logs_encryption_enabled/glue_etl_jobs_cloudwatch_logs_encryption_enabled_test.py
@@ -2,8 +2,7 @@
 from unittest import mock
 
 from prowler.providers.aws.services.glue.glue_service import Job, SecurityConfig
-
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import AWS_REGION_US_EAST_1
 
 
 class Test_glue_etl_jobs_cloudwatch_logs_encryption_enabled:
@@ -32,7 +31,7 @@ def test_glue_encrypted_job(self):
                 name="test",
                 security="sec_config",
                 arguments=None,
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 arn="arn_test",
             )
         ]
@@ -43,7 +42,7 @@ def test_glue_encrypted_job(self):
                 cw_key_arn="key_arn",
                 s3_encryption="DISABLED",
                 jb_encryption="DISABLED",
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
             )
         ]
 
@@ -75,7 +74,7 @@ def test_glue_unencrypted_job(self):
                 name="test",
                 security="sec_config",
                 arguments=None,
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 arn="arn_test",
             )
         ]
@@ -85,7 +84,7 @@ def test_glue_unencrypted_job(self):
                 s3_encryption="DISABLED",
                 cw_encryption="DISABLED",
                 jb_encryption="DISABLED",
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
             )
         ]
 
@@ -116,7 +115,7 @@ def test_glue_no_sec_configs(self):
             Job(
                 name="test",
                 security="sec_config",
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 arn="arn_test",
             )
         ]
diff --git a/tests/providers/aws/services/glue/glue_etl_jobs_job_bookmark_encryption_enabled/glue_etl_jobs_job_bookmark_encryption_enabled_test.py b/tests/providers/aws/services/glue/glue_etl_jobs_job_bookmark_encryption_enabled/glue_etl_jobs_job_bookmark_encryption_enabled_test.py
index af74c7d0500..3e040302ebf 100644
--- a/tests/providers/aws/services/glue/glue_etl_jobs_job_bookmark_encryption_enabled/glue_etl_jobs_job_bookmark_encryption_enabled_test.py
+++ b/tests/providers/aws/services/glue/glue_etl_jobs_job_bookmark_encryption_enabled/glue_etl_jobs_job_bookmark_encryption_enabled_test.py
@@ -2,8 +2,7 @@
 from unittest import mock
 
 from prowler.providers.aws.services.glue.glue_service import Job, SecurityConfig
-
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import AWS_REGION_US_EAST_1
 
 
 class Test_glue_etl_jobs_job_bookmark_encryption_enabled:
@@ -32,7 +31,7 @@ def test_glue_encrypted_job(self):
                 name="test",
                 security="sec_config",
                 arguments=None,
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 arn="arn_test",
             )
         ]
@@ -43,7 +42,7 @@ def test_glue_encrypted_job(self):
                 jb_key_arn="key_arn",
                 s3_encryption="DISABLED",
                 cw_encryption="DISABLED",
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
             )
         ]
 
@@ -75,7 +74,7 @@ def test_glue_unencrypted_job(self):
                 name="test",
                 security="sec_config",
                 arguments=None,
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 arn="arn_test",
             )
         ]
@@ -85,7 +84,7 @@ def test_glue_unencrypted_job(self):
                 s3_encryption="DISABLED",
                 cw_encryption="DISABLED",
                 jb_encryption="DISABLED",
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
             )
         ]
 
@@ -116,7 +115,7 @@ def test_glue_no_sec_configs(self):
             Job(
                 name="test",
                 security="sec_config",
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 arn="arn_test",
             )
         ]
diff --git a/tests/providers/aws/services/glue/glue_service_test.py b/tests/providers/aws/services/glue/glue_service_test.py
index bd92ae9c65b..0c119a0b185 100644
--- a/tests/providers/aws/services/glue/glue_service_test.py
+++ b/tests/providers/aws/services/glue/glue_service_test.py
@@ -1,15 +1,14 @@
 from unittest.mock import patch
 
 import botocore
-from boto3 import session
-from moto import mock_glue
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.glue.glue_service import Glue
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 # Mocking Access Analyzer Calls
 make_api_call = botocore.client.BaseClient._make_api_call
@@ -105,10 +104,12 @@ def mock_make_api_call(self, operation_name, kwarg):
 
 
 # Mock generate_regional_clients()
-def mock_generate_regional_clients(service, audit_info, _):
-    regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
-    regional_client.region = AWS_REGION
-    return {AWS_REGION: regional_client}
+def mock_generate_regional_clients(service, audit_info):
+    regional_client = audit_info.audit_session.client(
+        service, region_name=AWS_REGION_US_EAST_1
+    )
+    regional_client.region = AWS_REGION_US_EAST_1
+    return {AWS_REGION_US_EAST_1: regional_client}
 
 
 # Patch every AWS call using Boto3 and generate_regional_clients to have 1 client
@@ -118,85 +119,54 @@ def mock_generate_regional_clients(service, audit_info, _):
     new=mock_generate_regional_clients,
 )
 class Test_Glue_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test Glue Service
-    @mock_glue
+    @mock_aws
     def test_service(self):
         # Glue client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         glue = Glue(audit_info)
         assert glue.service == "glue"
 
     # Test Glue Client
-    @mock_glue
+    @mock_aws
     def test_client(self):
         # Glue client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         glue = Glue(audit_info)
         for regional_client in glue.regional_clients.values():
             assert regional_client.__class__.__name__ == "Glue"
 
     # Test Glue Session
-    @mock_glue
+    @mock_aws
     def test__get_session__(self):
         # Glue client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         glue = Glue(audit_info)
         assert glue.session.__class__.__name__ == "Session"
 
     # Test Glue Session
-    @mock_glue
+    @mock_aws
     def test_audited_account(self):
         # Glue client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         glue = Glue(audit_info)
         assert glue.audited_account == AWS_ACCOUNT_NUMBER
 
     # Test Glue Search Tables
-    @mock_glue
+    @mock_aws
     def test__search_tables__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         glue = Glue(audit_info)
         assert len(glue.tables) == 1
         assert glue.tables[0].name == "table"
         assert glue.tables[0].database == "database"
         assert glue.tables[0].catalog == "catalog"
-        assert glue.tables[0].region == AWS_REGION
+        assert glue.tables[0].region == AWS_REGION_US_EAST_1
 
     # Test Glue Get Connections
-    @mock_glue
+    @mock_aws
     def test__get_connections__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         glue = Glue(audit_info)
         assert len(glue.connections) == 1
         assert glue.connections[0].name == "connection"
@@ -208,46 +178,46 @@ def test__get_connections__(self):
             "CONNECTOR_CLASS_NAME": "test",
             "JDBC_ENFORCE_SSL": "true",
         }
-        assert glue.connections[0].region == AWS_REGION
+        assert glue.connections[0].region == AWS_REGION_US_EAST_1
 
     # Test Glue Get Catalog Encryption
-    @mock_glue
+    @mock_aws
     def test__get_data_catalog_encryption_settings__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         glue = Glue(audit_info)
         assert len(glue.catalog_encryption_settings) == 1
         assert glue.catalog_encryption_settings[0].mode == "SSE-KMS"
         assert glue.catalog_encryption_settings[0].kms_id == "kms_key"
         assert glue.catalog_encryption_settings[0].password_encryption
         assert glue.catalog_encryption_settings[0].password_kms_id == "password_key"
-        assert glue.catalog_encryption_settings[0].region == AWS_REGION
+        assert glue.catalog_encryption_settings[0].region == AWS_REGION_US_EAST_1
 
     # Test Glue Get Dev Endpoints
-    @mock_glue
+    @mock_aws
     def test__get_dev_endpoints__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         glue = Glue(audit_info)
         assert len(glue.dev_endpoints) == 1
         assert glue.dev_endpoints[0].name == "endpoint"
         assert glue.dev_endpoints[0].security == "security_config"
-        assert glue.dev_endpoints[0].region == AWS_REGION
+        assert glue.dev_endpoints[0].region == AWS_REGION_US_EAST_1
 
     # Test Glue Get Security Configs
-    @mock_glue
+    @mock_aws
     def test__get_security_configurations__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         glue = Glue(audit_info)
         assert len(glue.security_configs) == 1
         assert glue.security_configs[0].name == "test"
         assert glue.security_configs[0].s3_encryption == "DISABLED"
         assert glue.security_configs[0].cw_encryption == "DISABLED"
         assert glue.security_configs[0].jb_encryption == "DISABLED"
-        assert glue.security_configs[0].region == AWS_REGION
+        assert glue.security_configs[0].region == AWS_REGION_US_EAST_1
 
     # Test Glue Get Security Configs
-    @mock_glue
+    @mock_aws
     def test__get_jobs__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         glue = Glue(audit_info)
         assert len(glue.jobs) == 1
         assert glue.jobs[0].name == "job"
@@ -256,4 +226,4 @@ def test__get_jobs__(self):
             "--encryption-type": "sse-s3",
             "--enable-job-insights": "false",
         }
-        assert glue.jobs[0].region == AWS_REGION
+        assert glue.jobs[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/guardduty/guardduty_centrally_managed/guardduty_centrally_managed_test.py b/tests/providers/aws/services/guardduty/guardduty_centrally_managed/guardduty_centrally_managed_test.py
index 19cc667c00c..34085d2c61f 100644
--- a/tests/providers/aws/services/guardduty/guardduty_centrally_managed/guardduty_centrally_managed_test.py
+++ b/tests/providers/aws/services/guardduty/guardduty_centrally_managed/guardduty_centrally_managed_test.py
@@ -2,14 +2,14 @@
 from uuid import uuid4
 
 from prowler.providers.aws.services.guardduty.guardduty_service import Detector
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+)
 
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
 AWS_ACCOUNT_NUMBER_ADMIN = "123456789013"
 DETECTOR_ID = str(uuid4())
-DETECTOR_ARN = (
-    f"arn:aws:guardduty:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:detector/{DETECTOR_ID}"
-)
+DETECTOR_ARN = f"arn:aws:guardduty:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:detector/{DETECTOR_ID}"
 
 
 class Test_guardduty_centrally_managed:
@@ -34,7 +34,7 @@ def test_detector_no_centralized_managed(self):
         guardduty_client.detectors.append(
             Detector(
                 id=DETECTOR_ID,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 arn=DETECTOR_ARN,
                 status=False,
                 findings=[str(uuid4())],
@@ -59,7 +59,7 @@ def test_detector_no_centralized_managed(self):
                 == f"GuardDuty detector {DETECTOR_ID} is not centrally managed."
             )
             assert result[0].resource_id == DETECTOR_ID
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
             assert result[0].resource_arn == DETECTOR_ARN
 
     def test_not_enabled_account_detector(self):
@@ -68,7 +68,7 @@ def test_not_enabled_account_detector(self):
         guardduty_client.detectors.append(
             Detector(
                 id=AWS_ACCOUNT_NUMBER,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 arn=DETECTOR_ARN,
                 enabled_in_account=False,
             )
@@ -93,7 +93,7 @@ def test_detector_centralized_managed(self):
         guardduty_client.detectors.append(
             Detector(
                 id=DETECTOR_ID,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 arn=DETECTOR_ARN,
                 status=False,
                 findings=[str(uuid4())],
@@ -119,7 +119,7 @@ def test_detector_centralized_managed(self):
                 == f"GuardDuty detector {DETECTOR_ID} is centrally managed by account {AWS_ACCOUNT_NUMBER_ADMIN}."
             )
             assert result[0].resource_id == DETECTOR_ID
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
             assert result[0].resource_arn == DETECTOR_ARN
 
     def test_detector_administrator(self):
@@ -128,7 +128,7 @@ def test_detector_administrator(self):
         guardduty_client.detectors.append(
             Detector(
                 id=DETECTOR_ID,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 arn=DETECTOR_ARN,
                 status=False,
                 findings=[str(uuid4())],
@@ -154,5 +154,5 @@ def test_detector_administrator(self):
                 == f"GuardDuty detector {DETECTOR_ID} is administrator account with 1 member accounts."
             )
             assert result[0].resource_id == DETECTOR_ID
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
             assert result[0].resource_arn == DETECTOR_ARN
diff --git a/tests/providers/aws/services/guardduty/guardduty_is_enabled/guardduty_is_enabled_test.py b/tests/providers/aws/services/guardduty/guardduty_is_enabled/guardduty_is_enabled_test.py
index 76968046694..e2af78490b3 100644
--- a/tests/providers/aws/services/guardduty/guardduty_is_enabled/guardduty_is_enabled_test.py
+++ b/tests/providers/aws/services/guardduty/guardduty_is_enabled/guardduty_is_enabled_test.py
@@ -2,24 +2,25 @@
 from uuid import uuid4
 
 from prowler.providers.aws.services.guardduty.guardduty_service import Detector
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_ID = "123456789012"
-AWS_ACCOUNT_ARN = f"arn:aws:iam::{AWS_ACCOUNT_ID}:root"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+)
 
 DETECTOR_ID = str(uuid4())
-DETECTOR_ARN = f"arn:aws:guardduty:{AWS_REGION}:{AWS_ACCOUNT_ID}:detector/{DETECTOR_ID}"
+DETECTOR_ARN = f"arn:aws:guardduty:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:detector/{DETECTOR_ID}"
 
 
-class Test_:
+class Test_guardduty_is_enabled:
     def test_no_detectors(self):
         guardduty_client = mock.MagicMock
-        guardduty_client.region = AWS_REGION
+        guardduty_client.region = AWS_REGION_EU_WEST_1
         guardduty_client.detectors = []
         guardduty_client.detectors.append(
             Detector(
-                id=AWS_ACCOUNT_ID,
-                region=AWS_REGION,
+                id=AWS_ACCOUNT_NUMBER,
+                region=AWS_REGION_EU_WEST_1,
                 arn=AWS_ACCOUNT_ARN,
                 enabled_in_account=False,
             )
@@ -38,9 +39,9 @@ def test_no_detectors(self):
             assert len(result) == 1
             assert result[0].status == "FAIL"
             assert result[0].status_extended == "GuardDuty is not enabled."
-            assert result[0].resource_id == AWS_ACCOUNT_ID
+            assert result[0].resource_id == AWS_ACCOUNT_NUMBER
             assert result[0].resource_arn == AWS_ACCOUNT_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
     def test_guardduty_enabled(self):
         guardduty_client = mock.MagicMock
@@ -48,7 +49,7 @@ def test_guardduty_enabled(self):
         guardduty_client.detectors.append(
             Detector(
                 id=DETECTOR_ID,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 arn=DETECTOR_ARN,
                 status=True,
             )
@@ -71,17 +72,17 @@ def test_guardduty_enabled(self):
             )
             assert result[0].resource_id == DETECTOR_ID
             assert result[0].resource_arn == DETECTOR_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
     def test_guardduty_configured_but_suspended(self):
         guardduty_client = mock.MagicMock
-        guardduty_client.region = AWS_REGION
+        guardduty_client.region = AWS_REGION_EU_WEST_1
         guardduty_client.detectors = []
         guardduty_client.detectors.append(
             Detector(
                 id=DETECTOR_ID,
                 arn=DETECTOR_ARN,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 status=False,
             )
         )
@@ -103,17 +104,17 @@ def test_guardduty_configured_but_suspended(self):
             )
             assert result[0].resource_id == DETECTOR_ID
             assert result[0].resource_arn == DETECTOR_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
     def test_guardduty_not_configured(self):
         guardduty_client = mock.MagicMock
         guardduty_client.detectors = []
-        guardduty_client.region = AWS_REGION
+        guardduty_client.region = AWS_REGION_EU_WEST_1
         guardduty_client.detectors.append(
             Detector(
                 id=DETECTOR_ID,
                 arn=DETECTOR_ARN,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
             )
         )
         with mock.patch(
@@ -134,7 +135,7 @@ def test_guardduty_not_configured(self):
             )
             assert result[0].resource_id == DETECTOR_ID
             assert result[0].resource_arn == DETECTOR_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
     def test_guardduty_not_configured_muted(self):
         guardduty_client = mock.MagicMock
@@ -145,7 +146,7 @@ def test_guardduty_not_configured_muted(self):
             Detector(
                 id=DETECTOR_ID,
                 arn=DETECTOR_ARN,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
             )
         )
         with mock.patch(
@@ -166,4 +167,4 @@ def test_guardduty_not_configured_muted(self):
             )
             assert result[0].resource_id == DETECTOR_ID
             assert result[0].resource_arn == DETECTOR_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
diff --git a/tests/providers/aws/services/guardduty/guardduty_no_high_severity_findings/guardduty_no_high_severity_findings_test.py b/tests/providers/aws/services/guardduty/guardduty_no_high_severity_findings/guardduty_no_high_severity_findings_test.py
index 456169324a5..fe1ea54bc18 100644
--- a/tests/providers/aws/services/guardduty/guardduty_no_high_severity_findings/guardduty_no_high_severity_findings_test.py
+++ b/tests/providers/aws/services/guardduty/guardduty_no_high_severity_findings/guardduty_no_high_severity_findings_test.py
@@ -3,14 +3,13 @@
 from uuid import uuid4
 
 from prowler.providers.aws.services.guardduty.guardduty_service import Detector
-
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+)
 
 DETECTOR_ID = str(uuid4())
-DETECTOR_ARN = (
-    f"arn:aws:guardduty:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:detector/{DETECTOR_ID}"
-)
+DETECTOR_ARN = f"arn:aws:guardduty:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:detector/{DETECTOR_ID}"
 
 
 class Test_guardduty_no_high_severity_findings:
@@ -36,7 +35,7 @@ def test_no_high_findings(self):
             Detector(
                 id=DETECTOR_ID,
                 arn=DETECTOR_ARN,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
             )
         )
         with mock.patch(
@@ -56,7 +55,7 @@ def test_no_high_findings(self):
             )
             assert result[0].resource_id == DETECTOR_ID
             assert result[0].resource_arn == DETECTOR_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
     def test_not_enabled_account_detector(self):
         guardduty_client = mock.MagicMock
@@ -65,7 +64,7 @@ def test_not_enabled_account_detector(self):
             Detector(
                 id=AWS_ACCOUNT_NUMBER,
                 arn=DETECTOR_ARN,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 enabled_in_account=False,
             )
         )
@@ -87,7 +86,7 @@ def test_high_findings(self):
         guardduty_client.detectors.append(
             Detector(
                 id=DETECTOR_ID,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 arn=DETECTOR_ARN,
                 status=False,
                 findings=[str(uuid4())],
@@ -108,4 +107,4 @@ def test_high_findings(self):
             assert search("has 1 high severity findings", result[0].status_extended)
             assert result[0].resource_id == DETECTOR_ID
             assert result[0].resource_arn == DETECTOR_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
diff --git a/tests/providers/aws/services/guardduty/guardduty_service_test.py b/tests/providers/aws/services/guardduty/guardduty_service_test.py
index 28be7744b49..d5e13b15a3d 100644
--- a/tests/providers/aws/services/guardduty/guardduty_service_test.py
+++ b/tests/providers/aws/services/guardduty/guardduty_service_test.py
@@ -2,16 +2,18 @@
 from unittest.mock import patch
 
 import botocore
-from boto3 import client, session
-from moto import mock_guardduty
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.guardduty.guardduty_service import GuardDuty
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    set_mocked_aws_audit_info,
+)
 
 AWS_ACCOUNT_NUMBER_ADMIN = "123456789013"
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "eu-west-1"
+
 
 make_api_call = botocore.client.BaseClient._make_api_call
 
@@ -48,10 +50,12 @@ def mock_make_api_call(self, operation_name, kwarg):
     return make_api_call(self, operation_name, kwarg)
 
 
-def mock_generate_regional_clients(service, audit_info, _):
-    regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
-    regional_client.region = AWS_REGION
-    return {AWS_REGION: regional_client}
+def mock_generate_regional_clients(service, audit_info):
+    regional_client = audit_info.audit_session.client(
+        service, region_name=AWS_REGION_EU_WEST_1
+    )
+    regional_client.region = AWS_REGION_EU_WEST_1
+    return {AWS_REGION_EU_WEST_1: regional_client}
 
 
 @patch("botocore.client.BaseClient._make_api_call", new=mock_make_api_call)
@@ -60,161 +64,130 @@ def mock_generate_regional_clients(service, audit_info, _):
     new=mock_generate_regional_clients,
 )
 class Test_GuardDuty_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test GuardDuty Service
     def test_service(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         guardduty = GuardDuty(audit_info)
         assert guardduty.service == "guardduty"
 
     # Test GuardDuty client
     def test_client(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         guardduty = GuardDuty(audit_info)
         for reg_client in guardduty.regional_clients.values():
             assert reg_client.__class__.__name__ == "GuardDuty"
 
     # Test GuardDuty session
     def test__get_session__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         guardduty = GuardDuty(audit_info)
         assert guardduty.session.__class__.__name__ == "Session"
 
-    @mock_guardduty
+    @mock_aws
     # Test GuardDuty session
     def test__list_detectors__(self):
-        guardduty_client = client("guardduty", region_name=AWS_REGION)
+        guardduty_client = client("guardduty", region_name=AWS_REGION_EU_WEST_1)
         response = guardduty_client.create_detector(Enable=True, Tags={"test": "test"})
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         guardduty = GuardDuty(audit_info)
 
         assert len(guardduty.detectors) == 1
         assert guardduty.detectors[0].id == response["DetectorId"]
         assert (
             guardduty.detectors[0].arn
-            == f"arn:aws:guardduty:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:detector/{response['DetectorId']}"
+            == f"arn:aws:guardduty:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:detector/{response['DetectorId']}"
         )
         assert guardduty.detectors[0].enabled_in_account
         assert len(guardduty.detectors[0].findings) == 1
         assert guardduty.detectors[0].member_accounts == ["123456789012"]
         assert guardduty.detectors[0].administrator_account == "123456789013"
-        assert guardduty.detectors[0].region == AWS_REGION
+        assert guardduty.detectors[0].region == AWS_REGION_EU_WEST_1
         assert guardduty.detectors[0].tags == [{"test": "test"}]
 
-    @mock_guardduty
+    @mock_aws
     # Test GuardDuty session
     def test__get_detector__(self):
-        guardduty_client = client("guardduty", region_name=AWS_REGION)
+        guardduty_client = client("guardduty", region_name=AWS_REGION_EU_WEST_1)
         response = guardduty_client.create_detector(Enable=True)
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         guardduty = GuardDuty(audit_info)
 
         assert len(guardduty.detectors) == 1
         assert guardduty.detectors[0].id == response["DetectorId"]
         assert (
             guardduty.detectors[0].arn
-            == f"arn:aws:guardduty:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:detector/{response['DetectorId']}"
+            == f"arn:aws:guardduty:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:detector/{response['DetectorId']}"
         )
         assert guardduty.detectors[0].enabled_in_account
         assert len(guardduty.detectors[0].findings) == 1
         assert guardduty.detectors[0].member_accounts == ["123456789012"]
         assert guardduty.detectors[0].administrator_account == "123456789013"
-        assert guardduty.detectors[0].region == AWS_REGION
+        assert guardduty.detectors[0].region == AWS_REGION_EU_WEST_1
         assert guardduty.detectors[0].tags == [{"test": "test"}]
 
-    @mock_guardduty
+    @mock_aws
     # Test GuardDuty session
     def test__list_findings__(self):
-        guardduty_client = client("guardduty", region_name=AWS_REGION)
+        guardduty_client = client("guardduty", region_name=AWS_REGION_EU_WEST_1)
         response = guardduty_client.create_detector(Enable=True)
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         guardduty = GuardDuty(audit_info)
 
         assert len(guardduty.detectors) == 1
         assert guardduty.detectors[0].id == response["DetectorId"]
         assert (
             guardduty.detectors[0].arn
-            == f"arn:aws:guardduty:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:detector/{response['DetectorId']}"
+            == f"arn:aws:guardduty:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:detector/{response['DetectorId']}"
         )
         assert guardduty.detectors[0].enabled_in_account
         assert len(guardduty.detectors[0].findings) == 1
         assert guardduty.detectors[0].member_accounts == ["123456789012"]
         assert guardduty.detectors[0].administrator_account == "123456789013"
-        assert guardduty.detectors[0].region == AWS_REGION
+        assert guardduty.detectors[0].region == AWS_REGION_EU_WEST_1
         assert guardduty.detectors[0].tags == [{"test": "test"}]
 
-    @mock_guardduty
+    @mock_aws
     def test__list_members__(self):
-        guardduty_client = client("guardduty", region_name=AWS_REGION)
+        guardduty_client = client("guardduty", region_name=AWS_REGION_EU_WEST_1)
         response = guardduty_client.create_detector(Enable=True)
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         guardduty = GuardDuty(audit_info)
 
         assert len(guardduty.detectors) == 1
         assert guardduty.detectors[0].id == response["DetectorId"]
         assert (
             guardduty.detectors[0].arn
-            == f"arn:aws:guardduty:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:detector/{response['DetectorId']}"
+            == f"arn:aws:guardduty:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:detector/{response['DetectorId']}"
         )
         assert guardduty.detectors[0].enabled_in_account
         assert len(guardduty.detectors[0].findings) == 1
         assert guardduty.detectors[0].member_accounts == ["123456789012"]
         assert guardduty.detectors[0].administrator_account == "123456789013"
-        assert guardduty.detectors[0].region == AWS_REGION
+        assert guardduty.detectors[0].region == AWS_REGION_EU_WEST_1
         assert guardduty.detectors[0].tags == [{"test": "test"}]
 
-    @mock_guardduty
+    @mock_aws
     # Test GuardDuty session
     def test__get_administrator_account__(self):
-        guardduty_client = client("guardduty", region_name=AWS_REGION)
+        guardduty_client = client("guardduty", region_name=AWS_REGION_EU_WEST_1)
         response = guardduty_client.create_detector(Enable=True)
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info()
         guardduty = GuardDuty(audit_info)
 
         assert len(guardduty.detectors) == 1
         assert guardduty.detectors[0].id == response["DetectorId"]
         assert (
             guardduty.detectors[0].arn
-            == f"arn:aws:guardduty:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:detector/{response['DetectorId']}"
+            == f"arn:aws:guardduty:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:detector/{response['DetectorId']}"
         )
         assert guardduty.detectors[0].enabled_in_account
         assert len(guardduty.detectors[0].findings) == 1
         assert guardduty.detectors[0].member_accounts == ["123456789012"]
         assert guardduty.detectors[0].administrator_account == "123456789013"
-        assert guardduty.detectors[0].region == AWS_REGION
+        assert guardduty.detectors[0].region == AWS_REGION_EU_WEST_1
         assert guardduty.detectors[0].tags == [{"test": "test"}]
diff --git a/tests/providers/aws/services/iam/iam_administrator_access_with_mfa/iam_administrator_access_with_mfa_test.py b/tests/providers/aws/services/iam/iam_administrator_access_with_mfa/iam_administrator_access_with_mfa_test.py
index 90a01b10487..076d0856660 100644
--- a/tests/providers/aws/services/iam/iam_administrator_access_with_mfa/iam_administrator_access_with_mfa_test.py
+++ b/tests/providers/aws/services/iam/iam_administrator_access_with_mfa/iam_administrator_access_with_mfa_test.py
@@ -2,50 +2,17 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_iam
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_iam_administrator_access_with_mfa_test:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-                region_name=AWS_REGION,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=AWS_REGION,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
-    @mock_iam
+    @mock_aws(config={"iam": {"load_aws_managed_policies": True}})
     def test_group_with_no_policies(self):
         iam = client("iam")
         group_name = "test-group"
@@ -54,7 +21,7 @@ def test_group_with_no_policies(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -78,7 +45,7 @@ def test_group_with_no_policies(self):
                     f"Group {group_name} has no policies.", result[0].status_extended
                 )
 
-    @mock_iam
+    @mock_aws(config={"iam": {"load_aws_managed_policies": True}})
     def test_group_non_administrative_policy(self):
         iam = client("iam")
         group_name = "test-group"
@@ -97,7 +64,7 @@ def test_group_non_administrative_policy(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -122,7 +89,7 @@ def test_group_non_administrative_policy(self):
                     result[0].status_extended,
                 )
 
-    @mock_iam
+    @mock_aws(config={"iam": {"load_aws_managed_policies": True}})
     def test_admin_policy_no_users(self):
         iam = client("iam")
         group_name = "test-group"
@@ -135,7 +102,7 @@ def test_admin_policy_no_users(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -160,7 +127,7 @@ def test_admin_policy_no_users(self):
                     result[0].status_extended,
                 )
 
-    @mock_iam
+    @mock_aws(config={"iam": {"load_aws_managed_policies": True}})
     def test_admin_policy_with_user_without_mfa(self):
         iam = client("iam")
         group_name = "test-group"
@@ -175,7 +142,7 @@ def test_admin_policy_with_user_without_mfa(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -200,7 +167,7 @@ def test_admin_policy_with_user_without_mfa(self):
                     result[0].status_extended,
                 )
 
-    @mock_iam
+    @mock_aws(config={"iam": {"load_aws_managed_policies": True}})
     def test_various_policies_with_users_with_and_without_mfa(self):
         iam = client("iam")
         group_name = "test-group"
@@ -239,7 +206,7 @@ def test_various_policies_with_users_with_and_without_mfa(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
diff --git a/tests/providers/aws/services/iam/iam_avoid_root_usage/iam_avoid_root_usage_test.py b/tests/providers/aws/services/iam/iam_avoid_root_usage/iam_avoid_root_usage_test.py
index 6af569726b8..b27f615bb61 100644
--- a/tests/providers/aws/services/iam/iam_avoid_root_usage/iam_avoid_root_usage_test.py
+++ b/tests/providers/aws/services/iam/iam_avoid_root_usage/iam_avoid_root_usage_test.py
@@ -3,50 +3,16 @@
 from re import search
 from unittest import mock
 
-from boto3 import session
-from moto import mock_iam
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_iam_avoid_root_usage:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-                region_name=AWS_REGION,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=AWS_REGION,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
-    @mock_iam
+    @mock_aws
     def test_root_not_used(self):
         raw_credential_report = r"""user,arn,user_creation_time,password_enabled,password_last_used,password_last_changed,password_next_rotation,mfa_active,access_key_1_active,access_key_1_last_rotated,access_key_1_last_used_date,access_key_1_last_used_region,access_key_1_last_used_service,access_key_2_active,access_key_2_last_rotated,access_key_2_last_used_date,access_key_2_last_used_region,access_key_2_last_used_service,cert_1_active,cert_1_last_rotated,cert_2_active,cert_2_last_rotated
 ,arn:aws:iam::123456789012:,2022-04-17T14:59:38+00:00,true,no_information,not_supported,not_supported,false,true,N/A,N/A,N/A,N/A,false,N/A,N/A,N/A,N/A,false,N/A,false,N/A"""
@@ -56,7 +22,7 @@ def test_root_not_used(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -83,7 +49,7 @@ def test_root_not_used(self):
                     result[0].resource_arn == "arn:aws:iam::123456789012:"
                 )
 
-    @mock_iam
+    @mock_aws
     def test_root_password_recently_used(self):
         password_last_used = (datetime.datetime.now()).strftime(
             "%Y-%m-%dT%H:%M:%S+00:00"
@@ -96,7 +62,7 @@ def test_root_password_recently_used(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -123,7 +89,7 @@ def test_root_password_recently_used(self):
                     result[0].resource_arn == "arn:aws:iam::123456789012:"
                 )
 
-    @mock_iam
+    @mock_aws
     def test_root_access_key_1_recently_used(self):
         access_key_1_last_used = (datetime.datetime.now()).strftime(
             "%Y-%m-%dT%H:%M:%S+00:00"
@@ -136,7 +102,7 @@ def test_root_access_key_1_recently_used(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -163,7 +129,7 @@ def test_root_access_key_1_recently_used(self):
                     result[0].resource_arn == "arn:aws:iam::123456789012:"
                 )
 
-    @mock_iam
+    @mock_aws
     def test_root_access_key_2_recently_used(self):
         access_key_2_last_used = (datetime.datetime.now()).strftime(
             "%Y-%m-%dT%H:%M:%S+00:00"
@@ -176,7 +142,7 @@ def test_root_access_key_2_recently_used(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -203,7 +169,7 @@ def test_root_access_key_2_recently_used(self):
                     result[0].resource_arn == "arn:aws:iam::123456789012:"
                 )
 
-    @mock_iam
+    @mock_aws
     def test_root_password_used(self):
         password_last_used = (
             datetime.datetime.now() - datetime.timedelta(days=100)
@@ -216,7 +182,7 @@ def test_root_password_used(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -243,7 +209,7 @@ def test_root_password_used(self):
                     result[0].resource_arn == "arn:aws:iam::123456789012:"
                 )
 
-    @mock_iam
+    @mock_aws
     def test_root_access_key_1_used(self):
         access_key_1_last_used = (
             datetime.datetime.now() - datetime.timedelta(days=100)
@@ -256,7 +222,7 @@ def test_root_access_key_1_used(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -283,7 +249,7 @@ def test_root_access_key_1_used(self):
                     result[0].resource_arn == "arn:aws:iam::123456789012:"
                 )
 
-    @mock_iam
+    @mock_aws
     def test_root_access_key_2_used(self):
         access_key_2_last_used = (
             datetime.datetime.now() - datetime.timedelta(days=100)
@@ -296,7 +262,7 @@ def test_root_access_key_2_used(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
diff --git a/tests/providers/aws/services/iam/iam_aws_attached_policy_no_administrative_privileges/iam_aws_attached_policy_no_administrative_privileges_test.py b/tests/providers/aws/services/iam/iam_aws_attached_policy_no_administrative_privileges/iam_aws_attached_policy_no_administrative_privileges_test.py
index 54c0a704858..e1d6a7c688e 100644
--- a/tests/providers/aws/services/iam/iam_aws_attached_policy_no_administrative_privileges/iam_aws_attached_policy_no_administrative_privileges_test.py
+++ b/tests/providers/aws/services/iam/iam_aws_attached_policy_no_administrative_privileges/iam_aws_attached_policy_no_administrative_privileges_test.py
@@ -1,48 +1,17 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_iam
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_iam_aws_attached_policy_no_administrative_privileges_test:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_iam
+    @mock_aws(config={"iam": {"load_aws_managed_policies": True}})
     def test_policy_with_administrative_privileges(self):
         iam_client = client("iam")
 
@@ -52,7 +21,7 @@ def test_policy_with_administrative_privileges(self):
         iam_client.attach_role_policy(
             PolicyArn="arn:aws:iam::aws:policy/AdministratorAccess", RoleName="my-role"
         )
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         from prowler.providers.aws.services.iam.iam_service import IAM
 
         with mock.patch(
@@ -80,7 +49,7 @@ def test_policy_with_administrative_privileges(self):
                         result.status_extended,
                     )
 
-    @mock_iam
+    @mock_aws(config={"iam": {"load_aws_managed_policies": True}})
     def test_policy_non_administrative(self):
         iam_client = client("iam")
 
@@ -91,7 +60,7 @@ def test_policy_non_administrative(self):
             PolicyArn="arn:aws:iam::aws:policy/IAMUserChangePassword",
             RoleName="my-role",
         )
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         from prowler.providers.aws.services.iam.iam_service import IAM
 
         with mock.patch(
@@ -119,7 +88,7 @@ def test_policy_non_administrative(self):
                         result.status_extended,
                     )
 
-    @mock_iam
+    @mock_aws(config={"iam": {"load_aws_managed_policies": True}})
     def test_policy_administrative_and_non_administrative(self):
         iam_client = client("iam")
 
@@ -133,7 +102,7 @@ def test_policy_administrative_and_non_administrative(self):
             PolicyArn="arn:aws:iam::aws:policy/IAMUserChangePassword",
             RoleName="my-role",
         )
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         from prowler.providers.aws.services.iam.iam_service import IAM
 
         with mock.patch(
diff --git a/tests/providers/aws/services/iam/iam_check_saml_providers_sts/iam_check_saml_providers_sts_test.py b/tests/providers/aws/services/iam/iam_check_saml_providers_sts/iam_check_saml_providers_sts_test.py
index 3f6d22cb182..aec804f72b4 100644
--- a/tests/providers/aws/services/iam/iam_check_saml_providers_sts/iam_check_saml_providers_sts_test.py
+++ b/tests/providers/aws/services/iam/iam_check_saml_providers_sts/iam_check_saml_providers_sts_test.py
@@ -1,49 +1,16 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_iam
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_iam_check_saml_providers_sts:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-                region_name=AWS_REGION,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=AWS_REGION,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
-    @mock_iam
+    @mock_aws
     def test_iam_check_saml_providers_sts(self):
         iam_client = client("iam")
         xml_template = r""""
                 )
 
-    @mock_iam
+    @mock_aws
     def test_iam_root_access_key_1(self):
         iam_client = client("iam")
         user = "test"
@@ -95,7 +62,7 @@ def test_iam_root_access_key_1(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -130,7 +97,7 @@ def test_iam_root_access_key_1(self):
                     == "arn:aws:iam::123456789012:user/"
                 )
 
-    @mock_iam
+    @mock_aws
     def test_iam_root_access_key_2(self):
         iam_client = client("iam")
         user = "test"
@@ -138,7 +105,7 @@ def test_iam_root_access_key_2(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -173,7 +140,7 @@ def test_iam_root_access_key_2(self):
                     == "arn:aws:iam::123456789012:user/"
                 )
 
-    @mock_iam
+    @mock_aws
     def test_iam_root_both_access_keys(self):
         iam_client = client("iam")
         user = "test"
@@ -181,7 +148,7 @@ def test_iam_root_both_access_keys(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
diff --git a/tests/providers/aws/services/iam/iam_password_policy_expires_passwords_within_90_days_or_less/iam_password_policy_expires_passwords_within_90_days_or_less_test.py b/tests/providers/aws/services/iam/iam_password_policy_expires_passwords_within_90_days_or_less/iam_password_policy_expires_passwords_within_90_days_or_less_test.py
index cd0cc93016c..31d72c97502 100644
--- a/tests/providers/aws/services/iam/iam_password_policy_expires_passwords_within_90_days_or_less/iam_password_policy_expires_passwords_within_90_days_or_less_test.py
+++ b/tests/providers/aws/services/iam/iam_password_policy_expires_passwords_within_90_days_or_less/iam_password_policy_expires_passwords_within_90_days_or_less_test.py
@@ -1,55 +1,22 @@
 from re import search
 from unittest import mock
 
-from boto3 import session
-from moto import mock_iam
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_ARN = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_iam_password_policy_expires_passwords_within_90_days_or_less:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-                region_name=AWS_REGION,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=AWS_ACCOUNT_ARN,
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=AWS_REGION,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
-    @mock_iam
+    @mock_aws
     def test_password_expiration_lower_90(self):
         from prowler.providers.aws.services.iam.iam_service import IAM, PasswordPolicy
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -81,17 +48,17 @@ def test_password_expiration_lower_90(self):
                 assert result[0].status == "PASS"
                 assert result[0].resource_id == AWS_ACCOUNT_NUMBER
                 assert result[0].resource_arn == AWS_ACCOUNT_ARN
-                assert result[0].region == AWS_REGION
+                assert result[0].region == AWS_REGION_US_EAST_1
                 assert search(
                     "Password expiration is set lower than 90 days",
                     result[0].status_extended,
                 )
 
-    @mock_iam
+    @mock_aws
     def test_password_expiration_greater_90(self):
         from prowler.providers.aws.services.iam.iam_service import IAM, PasswordPolicy
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -123,17 +90,17 @@ def test_password_expiration_greater_90(self):
                 assert result[0].status == "FAIL"
                 assert result[0].resource_id == AWS_ACCOUNT_NUMBER
                 assert result[0].resource_arn == AWS_ACCOUNT_ARN
-                assert result[0].region == AWS_REGION
+                assert result[0].region == AWS_REGION_US_EAST_1
                 assert search(
                     "Password expiration is set greater than 90 days",
                     result[0].status_extended,
                 )
 
-    @mock_iam
+    @mock_aws
     def test_password_expiration_just_90(self):
         from prowler.providers.aws.services.iam.iam_service import IAM, PasswordPolicy
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -165,7 +132,7 @@ def test_password_expiration_just_90(self):
                 assert result[0].status == "PASS"
                 assert result[0].resource_id == AWS_ACCOUNT_NUMBER
                 assert result[0].resource_arn == AWS_ACCOUNT_ARN
-                assert result[0].region == AWS_REGION
+                assert result[0].region == AWS_REGION_US_EAST_1
                 assert search(
                     "Password expiration is set lower than 90 days",
                     result[0].status_extended,
diff --git a/tests/providers/aws/services/iam/iam_password_policy_lowercase/iam_password_policy_lowercase_test.py b/tests/providers/aws/services/iam/iam_password_policy_lowercase/iam_password_policy_lowercase_test.py
index 547f82da679..13339371fe4 100644
--- a/tests/providers/aws/services/iam/iam_password_policy_lowercase/iam_password_policy_lowercase_test.py
+++ b/tests/providers/aws/services/iam/iam_password_policy_lowercase/iam_password_policy_lowercase_test.py
@@ -1,50 +1,19 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_iam
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_ARN = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_iam_password_policy_lowercase:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_iam
+    @mock_aws
     def test_iam_password_policy_no_lowercase_flag(self):
         iam_client = client("iam")
         # update password policy
@@ -52,7 +21,7 @@ def test_iam_password_policy_no_lowercase_flag(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -76,9 +45,9 @@ def test_iam_password_policy_no_lowercase_flag(self):
             )
             assert result[0].resource_id == AWS_ACCOUNT_NUMBER
             assert result[0].resource_arn == AWS_ACCOUNT_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_iam
+    @mock_aws
     def test_iam_password_policy_lowercase_flag(self):
         iam_client = client("iam")
         # update password policy
@@ -86,7 +55,7 @@ def test_iam_password_policy_lowercase_flag(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -110,4 +79,4 @@ def test_iam_password_policy_lowercase_flag(self):
             )
             assert result[0].resource_id == AWS_ACCOUNT_NUMBER
             assert result[0].resource_arn == AWS_ACCOUNT_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/iam/iam_password_policy_minimum_length_14/iam_password_policy_minimum_length_14_test.py b/tests/providers/aws/services/iam/iam_password_policy_minimum_length_14/iam_password_policy_minimum_length_14_test.py
index 6f6a4727b70..78981529cc1 100644
--- a/tests/providers/aws/services/iam/iam_password_policy_minimum_length_14/iam_password_policy_minimum_length_14_test.py
+++ b/tests/providers/aws/services/iam/iam_password_policy_minimum_length_14/iam_password_policy_minimum_length_14_test.py
@@ -1,50 +1,26 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_iam
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_ARN = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_iam_password_policy_minimum_length_14:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_iam
+    from tests.providers.aws.audit_info_utils import (
+        AWS_ACCOUNT_ARN,
+        AWS_ACCOUNT_NUMBER,
+        AWS_REGION_US_EAST_1,
+        set_mocked_aws_audit_info,
+    )
+
+    @mock_aws
     def test_iam_password_policy_minimum_length_equal_14(self):
         iam_client = client("iam")
         # update password policy
@@ -52,7 +28,7 @@ def test_iam_password_policy_minimum_length_equal_14(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -76,9 +52,9 @@ def test_iam_password_policy_minimum_length_equal_14(self):
             )
             assert result[0].resource_id == AWS_ACCOUNT_NUMBER
             assert result[0].resource_arn == AWS_ACCOUNT_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_iam
+    @mock_aws
     def test_iam_password_policy_minimum_length_greater_14(self):
         iam_client = client("iam")
         # update password policy
@@ -86,7 +62,7 @@ def test_iam_password_policy_minimum_length_greater_14(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -110,9 +86,9 @@ def test_iam_password_policy_minimum_length_greater_14(self):
             )
             assert result[0].resource_id == AWS_ACCOUNT_NUMBER
             assert result[0].resource_arn == AWS_ACCOUNT_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_iam
+    @mock_aws
     def test_iam_password_policy_minimum_length_less_14(self):
         iam_client = client("iam")
         # update password policy
@@ -120,7 +96,7 @@ def test_iam_password_policy_minimum_length_less_14(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -144,4 +120,4 @@ def test_iam_password_policy_minimum_length_less_14(self):
             )
             assert result[0].resource_id == AWS_ACCOUNT_NUMBER
             assert result[0].resource_arn == AWS_ACCOUNT_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/iam/iam_password_policy_number/iam_password_policy_number_test.py b/tests/providers/aws/services/iam/iam_password_policy_number/iam_password_policy_number_test.py
index 2b3b1770a50..dc164ce983a 100644
--- a/tests/providers/aws/services/iam/iam_password_policy_number/iam_password_policy_number_test.py
+++ b/tests/providers/aws/services/iam/iam_password_policy_number/iam_password_policy_number_test.py
@@ -1,50 +1,26 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_iam
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_ARN = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_iam_password_policy_number:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_iam
+    from tests.providers.aws.audit_info_utils import (
+        AWS_ACCOUNT_ARN,
+        AWS_ACCOUNT_NUMBER,
+        AWS_REGION_US_EAST_1,
+        set_mocked_aws_audit_info,
+    )
+
+    @mock_aws
     def test_iam_password_policy_no_number_flag(self):
         iam_client = client("iam")
         # update password policy
@@ -52,7 +28,7 @@ def test_iam_password_policy_no_number_flag(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -76,9 +52,9 @@ def test_iam_password_policy_no_number_flag(self):
             )
             assert result[0].resource_id == AWS_ACCOUNT_NUMBER
             assert result[0].resource_arn == AWS_ACCOUNT_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_iam
+    @mock_aws
     def test_iam_password_policy_number_flag(self):
         iam_client = client("iam")
         # update password policy
@@ -86,7 +62,7 @@ def test_iam_password_policy_number_flag(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -110,4 +86,4 @@ def test_iam_password_policy_number_flag(self):
             )
             assert result[0].resource_id == AWS_ACCOUNT_NUMBER
             assert result[0].resource_arn == AWS_ACCOUNT_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/iam/iam_password_policy_reuse_24/iam_password_policy_reuse_24_test.py b/tests/providers/aws/services/iam/iam_password_policy_reuse_24/iam_password_policy_reuse_24_test.py
index 33bc631a2ef..980141c3437 100644
--- a/tests/providers/aws/services/iam/iam_password_policy_reuse_24/iam_password_policy_reuse_24_test.py
+++ b/tests/providers/aws/services/iam/iam_password_policy_reuse_24/iam_password_policy_reuse_24_test.py
@@ -1,55 +1,31 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_iam
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_ARN = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_iam_password_policy_reuse_24:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
+    from tests.providers.aws.audit_info_utils import (
+        AWS_ACCOUNT_ARN,
+        AWS_ACCOUNT_NUMBER,
+        AWS_REGION_US_EAST_1,
+        set_mocked_aws_audit_info,
+    )
 
-    @mock_iam
+    @mock_aws
     def test_iam_password_policy_reuse_prevention_equal_24(self):
         iam_client = client("iam")
         # update password policy
         iam_client.update_account_password_policy(PasswordReusePrevention=24)
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         from prowler.providers.aws.services.iam.iam_service import IAM
 
         with mock.patch(
@@ -74,15 +50,15 @@ def test_iam_password_policy_reuse_prevention_equal_24(self):
             )
             assert result[0].resource_id == AWS_ACCOUNT_NUMBER
             assert result[0].resource_arn == AWS_ACCOUNT_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_iam
+    @mock_aws
     def test_iam_password_policy_reuse_prevention_less_24(self):
         iam_client = client("iam")
         # update password policy
         iam_client.update_account_password_policy(PasswordReusePrevention=20)
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         from prowler.providers.aws.services.iam.iam_service import IAM
 
         with mock.patch(
@@ -107,4 +83,4 @@ def test_iam_password_policy_reuse_prevention_less_24(self):
             )
             assert result[0].resource_id == AWS_ACCOUNT_NUMBER
             assert result[0].resource_arn == AWS_ACCOUNT_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/iam/iam_password_policy_symbol/iam_password_policy_symbol_test.py b/tests/providers/aws/services/iam/iam_password_policy_symbol/iam_password_policy_symbol_test.py
index b652ab6ff72..9328dac94df 100644
--- a/tests/providers/aws/services/iam/iam_password_policy_symbol/iam_password_policy_symbol_test.py
+++ b/tests/providers/aws/services/iam/iam_password_policy_symbol/iam_password_policy_symbol_test.py
@@ -1,50 +1,26 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_iam
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_ARN = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_iam_password_policy_symbol:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_iam
+    from tests.providers.aws.audit_info_utils import (
+        AWS_ACCOUNT_ARN,
+        AWS_ACCOUNT_NUMBER,
+        AWS_REGION_US_EAST_1,
+        set_mocked_aws_audit_info,
+    )
+
+    @mock_aws
     def test_iam_password_policy_no_symbol_flag(self):
         iam_client = client("iam")
         # update password policy
@@ -52,7 +28,7 @@ def test_iam_password_policy_no_symbol_flag(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -76,9 +52,9 @@ def test_iam_password_policy_no_symbol_flag(self):
             )
             assert result[0].resource_id == AWS_ACCOUNT_NUMBER
             assert result[0].resource_arn == AWS_ACCOUNT_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_iam
+    @mock_aws
     def test_iam_password_policy_symbol_flag(self):
         iam_client = client("iam")
         # update password policy
@@ -86,7 +62,7 @@ def test_iam_password_policy_symbol_flag(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -110,4 +86,4 @@ def test_iam_password_policy_symbol_flag(self):
             )
             assert result[0].resource_id == AWS_ACCOUNT_NUMBER
             assert result[0].resource_arn == AWS_ACCOUNT_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/iam/iam_password_policy_uppercase/iam_password_policy_uppercase_test.py b/tests/providers/aws/services/iam/iam_password_policy_uppercase/iam_password_policy_uppercase_test.py
index 767c46e428c..19de44cf6a7 100644
--- a/tests/providers/aws/services/iam/iam_password_policy_uppercase/iam_password_policy_uppercase_test.py
+++ b/tests/providers/aws/services/iam/iam_password_policy_uppercase/iam_password_policy_uppercase_test.py
@@ -1,55 +1,31 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_iam
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_ARN = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_iam_password_policy_uppercase:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
+    from tests.providers.aws.audit_info_utils import (
+        AWS_ACCOUNT_ARN,
+        AWS_ACCOUNT_NUMBER,
+        AWS_REGION_US_EAST_1,
+        set_mocked_aws_audit_info,
+    )
 
-    @mock_iam
+    @mock_aws
     def test_iam_password_policy_no_uppercase_flag(self):
         iam_client = client("iam")
         # update password policy
         iam_client.update_account_password_policy(RequireUppercaseCharacters=False)
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         from prowler.providers.aws.services.iam.iam_service import IAM
 
         with mock.patch(
@@ -74,15 +50,15 @@ def test_iam_password_policy_no_uppercase_flag(self):
             )
             assert result[0].resource_id == AWS_ACCOUNT_NUMBER
             assert result[0].resource_arn == AWS_ACCOUNT_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_iam
+    @mock_aws
     def test_iam_password_policy_uppercase_flag(self):
         iam_client = client("iam")
         # update password policy
         iam_client.update_account_password_policy(RequireUppercaseCharacters=True)
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         from prowler.providers.aws.services.iam.iam_service import IAM
 
         with mock.patch(
@@ -107,4 +83,4 @@ def test_iam_password_policy_uppercase_flag(self):
             )
             assert result[0].resource_id == AWS_ACCOUNT_NUMBER
             assert result[0].resource_arn == AWS_ACCOUNT_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/iam/iam_policy_allows_privilege_escalation/iam_policy_allows_privilege_escalation_test.py b/tests/providers/aws/services/iam/iam_policy_allows_privilege_escalation/iam_policy_allows_privilege_escalation_test.py
index 1b32aabd07d..5d5c9d20569 100644
--- a/tests/providers/aws/services/iam/iam_policy_allows_privilege_escalation/iam_policy_allows_privilege_escalation_test.py
+++ b/tests/providers/aws/services/iam/iam_policy_allows_privilege_escalation/iam_policy_allows_privilege_escalation_test.py
@@ -2,14 +2,14 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_iam
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 # Keep this up-to-date with the check's actions that allows for privilege escalation
 privilege_escalation_policies_combination = {
@@ -84,40 +84,16 @@
 
 
 class Test_iam_policy_allows_privilege_escalation:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    # @mock_iam
+    from tests.providers.aws.audit_info_utils import (
+        AWS_ACCOUNT_ARN,
+        AWS_ACCOUNT_NUMBER,
+        AWS_REGION_US_EAST_1,
+        set_mocked_aws_audit_info,
+    )
+
+    # @mock_aws
     # def test_iam_policy_allows_privilege_escalation_sts(self):
-    #     iam_client = client("iam", region_name=AWS_REGION)
+    #     iam_client = client("iam", region_name=AWS_REGION_US_EAST_1)
     #     policy_name = "policy1"
     #     policy_document = {
     #         "Version": "2012-10-17",
@@ -128,10 +104,8 @@ def set_mocked_audit_info(self):
     #     policy_arn = iam_client.create_policy(
     #         PolicyName=policy_name, PolicyDocument=dumps(policy_document)
     #     )["Policy"]["Arn"]
-
-    #     current_audit_info = self.set_mocked_audit_info()
+    #     set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
     #     from prowler.providers.aws.services.iam.iam_service import IAM
-
     #     with mock.patch(
     #         "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
     #         new=current_audit_info,
@@ -143,7 +117,6 @@ def set_mocked_audit_info(self):
     #         from prowler.providers.aws.services.iam.iam_policy_allows_privilege_escalation.iam_policy_allows_privilege_escalation import (
     #             iam_policy_allows_privilege_escalation,
     #         )
-
     #         check = iam_policy_allows_privilege_escalation()
     #         result = check.execute()
     #         assert len(result) == 1
@@ -155,9 +128,9 @@ def set_mocked_audit_info(self):
     #         assert result[0].resource_id == policy_name
     #         assert result[0].resource_arn == policy_arn
 
-    @mock_iam
+    @mock_aws
     def test_iam_policy_not_allows_privilege_escalation(self):
-        iam_client = client("iam", region_name=AWS_REGION)
+        iam_client = client("iam", region_name=AWS_REGION_US_EAST_1)
         policy_name = "policy1"
         policy_document = {
             "Version": "2012-10-17",
@@ -171,7 +144,7 @@ def test_iam_policy_not_allows_privilege_escalation(self):
             PolicyName=policy_name, PolicyDocument=dumps(policy_document)
         )["Policy"]["Arn"]
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         from prowler.providers.aws.services.iam.iam_service import IAM
 
         with mock.patch(
@@ -196,12 +169,12 @@ def test_iam_policy_not_allows_privilege_escalation(self):
             )
             assert result[0].resource_id == policy_name
             assert result[0].resource_arn == policy_arn
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == []
 
-    @mock_iam
+    @mock_aws
     def test_iam_policy_not_allows_privilege_escalation_glue_GetDevEndpoints(self):
-        iam_client = client("iam", region_name=AWS_REGION)
+        iam_client = client("iam", region_name=AWS_REGION_US_EAST_1)
         policy_name = "policy1"
         policy_document = {
             "Version": "2012-10-17",
@@ -219,7 +192,7 @@ def test_iam_policy_not_allows_privilege_escalation_glue_GetDevEndpoints(self):
             PolicyName=policy_name, PolicyDocument=dumps(policy_document)
         )["Policy"]["Arn"]
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         from prowler.providers.aws.services.iam.iam_service import IAM
 
         with mock.patch(
@@ -244,12 +217,12 @@ def test_iam_policy_not_allows_privilege_escalation_glue_GetDevEndpoints(self):
             )
             assert result[0].resource_id == policy_name
             assert result[0].resource_arn == policy_arn
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == []
 
-    @mock_iam
+    @mock_aws
     def test_iam_policy_not_allows_privilege_escalation_dynamodb_PutItem(self):
-        iam_client = client("iam", region_name=AWS_REGION)
+        iam_client = client("iam", region_name=AWS_REGION_US_EAST_1)
         policy_name = "policy1"
         policy_document = {
             "Version": "2012-10-17",
@@ -278,7 +251,7 @@ def test_iam_policy_not_allows_privilege_escalation_dynamodb_PutItem(self):
             PolicyName=policy_name, PolicyDocument=dumps(policy_document)
         )["Policy"]["Arn"]
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         from prowler.providers.aws.services.iam.iam_service import IAM
 
         with mock.patch(
@@ -303,14 +276,14 @@ def test_iam_policy_not_allows_privilege_escalation_dynamodb_PutItem(self):
             )
             assert result[0].resource_id == policy_name
             assert result[0].resource_arn == policy_arn
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == []
 
-    @mock_iam
+    @mock_aws
     def test_iam_policy_allows_privilege_escalation_iam_all_and_ec2_RunInstances(
         self,
     ):
-        iam_client = client("iam", region_name=AWS_REGION)
+        iam_client = client("iam", region_name=AWS_REGION_US_EAST_1)
         policy_name = "policy1"
         policy_document = {
             "Version": "2012-10-17",
@@ -333,7 +306,7 @@ def test_iam_policy_allows_privilege_escalation_iam_all_and_ec2_RunInstances(
             PolicyName=policy_name, PolicyDocument=dumps(policy_document)
         )["Policy"]["Arn"]
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         from prowler.providers.aws.services.iam.iam_service import IAM
 
         with mock.patch(
@@ -354,7 +327,7 @@ def test_iam_policy_allows_privilege_escalation_iam_all_and_ec2_RunInstances(
             assert result[0].status == "FAIL"
             assert result[0].resource_id == policy_name
             assert result[0].resource_arn == policy_arn
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == []
 
             assert search(
@@ -364,11 +337,11 @@ def test_iam_policy_allows_privilege_escalation_iam_all_and_ec2_RunInstances(
             assert search("iam:PassRole", result[0].status_extended)
             assert search("ec2:RunInstances", result[0].status_extended)
 
-    @mock_iam
+    @mock_aws
     def test_iam_policy_allows_privilege_escalation_iam_PassRole(
         self,
     ):
-        iam_client = client("iam", region_name=AWS_REGION)
+        iam_client = client("iam", region_name=AWS_REGION_US_EAST_1)
         policy_name = "policy1"
         policy_document = {
             "Version": "2012-10-17",
@@ -384,7 +357,7 @@ def test_iam_policy_allows_privilege_escalation_iam_PassRole(
             PolicyName=policy_name, PolicyDocument=dumps(policy_document)
         )["Policy"]["Arn"]
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         from prowler.providers.aws.services.iam.iam_service import IAM
 
         with mock.patch(
@@ -405,7 +378,7 @@ def test_iam_policy_allows_privilege_escalation_iam_PassRole(
             assert result[0].status == "FAIL"
             assert result[0].resource_id == policy_name
             assert result[0].resource_arn == policy_arn
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == []
 
             assert search(
@@ -414,11 +387,11 @@ def test_iam_policy_allows_privilege_escalation_iam_PassRole(
             )
             assert search("iam:PassRole", result[0].status_extended)
 
-    @mock_iam
+    @mock_aws
     def test_iam_policy_allows_privilege_escalation_two_combinations(
         self,
     ):
-        iam_client = client("iam", region_name=AWS_REGION)
+        iam_client = client("iam", region_name=AWS_REGION_US_EAST_1)
         policy_name = "policy1"
         policy_document = {
             "Version": "2012-10-17",
@@ -453,7 +426,7 @@ def test_iam_policy_allows_privilege_escalation_two_combinations(
             PolicyName=policy_name, PolicyDocument=dumps(policy_document)
         )["Policy"]["Arn"]
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         from prowler.providers.aws.services.iam.iam_service import IAM
 
         with mock.patch(
@@ -474,7 +447,7 @@ def test_iam_policy_allows_privilege_escalation_two_combinations(
             assert result[0].status == "FAIL"
             assert result[0].resource_id == policy_name
             assert result[0].resource_arn == policy_arn
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == []
 
             assert search(
@@ -486,11 +459,11 @@ def test_iam_policy_allows_privilege_escalation_two_combinations(
             assert search("lambda:CreateFunction", result[0].status_extended)
             assert search("ec2:RunInstances", result[0].status_extended)
 
-    @mock_iam
+    @mock_aws
     def test_iam_policy_allows_privilege_escalation_iam_PassRole_and_other_actions(
         self,
     ):
-        iam_client = client("iam", region_name=AWS_REGION)
+        iam_client = client("iam", region_name=AWS_REGION_US_EAST_1)
         policy_name = "policy1"
         policy_document = {
             "Version": "2012-10-17",
@@ -511,7 +484,7 @@ def test_iam_policy_allows_privilege_escalation_iam_PassRole_and_other_actions(
             PolicyName=policy_name, PolicyDocument=dumps(policy_document)
         )["Policy"]["Arn"]
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         from prowler.providers.aws.services.iam.iam_service import IAM
 
         with mock.patch(
@@ -532,7 +505,7 @@ def test_iam_policy_allows_privilege_escalation_iam_PassRole_and_other_actions(
             assert result[0].status == "FAIL"
             assert result[0].resource_id == policy_name
             assert result[0].resource_arn == policy_arn
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_tags == []
 
             assert search(
@@ -541,12 +514,12 @@ def test_iam_policy_allows_privilege_escalation_iam_PassRole_and_other_actions(
             )
             assert search("iam:PassRole", result[0].status_extended)
 
-    @mock_iam
+    @mock_aws
     def test_iam_policy_allows_privilege_escalation_policies_combination(
         self,
     ):
-        current_audit_info = self.set_mocked_audit_info()
-        iam_client = client("iam", region_name=AWS_REGION)
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
+        iam_client = client("iam", region_name=AWS_REGION_US_EAST_1)
         policy_name = "privileged_policy"
         for values in privilege_escalation_policies_combination.values():
             print(list(values))
@@ -585,7 +558,7 @@ def test_iam_policy_allows_privilege_escalation_policies_combination(
                 assert result[0].status == "FAIL"
                 assert result[0].resource_id == policy_name
                 assert result[0].resource_arn == policy_arn
-                assert result[0].region == AWS_REGION
+                assert result[0].region == AWS_REGION_US_EAST_1
                 assert result[0].resource_tags == []
 
                 assert search(
@@ -600,12 +573,12 @@ def test_iam_policy_allows_privilege_escalation_policies_combination(
                 # Delete each IAM policy after the test
                 iam_client.delete_policy(PolicyArn=policy_arn)
 
-    @mock_iam
+    @mock_aws
     def test_iam_policy_allows_privilege_escalation_two_policies_one_good_one_bad(
         self,
     ):
-        current_audit_info = self.set_mocked_audit_info()
-        iam_client = client("iam", region_name=AWS_REGION)
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
+        iam_client = client("iam", region_name=AWS_REGION_US_EAST_1)
         policy_name_1 = "privileged_policy_1"
         policy_document_1 = {
             "Version": "2012-10-17",
@@ -672,7 +645,7 @@ def test_iam_policy_allows_privilege_escalation_two_policies_one_good_one_bad(
                     assert finding.status == "PASS"
                     assert finding.resource_id == policy_name_1
                     assert finding.resource_arn == policy_arn_1
-                    assert finding.region == AWS_REGION
+                    assert finding.region == AWS_REGION_US_EAST_1
                     assert finding.resource_tags == []
                     assert (
                         finding.status_extended
@@ -683,7 +656,7 @@ def test_iam_policy_allows_privilege_escalation_two_policies_one_good_one_bad(
                     assert finding.status == "FAIL"
                     assert finding.resource_id == policy_name_2
                     assert finding.resource_arn == policy_arn_2
-                    assert finding.region == AWS_REGION
+                    assert finding.region == AWS_REGION_US_EAST_1
                     assert finding.resource_tags == []
                     assert search(
                         f"Custom Policy {policy_arn_2} allows privilege escalation using the following actions: ",
@@ -693,12 +666,12 @@ def test_iam_policy_allows_privilege_escalation_two_policies_one_good_one_bad(
                     assert search("lambda:InvokeFunction", finding.status_extended)
                     assert search("lambda:CreateFunction", finding.status_extended)
 
-    @mock_iam
+    @mock_aws
     def test_iam_policy_allows_privilege_escalation_two_bad_policies(
         self,
     ):
-        current_audit_info = self.set_mocked_audit_info()
-        iam_client = client("iam", region_name=AWS_REGION)
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
+        iam_client = client("iam", region_name=AWS_REGION_US_EAST_1)
         policy_name_1 = "privileged_policy_1"
         policy_document_1 = {
             "Version": "2012-10-17",
@@ -772,7 +745,7 @@ def test_iam_policy_allows_privilege_escalation_two_bad_policies(
                     assert finding.status == "FAIL"
                     assert finding.resource_id == policy_name_1
                     assert finding.resource_arn == policy_arn_1
-                    assert finding.region == AWS_REGION
+                    assert finding.region == AWS_REGION_US_EAST_1
                     assert finding.resource_tags == []
 
                     assert search(
@@ -787,7 +760,7 @@ def test_iam_policy_allows_privilege_escalation_two_bad_policies(
                     assert finding.status == "FAIL"
                     assert finding.resource_id == policy_name_2
                     assert finding.resource_arn == policy_arn_2
-                    assert finding.region == AWS_REGION
+                    assert finding.region == AWS_REGION_US_EAST_1
                     assert finding.resource_tags == []
 
                     assert search(
@@ -798,12 +771,12 @@ def test_iam_policy_allows_privilege_escalation_two_bad_policies(
                     assert search("lambda:InvokeFunction", finding.status_extended)
                     assert search("lambda:CreateFunction", finding.status_extended)
 
-    @mock_iam
+    @mock_aws
     def test_iam_policy_allows_privilege_escalation_over_permissive_policy(
         self,
     ):
-        current_audit_info = self.set_mocked_audit_info()
-        iam_client = client("iam", region_name=AWS_REGION)
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
+        iam_client = client("iam", region_name=AWS_REGION_US_EAST_1)
         policy_name_1 = "privileged_policy_1"
         policy_document_1 = {
             "Version": "2012-10-17",
@@ -853,7 +826,7 @@ def test_iam_policy_allows_privilege_escalation_over_permissive_policy(
                     assert finding.status == "FAIL"
                     assert finding.resource_id == policy_name_1
                     assert finding.resource_arn == policy_arn_1
-                    assert finding.region == AWS_REGION
+                    assert finding.region == AWS_REGION_US_EAST_1
                     assert finding.resource_tags == []
 
                     assert search(
@@ -864,12 +837,12 @@ def test_iam_policy_allows_privilege_escalation_over_permissive_policy(
                     assert search("iam:PassRole", finding.status_extended)
                     assert search("ec2:RunInstances", finding.status_extended)
 
-    @mock_iam
+    @mock_aws
     def test_iam_policy_allows_privilege_escalation_administrator_policy(
         self,
     ):
-        current_audit_info = self.set_mocked_audit_info()
-        iam_client = client("iam", region_name=AWS_REGION)
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
+        iam_client = client("iam", region_name=AWS_REGION_US_EAST_1)
         policy_name_1 = "privileged_policy_1"
         policy_document_1 = {
             "Version": "2012-10-17",
@@ -909,7 +882,7 @@ def test_iam_policy_allows_privilege_escalation_administrator_policy(
                     assert finding.status == "FAIL"
                     assert finding.resource_id == policy_name_1
                     assert finding.resource_arn == policy_arn_1
-                    assert finding.region == AWS_REGION
+                    assert finding.region == AWS_REGION_US_EAST_1
                     assert finding.resource_tags == []
                     assert search(
                         f"Custom Policy {policy_arn_1} allows privilege escalation using the following actions:",
@@ -922,12 +895,12 @@ def test_iam_policy_allows_privilege_escalation_administrator_policy(
                         ]:
                             assert search(permission, finding.status_extended)
 
-    @mock_iam
+    @mock_aws
     def test_iam_policy_allows_privilege_escalation_iam_put(
         self,
     ):
-        current_audit_info = self.set_mocked_audit_info()
-        iam_client = client("iam", region_name=AWS_REGION)
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
+        iam_client = client("iam", region_name=AWS_REGION_US_EAST_1)
         policy_name_1 = "privileged_policy_1"
         policy_document_1 = {
             "Version": "2012-10-17",
@@ -967,7 +940,7 @@ def test_iam_policy_allows_privilege_escalation_iam_put(
                     assert finding.status == "FAIL"
                     assert finding.resource_id == policy_name_1
                     assert finding.resource_arn == policy_arn_1
-                    assert finding.region == AWS_REGION
+                    assert finding.region == AWS_REGION_US_EAST_1
                     assert finding.resource_tags == []
                     assert search(
                         f"Custom Policy {policy_arn_1} allows privilege escalation using the following actions:",
@@ -975,12 +948,12 @@ def test_iam_policy_allows_privilege_escalation_iam_put(
                     )
                     assert search("iam:Put*", finding.status_extended)
 
-    @mock_iam
+    @mock_aws
     def test_iam_policy_allows_privilege_escalation_iam_wildcard(
         self,
     ):
-        current_audit_info = self.set_mocked_audit_info()
-        iam_client = client("iam", region_name=AWS_REGION)
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
+        iam_client = client("iam", region_name=AWS_REGION_US_EAST_1)
         policy_name_1 = "privileged_policy_1"
         policy_document_1 = {
             "Version": "2012-10-17",
@@ -1020,7 +993,7 @@ def test_iam_policy_allows_privilege_escalation_iam_wildcard(
                     assert finding.status == "FAIL"
                     assert finding.resource_id == policy_name_1
                     assert finding.resource_arn == policy_arn_1
-                    assert finding.region == AWS_REGION
+                    assert finding.region == AWS_REGION_US_EAST_1
                     assert finding.resource_tags == []
                     assert search(
                         f"Custom Policy {policy_arn_1} allows privilege escalation using the following actions:",
@@ -1028,12 +1001,12 @@ def test_iam_policy_allows_privilege_escalation_iam_wildcard(
                     )
                     assert search("iam:*", finding.status_extended)
 
-    @mock_iam
+    @mock_aws
     def test_iam_policy_not_allows_privilege_escalation_custom_policy(
         self,
     ):
-        current_audit_info = self.set_mocked_audit_info()
-        iam_client = client("iam", region_name=AWS_REGION)
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
+        iam_client = client("iam", region_name=AWS_REGION_US_EAST_1)
         policy_name_1 = "privileged_policy_1"
         policy_document_1 = {
             "Version": "2012-10-17",
@@ -1048,7 +1021,7 @@ def test_iam_policy_not_allows_privilege_escalation_custom_policy(
                     "Sid": "",
                     "Effect": "Allow",
                     "Action": "es:*",
-                    "Resource": f"arn:aws:es:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:domain/test/*",
+                    "Resource": f"arn:aws:es:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:domain/test/*",
                 },
             ],
         }
@@ -1079,7 +1052,7 @@ def test_iam_policy_not_allows_privilege_escalation_custom_policy(
                     assert finding.status == "PASS"
                     assert finding.resource_id == policy_name_1
                     assert finding.resource_arn == policy_arn_1
-                    assert finding.region == AWS_REGION
+                    assert finding.region == AWS_REGION_US_EAST_1
                     assert finding.resource_tags == []
                     assert (
                         finding.status_extended
diff --git a/tests/providers/aws/services/iam/iam_policy_attached_only_to_group_or_roles/iam_policy_attached_only_to_group_or_roles_test.py b/tests/providers/aws/services/iam/iam_policy_attached_only_to_group_or_roles/iam_policy_attached_only_to_group_or_roles_test.py
index ef45039a6b7..6da58e95e5e 100644
--- a/tests/providers/aws/services/iam/iam_policy_attached_only_to_group_or_roles/iam_policy_attached_only_to_group_or_roles_test.py
+++ b/tests/providers/aws/services/iam/iam_policy_attached_only_to_group_or_roles/iam_policy_attached_only_to_group_or_roles_test.py
@@ -1,49 +1,18 @@
 from json import dumps
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_iam
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "eu-west-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_iam_policy_attached_only_to_group_or_roles:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=[AWS_REGION],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_iam
+    @mock_aws
     def test_iam_user_attached_policy(self):
         result = []
         iam_client = client("iam")
@@ -61,7 +30,7 @@ def test_iam_user_attached_policy(self):
         )["Policy"]["Arn"]
         iam_client.attach_user_policy(UserName=user, PolicyArn=policyArn)
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         from prowler.providers.aws.services.iam.iam_service import IAM
 
         with mock.patch(
@@ -82,14 +51,14 @@ def test_iam_user_attached_policy(self):
                 result[0].status_extended
                 == f"User {user} has the policy {policy_name} attached."
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_id == f"{user}/{policy_name}"
             assert (
                 result[0].resource_arn
                 == f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:user/{user}"
             )
 
-    @mock_iam
+    @mock_aws
     def test_iam_user_attached_and_inline_policy(self):
         result = []
         iam_client = client("iam")
@@ -110,7 +79,7 @@ def test_iam_user_attached_and_inline_policy(self):
         )["Policy"]["Arn"]
         iam_client.attach_user_policy(UserName=user, PolicyArn=policyArn)
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         from prowler.providers.aws.services.iam.iam_service import IAM
 
         with mock.patch(
@@ -132,7 +101,7 @@ def test_iam_user_attached_and_inline_policy(self):
                 result[0].status_extended
                 == f"User {user} has the policy {policyName} attached."
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_id == f"{user}/{policyName}"
 
             assert result[0].status == "FAIL"
@@ -140,14 +109,14 @@ def test_iam_user_attached_and_inline_policy(self):
                 result[0].status_extended
                 == f"User {user} has the policy {policyName} attached."
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_id == f"{user}/{policyName}"
             assert (
                 result[0].resource_arn
                 == f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:user/{user}"
             )
 
-    @mock_iam
+    @mock_aws
     def test_iam_user_inline_policy(self):
         result = []
         iam_client = client("iam")
@@ -164,7 +133,7 @@ def test_iam_user_inline_policy(self):
             UserName=user, PolicyName=policyName, PolicyDocument=dumps(policyDocument)
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         from prowler.providers.aws.services.iam.iam_service import IAM
 
         with mock.patch(
@@ -185,21 +154,21 @@ def test_iam_user_inline_policy(self):
                 result[0].status_extended
                 == f"User {user} has the inline policy {policyName} attached."
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_id == f"{user}/{policyName}"
             assert (
                 result[0].resource_arn
                 == f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:user/{user}"
             )
 
-    @mock_iam
+    @mock_aws
     def test_iam_user_no_policies(self):
         result = []
         iam_client = client("iam")
         user = "test_no_policies"
         iam_client.create_user(UserName=user)
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         from prowler.providers.aws.services.iam.iam_service import IAM
 
         with mock.patch(
@@ -220,7 +189,7 @@ def test_iam_user_no_policies(self):
                 result[0].status_extended
                 == f"User {user} has no inline or attached policies."
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_id == user
             assert (
                 result[0].resource_arn
diff --git a/tests/providers/aws/services/iam/iam_policy_no_full_access_to_cloudtrail/iam_policy_no_full_access_to_cloudtrail_test.py b/tests/providers/aws/services/iam/iam_policy_no_full_access_to_cloudtrail/iam_policy_no_full_access_to_cloudtrail_test.py
index 8d7515c171c..1781f1f046f 100644
--- a/tests/providers/aws/services/iam/iam_policy_no_full_access_to_cloudtrail/iam_policy_no_full_access_to_cloudtrail_test.py
+++ b/tests/providers/aws/services/iam/iam_policy_no_full_access_to_cloudtrail/iam_policy_no_full_access_to_cloudtrail_test.py
@@ -1,49 +1,20 @@
 from json import dumps
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_iam
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.audit_info import AWS_Audit_Info
 from prowler.providers.aws.services.iam.iam_service import IAM
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_iam_policy_no_full_access_to_cloudtrail:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=None,
-            audited_account_arn=None,
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region="us-east-1",
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
-    @mock_iam
+    @mock_aws
     def test_policy_full_access_to_cloudtrail(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         iam_client = client("iam")
         policy_name = "policy_cloudtrail_full"
         policy_document_full_access = {
@@ -80,9 +51,9 @@ def test_policy_full_access_to_cloudtrail(self):
                 assert result[0].resource_arn == arn
                 assert result[0].region == "us-east-1"
 
-    @mock_iam
+    @mock_aws
     def test_policy_no_full_access_to_cloudtrail(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         iam_client = client("iam")
         policy_name = "policy_no_cloudtrail_full"
         policy_document_full_access = {
@@ -119,9 +90,9 @@ def test_policy_no_full_access_to_cloudtrail(self):
                 assert result[0].resource_arn == arn
                 assert result[0].region == "us-east-1"
 
-    @mock_iam
+    @mock_aws
     def test_policy_mixed(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         iam_client = client("iam")
         policy_name = "policy_mixed"
         policy_document_full_access = {
diff --git a/tests/providers/aws/services/iam/iam_policy_no_full_access_to_kms/iam_policy_no_full_access_to_kms_test.py b/tests/providers/aws/services/iam/iam_policy_no_full_access_to_kms/iam_policy_no_full_access_to_kms_test.py
index 80fdb406d79..425038233e8 100644
--- a/tests/providers/aws/services/iam/iam_policy_no_full_access_to_kms/iam_policy_no_full_access_to_kms_test.py
+++ b/tests/providers/aws/services/iam/iam_policy_no_full_access_to_kms/iam_policy_no_full_access_to_kms_test.py
@@ -1,49 +1,20 @@
 from json import dumps
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_iam
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.audit_info import AWS_Audit_Info
 from prowler.providers.aws.services.iam.iam_service import IAM
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_iam_policy_no_full_access_to_kms:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=None,
-            audited_account_arn=None,
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region="us-east-1",
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
-    @mock_iam
+    @mock_aws
     def test_policy_full_access_to_kms(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         iam_client = client("iam")
         policy_name = "policy_kms_full"
         policy_document_full_access = {
@@ -80,9 +51,9 @@ def test_policy_full_access_to_kms(self):
                 assert result[0].resource_arn == arn
                 assert result[0].region == "us-east-1"
 
-    @mock_iam
+    @mock_aws
     def test_policy_no_full_access_to_kms(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         iam_client = client("iam")
         policy_name = "policy_no_kms_full"
         policy_document_full_access = {
@@ -119,9 +90,9 @@ def test_policy_no_full_access_to_kms(self):
                 assert result[0].resource_arn == arn
                 assert result[0].region == "us-east-1"
 
-    @mock_iam
+    @mock_aws
     def test_policy_mixed(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         iam_client = client("iam")
         policy_name = "policy_mixed"
         policy_document_full_access = {
diff --git a/tests/providers/aws/services/iam/iam_role_administratoraccess_policy/iam_role_administratoraccess_policy_test.py b/tests/providers/aws/services/iam/iam_role_administratoraccess_policy/iam_role_administratoraccess_policy_test.py
index 2ccf1086e50..12936c0198d 100644
--- a/tests/providers/aws/services/iam/iam_role_administratoraccess_policy/iam_role_administratoraccess_policy_test.py
+++ b/tests/providers/aws/services/iam/iam_role_administratoraccess_policy/iam_role_administratoraccess_policy_test.py
@@ -1,54 +1,25 @@
 from json import dumps
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_iam
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.iam.iam_service import Role
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 AWS_REGION = "us-east-1"
 AWS_ACCOUNT_ID = "123456789012"
 
 
 class Test_iam_role_administratoraccess_policy:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_ID,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_ID}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_iam
+    @mock_aws(config={"iam": {"load_aws_managed_policies": True}})
     def test_no_roles(self):
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
             new=current_audit_info,
@@ -65,7 +36,7 @@ def test_no_roles(self):
             result = check.execute()
             assert len(result) == 0
 
-    @mock_iam
+    @mock_aws(config={"iam": {"load_aws_managed_policies": True}})
     def test_role_without_administratoraccess_policy(self):
         iam = client("iam")
         role_name = "test"
@@ -83,7 +54,7 @@ def test_role_without_administratoraccess_policy(self):
             AssumeRolePolicyDocument=dumps(assume_role_policy_document),
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         from prowler.providers.aws.services.iam.iam_service import IAM
 
         with mock.patch(
@@ -110,7 +81,7 @@ def test_role_without_administratoraccess_policy(self):
             assert result[0].resource_arn == response["Role"]["Arn"]
             assert result[0].resource_tags == []
 
-    @mock_iam
+    @mock_aws(config={"iam": {"load_aws_managed_policies": True}})
     def test_role_with_securityaudit_policy(self):
         iam = client("iam")
         role_name = "test"
@@ -132,7 +103,7 @@ def test_role_with_securityaudit_policy(self):
             PolicyArn="arn:aws:iam::aws:policy/SecurityAudit",
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         from prowler.providers.aws.services.iam.iam_service import IAM
 
         with mock.patch(
@@ -159,7 +130,7 @@ def test_role_with_securityaudit_policy(self):
             assert result[0].resource_arn == response["Role"]["Arn"]
             assert result[0].resource_tags == []
 
-    @mock_iam
+    @mock_aws(config={"iam": {"load_aws_managed_policies": True}})
     def test_role_with_administratoraccess_policy(self):
         iam = client("iam")
         role_name = "test"
@@ -181,7 +152,7 @@ def test_role_with_administratoraccess_policy(self):
             PolicyArn="arn:aws:iam::aws:policy/AdministratorAccess",
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         from prowler.providers.aws.services.iam.iam_service import IAM
 
         with mock.patch(
@@ -208,7 +179,7 @@ def test_role_with_administratoraccess_policy(self):
             assert result[0].resource_arn == response["Role"]["Arn"]
             assert result[0].resource_tags == []
 
-    @mock_iam
+    @mock_aws(config={"iam": {"load_aws_managed_policies": True}})
     def test_asterisk_principal_role_with_administratoraccess_policy(self):
         iam = client("iam")
         role_name = "test"
@@ -230,7 +201,7 @@ def test_asterisk_principal_role_with_administratoraccess_policy(self):
             PolicyArn="arn:aws:iam::aws:policy/AdministratorAccess",
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         from prowler.providers.aws.services.iam.iam_service import IAM
 
         with mock.patch(
@@ -257,7 +228,7 @@ def test_asterisk_principal_role_with_administratoraccess_policy(self):
             assert result[0].resource_arn == response["Role"]["Arn"]
             assert result[0].resource_tags == []
 
-    @mock_iam
+    @mock_aws(config={"iam": {"load_aws_managed_policies": True}})
     def test_only_aws_service_linked_roles(self):
         iam_client = mock.MagicMock
         iam_client.roles = []
@@ -279,7 +250,7 @@ def test_only_aws_service_linked_roles(self):
             )
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
diff --git a/tests/providers/aws/services/iam/iam_role_cross_account_readonlyaccess_policy/iam_role_cross_account_readonlyaccess_policy_test.py b/tests/providers/aws/services/iam/iam_role_cross_account_readonlyaccess_policy/iam_role_cross_account_readonlyaccess_policy_test.py
index 4d4da908011..cc2dd250c81 100644
--- a/tests/providers/aws/services/iam/iam_role_cross_account_readonlyaccess_policy/iam_role_cross_account_readonlyaccess_policy_test.py
+++ b/tests/providers/aws/services/iam/iam_role_cross_account_readonlyaccess_policy/iam_role_cross_account_readonlyaccess_policy_test.py
@@ -1,54 +1,25 @@
 from json import dumps
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_iam
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.iam.iam_service import Role
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 AWS_REGION = "us-east-1"
 AWS_ACCOUNT_ID = "123456789012"
 
 
 class Test_iam_role_cross_account_readonlyaccess_policy:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_ID,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_ID}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_iam
+    @mock_aws(config={"iam": {"load_aws_managed_policies": True}})
     def test_no_roles(self):
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
             new=current_audit_info,
@@ -65,7 +36,7 @@ def test_no_roles(self):
             result = check.execute()
             assert len(result) == 0
 
-    @mock_iam
+    @mock_aws(config={"iam": {"load_aws_managed_policies": True}})
     def test_role_without_readonlyaccess_policy(self):
         iam = client("iam")
         role_name = "test"
@@ -83,7 +54,7 @@ def test_role_without_readonlyaccess_policy(self):
             AssumeRolePolicyDocument=dumps(assume_role_policy_document),
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         from prowler.providers.aws.services.iam.iam_service import IAM
 
         with mock.patch(
@@ -110,7 +81,7 @@ def test_role_without_readonlyaccess_policy(self):
             assert result[0].resource_arn == response["Role"]["Arn"]
             assert result[0].resource_tags == []
 
-    @mock_iam
+    @mock_aws(config={"iam": {"load_aws_managed_policies": True}})
     def test_internal_role_with_readonlyaccess_policy(self):
         iam = client("iam")
         role_name = "test"
@@ -132,7 +103,7 @@ def test_internal_role_with_readonlyaccess_policy(self):
             PolicyArn="arn:aws:iam::aws:policy/ReadOnlyAccess",
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         from prowler.providers.aws.services.iam.iam_service import IAM
 
         with mock.patch(
@@ -159,7 +130,7 @@ def test_internal_role_with_readonlyaccess_policy(self):
             assert result[0].resource_arn == response["Role"]["Arn"]
             assert result[0].resource_tags == []
 
-    @mock_iam
+    @mock_aws(config={"iam": {"load_aws_managed_policies": True}})
     def test_cross_account_role_with_readonlyaccess_policy(self):
         iam = client("iam")
         role_name = "test"
@@ -181,7 +152,7 @@ def test_cross_account_role_with_readonlyaccess_policy(self):
             PolicyArn="arn:aws:iam::aws:policy/ReadOnlyAccess",
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         from prowler.providers.aws.services.iam.iam_service import IAM
 
         with mock.patch(
@@ -208,7 +179,7 @@ def test_cross_account_role_with_readonlyaccess_policy(self):
             assert result[0].resource_arn == response["Role"]["Arn"]
             assert result[0].resource_tags == []
 
-    @mock_iam
+    @mock_aws(config={"iam": {"load_aws_managed_policies": True}})
     def test_asterisk_cross_account_role_with_readonlyaccess_policy(self):
         iam = client("iam")
         role_name = "test"
@@ -230,7 +201,7 @@ def test_asterisk_cross_account_role_with_readonlyaccess_policy(self):
             PolicyArn="arn:aws:iam::aws:policy/ReadOnlyAccess",
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         from prowler.providers.aws.services.iam.iam_service import IAM
 
         with mock.patch(
@@ -257,7 +228,7 @@ def test_asterisk_cross_account_role_with_readonlyaccess_policy(self):
             assert result[0].resource_arn == response["Role"]["Arn"]
             assert result[0].resource_tags == []
 
-    @mock_iam
+    @mock_aws(config={"iam": {"load_aws_managed_policies": True}})
     def test_only_aws_service_linked_roles(self):
         iam_client = mock.MagicMock
         iam_client.roles = []
@@ -279,7 +250,7 @@ def test_only_aws_service_linked_roles(self):
             )
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
diff --git a/tests/providers/aws/services/iam/iam_role_cross_service_confused_deputy_prevention/iam_role_cross_service_confused_deputy_prevention_test.py b/tests/providers/aws/services/iam/iam_role_cross_service_confused_deputy_prevention/iam_role_cross_service_confused_deputy_prevention_test.py
index bc707dc0ee4..2c8e1f3e8ba 100644
--- a/tests/providers/aws/services/iam/iam_role_cross_service_confused_deputy_prevention/iam_role_cross_service_confused_deputy_prevention_test.py
+++ b/tests/providers/aws/services/iam/iam_role_cross_service_confused_deputy_prevention/iam_role_cross_service_confused_deputy_prevention_test.py
@@ -1,54 +1,25 @@
 from json import dumps
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_iam
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.iam.iam_service import Role
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 AWS_REGION = "us-east-1"
 AWS_ACCOUNT_ID = "123456789012"
 
 
 class Test_iam_role_cross_service_confused_deputy_prevention:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_ID,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_ID}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_iam
+    @mock_aws
     def test_no_roles(self):
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         current_audit_info.audited_account = AWS_ACCOUNT_ID
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -66,7 +37,7 @@ def test_no_roles(self):
             result = check.execute()
             assert len(result) == 0
 
-    @mock_iam
+    @mock_aws
     def test_only_aws_service_linked_roles(self):
         iam_client = mock.MagicMock
         iam_client.roles = []
@@ -88,7 +59,7 @@ def test_only_aws_service_linked_roles(self):
             )
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         current_audit_info.audited_account = AWS_ACCOUNT_ID
 
         with mock.patch(
@@ -107,7 +78,7 @@ def test_only_aws_service_linked_roles(self):
             result = check.execute()
             assert len(result) == 0
 
-    @mock_iam
+    @mock_aws
     def test_iam_service_role_without_cross_service_confused_deputy_prevention(self):
         iam_client = client("iam", region_name=AWS_REGION)
         policy_document = {
@@ -127,7 +98,7 @@ def test_iam_service_role_without_cross_service_confused_deputy_prevention(self)
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         current_audit_info.audited_account = AWS_ACCOUNT_ID
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -152,7 +123,7 @@ def test_iam_service_role_without_cross_service_confused_deputy_prevention(self)
             assert result[0].resource_id == "test"
             assert result[0].resource_arn == response["Role"]["Arn"]
 
-    @mock_iam
+    @mock_aws
     def test_iam_service_role_with_cross_service_confused_deputy_prevention(self):
         iam_client = client("iam", region_name=AWS_REGION)
         policy_document = {
@@ -175,7 +146,7 @@ def test_iam_service_role_with_cross_service_confused_deputy_prevention(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         current_audit_info.audited_account = AWS_ACCOUNT_ID
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -200,7 +171,7 @@ def test_iam_service_role_with_cross_service_confused_deputy_prevention(self):
             assert result[0].resource_id == "test"
             assert result[0].resource_arn == response["Role"]["Arn"]
 
-    @mock_iam
+    @mock_aws
     def test_iam_service_role_with_cross_service_confused_deputy_prevention_stringlike(
         self,
     ):
@@ -225,7 +196,7 @@ def test_iam_service_role_with_cross_service_confused_deputy_prevention_stringli
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         current_audit_info.audited_account = AWS_ACCOUNT_ID
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -250,7 +221,7 @@ def test_iam_service_role_with_cross_service_confused_deputy_prevention_stringli
             assert result[0].resource_id == "test"
             assert result[0].resource_arn == response["Role"]["Arn"]
 
-    @mock_iam
+    @mock_aws
     def test_iam_service_role_with_cross_service_confused_deputy_prevention_PrincipalAccount(
         self,
     ):
@@ -275,7 +246,7 @@ def test_iam_service_role_with_cross_service_confused_deputy_prevention_Principa
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         current_audit_info.audited_account = AWS_ACCOUNT_ID
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -300,7 +271,7 @@ def test_iam_service_role_with_cross_service_confused_deputy_prevention_Principa
             assert result[0].resource_id == "test"
             assert result[0].resource_arn == response["Role"]["Arn"]
 
-    @mock_iam
+    @mock_aws
     def test_iam_service_role_with_cross_service_confused_deputy_prevention_ResourceAccount(
         self,
     ):
@@ -325,7 +296,7 @@ def test_iam_service_role_with_cross_service_confused_deputy_prevention_Resource
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         current_audit_info.audited_account = AWS_ACCOUNT_ID
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
diff --git a/tests/providers/aws/services/iam/iam_root_hardware_mfa_enabled/iam_root_hardware_mfa_enabled_test.py b/tests/providers/aws/services/iam/iam_root_hardware_mfa_enabled/iam_root_hardware_mfa_enabled_test.py
index d0e69821bbb..1f2e91c1588 100644
--- a/tests/providers/aws/services/iam/iam_root_hardware_mfa_enabled/iam_root_hardware_mfa_enabled_test.py
+++ b/tests/providers/aws/services/iam/iam_root_hardware_mfa_enabled/iam_root_hardware_mfa_enabled_test.py
@@ -1,48 +1,24 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_iam
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_iam_root_hardware_mfa_enabled_test:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_iam
+    from tests.providers.aws.audit_info_utils import (
+        AWS_ACCOUNT_ARN,
+        AWS_ACCOUNT_NUMBER,
+        AWS_REGION_US_EAST_1,
+        set_mocked_aws_audit_info,
+    )
+
+    @mock_aws
     def test_root_hardware_virtual_mfa_enabled(self):
         iam = client("iam")
         mfa_device_name = "mfa-test"
@@ -50,7 +26,7 @@ def test_root_hardware_virtual_mfa_enabled(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -75,7 +51,7 @@ def test_root_hardware_virtual_mfa_enabled(self):
             )
             assert result[0].resource_id == ""
 
-    @mock_iam
+    @mock_aws
     def test_root_hardware_virtual_hardware_mfa_enabled(self):
         iam = client("iam")
         mfa_device_name = "mfa-test"
@@ -83,7 +59,7 @@ def test_root_hardware_virtual_hardware_mfa_enabled(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
diff --git a/tests/providers/aws/services/iam/iam_root_mfa_enabled/iam_root_mfa_enabled_test.py b/tests/providers/aws/services/iam/iam_root_mfa_enabled/iam_root_mfa_enabled_test.py
index 36964460e72..984fbf33e3d 100644
--- a/tests/providers/aws/services/iam/iam_root_mfa_enabled/iam_root_mfa_enabled_test.py
+++ b/tests/providers/aws/services/iam/iam_root_mfa_enabled/iam_root_mfa_enabled_test.py
@@ -1,54 +1,32 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_iam
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 AWS_ACCOUNT_NUMBER = "123456789012"
 
 
 class Test_iam_root_mfa_enabled_test:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_iam
+    from tests.providers.aws.audit_info_utils import (
+        AWS_ACCOUNT_ARN,
+        AWS_ACCOUNT_NUMBER,
+        AWS_REGION_US_EAST_1,
+        set_mocked_aws_audit_info,
+    )
+
+    @mock_aws
     def test_root_mfa_not_enabled(self):
         iam_client = client("iam")
         user = "test-user"
         iam_client.create_user(UserName=user)["User"]["Arn"]
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         from prowler.providers.aws.services.iam.iam_service import IAM
 
         with mock.patch(
@@ -77,13 +55,13 @@ def test_root_mfa_not_enabled(self):
             assert result[0].resource_id == ""
             assert result[0].resource_arn == service_client.credential_report[0]["arn"]
 
-    @mock_iam
+    @mock_aws
     def test_root_mfa_enabled(self):
         iam_client = client("iam")
         user = "test-user"
         iam_client.create_user(UserName=user)["User"]["Arn"]
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         from prowler.providers.aws.services.iam.iam_service import IAM
 
         with mock.patch(
diff --git a/tests/providers/aws/services/iam/iam_rotate_access_key_90_days/iam_rotate_access_key_90_days_test.py b/tests/providers/aws/services/iam/iam_rotate_access_key_90_days/iam_rotate_access_key_90_days_test.py
index 5c92d109eb5..f0e7e1200a2 100644
--- a/tests/providers/aws/services/iam/iam_rotate_access_key_90_days/iam_rotate_access_key_90_days_test.py
+++ b/tests/providers/aws/services/iam/iam_rotate_access_key_90_days/iam_rotate_access_key_90_days_test.py
@@ -1,49 +1,17 @@
 import datetime
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_iam
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_iam_rotate_access_key_90_days_test:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=AWS_REGION,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_iam
+    @mock_aws
     def test_user_no_access_keys(self):
         iam_client = client("iam")
         user = "test-user"
@@ -51,7 +19,7 @@ def test_user_no_access_keys(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -76,9 +44,9 @@ def test_user_no_access_keys(self):
             )
             assert result[0].resource_id == user
             assert result[0].resource_arn == arn
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_iam
+    @mock_aws
     def test_user_access_key_1_not_rotated(self):
         credentials_last_rotated = (
             datetime.datetime.now() - datetime.timedelta(days=100)
@@ -89,7 +57,7 @@ def test_user_access_key_1_not_rotated(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -117,9 +85,9 @@ def test_user_access_key_1_not_rotated(self):
             )
             assert result[0].resource_id == user
             assert result[0].resource_arn == arn
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_iam
+    @mock_aws
     def test_user_access_key_2_not_rotated(self):
         credentials_last_rotated = (
             datetime.datetime.now() - datetime.timedelta(days=100)
@@ -130,7 +98,7 @@ def test_user_access_key_2_not_rotated(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -158,9 +126,9 @@ def test_user_access_key_2_not_rotated(self):
             )
             assert result[0].resource_id == user
             assert result[0].resource_arn == arn
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_iam
+    @mock_aws
     def test_user_both_access_keys_not_rotated(self):
         credentials_last_rotated = (
             datetime.datetime.now() - datetime.timedelta(days=100)
@@ -171,7 +139,7 @@ def test_user_both_access_keys_not_rotated(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -204,7 +172,7 @@ def test_user_both_access_keys_not_rotated(self):
             )
             assert result[0].resource_id == user
             assert result[0].resource_arn == arn
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[1].status == "FAIL"
             assert (
                 result[1].status_extended
@@ -212,9 +180,9 @@ def test_user_both_access_keys_not_rotated(self):
             )
             assert result[1].resource_id == user
             assert result[1].resource_arn == arn
-            assert result[1].region == AWS_REGION
+            assert result[1].region == AWS_REGION_US_EAST_1
 
-    @mock_iam
+    @mock_aws
     def test_user_both_access_keys_rotated(self):
         credentials_last_rotated = (
             datetime.datetime.now() - datetime.timedelta(days=10)
@@ -225,7 +193,7 @@ def test_user_both_access_keys_rotated(self):
 
         from prowler.providers.aws.services.iam.iam_service import IAM
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -259,4 +227,4 @@ def test_user_both_access_keys_rotated(self):
                 )
                 assert result[0].resource_id == user
                 assert result[0].resource_arn == arn
-                assert result[0].region == AWS_REGION
+                assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/iam/iam_securityaudit_role_created/iam_securityaudit_role_created_test.py b/tests/providers/aws/services/iam/iam_securityaudit_role_created/iam_securityaudit_role_created_test.py
index 76df621be51..db21e106c93 100644
--- a/tests/providers/aws/services/iam/iam_securityaudit_role_created/iam_securityaudit_role_created_test.py
+++ b/tests/providers/aws/services/iam/iam_securityaudit_role_created/iam_securityaudit_role_created_test.py
@@ -2,51 +2,20 @@
 from re import search
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_iam
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.audit_info import AWS_Audit_Info
 from prowler.providers.aws.services.iam.iam_service import IAM
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_iam_securityaudit_role_created:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region="us-east-1",
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
-    @mock_iam
+    @mock_aws(config={"iam": {"load_aws_managed_policies": True}})
     def test_securityaudit_role_created(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         iam = client("iam")
         role_name = "test_securityaudit_role_created"
         assume_role_policy_document = {
@@ -91,9 +60,9 @@ def test_securityaudit_role_created(self):
                 assert result[0].resource_arn == "arn:aws:iam::aws:policy/SecurityAudit"
                 assert result[0].region == "us-east-1"
 
-    @mock_iam
+    @mock_aws(config={"iam": {"load_aws_managed_policies": True}})
     def test_no_securityaudit_role_created(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
diff --git a/tests/providers/aws/services/iam/iam_service_test.py b/tests/providers/aws/services/iam/iam_service_test.py
index c8fbe0df374..d7a99804f2c 100644
--- a/tests/providers/aws/services/iam/iam_service_test.py
+++ b/tests/providers/aws/services/iam/iam_service_test.py
@@ -2,16 +2,18 @@
 from uuid import uuid4
 
 import botocore
-from boto3 import client, session
+from boto3 import client
 from freezegun import freeze_time
 from mock import patch
-from moto import mock_iam
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.iam.iam_service import IAM, Policy, is_service_role
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
-AWS_ACCOUNT_NUMBER = "123456789012"
 TEST_DATETIME = "2023-01-01T12:01:01+00:00"
 
 INLINE_POLICY_NOT_ADMIN = {
@@ -77,56 +79,26 @@ def mock_make_api_call(self, operation_name, kwargs):
 # Patch every AWS call using Boto3
 @patch("botocore.client.BaseClient._make_api_call", new=mock_make_api_call)
 class Test_IAM_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=None,
-            audited_account_arn=None,
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region="us-east-1",
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
 
     # Test IAM Client
-    @mock_iam
+    @mock_aws
     def test__get_client__(self):
         # IAM client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         iam = IAM(audit_info)
         assert iam.client.__class__.__name__ == "IAM"
 
     # Test IAM Session
-    @mock_iam
+    @mock_aws
     def test__get_session__(self):
         # IAM client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         iam = IAM(audit_info)
         assert iam.session.__class__.__name__ == "Session"
 
     # Test IAM Get Credential Report
     @freeze_time(TEST_DATETIME)
-    @mock_iam
+    @mock_aws
     def test__get_credential_report__(self):
         # Generate IAM Client
         iam_client = client("iam")
@@ -162,7 +134,7 @@ def test__get_credential_report__(self):
         }
 
         # IAM client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         iam = IAM(audit_info)
         assert len(iam.credential_report) == 1
         assert iam.credential_report[0].get("user")
@@ -292,7 +264,7 @@ def test__get_credential_report__(self):
         )
 
     # Test IAM Get Roles
-    @mock_iam
+    @mock_aws
     def test__get_roles__(self):
         # Generate IAM Client
         iam_client = client("iam")
@@ -333,7 +305,7 @@ def test__get_roles__(self):
         )["Role"]
 
         # IAM client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         iam = IAM(audit_info)
 
         assert len(iam.roles) == len(iam_client.list_roles()["Roles"])
@@ -347,7 +319,7 @@ def test__get_roles__(self):
         assert not is_service_role(role)
 
     # Test IAM Get Groups
-    @mock_iam
+    @mock_aws
     def test__get_groups__(self):
         # Generate IAM Client
         iam_client = client("iam")
@@ -360,12 +332,12 @@ def test__get_groups__(self):
         )
 
         # IAM client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         iam = IAM(audit_info)
         assert len(iam.groups) == len(iam_client.list_groups()["Groups"])
 
     # Test IAM Get Users
-    @mock_iam
+    @mock_aws
     def test__get_users__(self):
         # Generate IAM Client
         iam_client = client("iam")
@@ -384,7 +356,7 @@ def test__get_users__(self):
         )
 
         # IAM client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         iam = IAM(audit_info)
         assert len(iam.users) == len(iam_client.list_users()["Users"])
         assert iam.users[0].tags == [
@@ -395,20 +367,20 @@ def test__get_users__(self):
         ]
 
     # Test IAM Get Account Summary
-    @mock_iam
+    @mock_aws
     def test__get_account_summary__(self):
         # Generate IAM Client
         iam_client = client("iam")
         account_summary = iam_client.get_account_summary()["SummaryMap"]
 
         # IAM client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         iam = IAM(audit_info)
 
         assert iam.account_summary["SummaryMap"] == account_summary
 
     # Test IAM Get Password Policy
-    @mock_iam
+    @mock_aws
     def test__get_password_policy__(self):
         # Generate IAM Client
         iam_client = client("iam")
@@ -436,7 +408,7 @@ def test__get_password_policy__(self):
         )
 
         # IAM client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         iam = IAM(audit_info)
 
         assert iam.password_policy.length == min_password_length
@@ -451,7 +423,7 @@ def test__get_password_policy__(self):
         assert iam.password_policy.hard_expiry == hard_expiry
 
     # Test IAM List MFA Device
-    @mock_iam
+    @mock_aws
     def test__list_mfa_devices__(self):
         # Generate IAM Client
         iam_client = client("iam")
@@ -472,7 +444,7 @@ def test__list_mfa_devices__(self):
         )
 
         # IAM client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         iam = IAM(audit_info)
 
         assert len(iam.users) == 1
@@ -484,7 +456,7 @@ def test__list_mfa_devices__(self):
         assert iam.users[0].mfa_devices[0].type == "mfa"
 
     # Test IAM List Virtual MFA Device
-    @mock_iam
+    @mock_aws
     def test__list_virtual_mfa_devices__(self):
         # Generate IAM Client
         iam_client = client("iam")
@@ -506,7 +478,7 @@ def test__list_virtual_mfa_devices__(self):
         )
 
         # IAM client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         iam = IAM(audit_info)
 
         assert len(iam.virtual_mfa_devices) == 1
@@ -517,7 +489,7 @@ def test__list_virtual_mfa_devices__(self):
         assert iam.virtual_mfa_devices[0]["User"]["UserName"] == username
 
     # Test IAM Get Group Users
-    @mock_iam
+    @mock_aws
     def test__get_group_users__(self):
         # Generate IAM Client
         iam_client = client("iam")
@@ -533,7 +505,7 @@ def test__get_group_users__(self):
         iam_client.add_user_to_group(GroupName=group, UserName=username)
 
         # IAM client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         iam = IAM(audit_info)
 
         assert len(iam.groups) == 1
@@ -543,7 +515,7 @@ def test__get_group_users__(self):
         assert iam.groups[0].users[0].name == username
 
     # Test IAM List Attached Group Policies
-    @mock_iam
+    @mock_aws
     def test__list_attached_group_policies__(self):
         # Generate IAM Client
         iam_client = client("iam")
@@ -580,7 +552,7 @@ def test__list_attached_group_policies__(self):
         )
 
         # IAM client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         iam = IAM(audit_info)
 
         assert len(iam.groups) == 1
@@ -592,7 +564,7 @@ def test__list_attached_group_policies__(self):
         )
 
     # Test IAM List Attached Role Policies
-    @mock_iam
+    @mock_aws(config={"iam": {"load_aws_managed_policies": True}})
     def test__list_attached_role_policies__(self):
         iam = client("iam")
         role_name = "test"
@@ -615,7 +587,7 @@ def test__list_attached_role_policies__(self):
         )
 
         # IAM client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         iam = IAM(audit_info)
 
         assert len(iam.roles) == 1
@@ -628,7 +600,7 @@ def test__list_attached_role_policies__(self):
             == READ_ONLY_ACCESS_POLICY_ARN
         )
 
-    @mock_iam
+    @mock_aws(config={"iam": {"load_aws_managed_policies": True}})
     def test__get_entities_attached_to_support_roles__no_roles(self):
         iam_client = client("iam")
         _ = iam_client.list_entities_for_policy(
@@ -636,11 +608,11 @@ def test__get_entities_attached_to_support_roles__no_roles(self):
             EntityFilter="Role",
         )["PolicyRoles"]
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         iam = IAM(audit_info)
         assert len(iam.entities_role_attached_to_support_policy) == 0
 
-    @mock_iam
+    @mock_aws(config={"iam": {"load_aws_managed_policies": True}})
     def test__get_entities_attached_to_support_roles__(self):
         iam_client = client("iam")
         role_name = "test_support"
@@ -667,12 +639,12 @@ def test__get_entities_attached_to_support_roles__(self):
             EntityFilter="Role",
         )["PolicyRoles"]
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         iam = IAM(audit_info)
         assert len(iam.entities_role_attached_to_support_policy) == 1
         assert iam.entities_role_attached_to_support_policy[0]["RoleName"] == role_name
 
-    @mock_iam
+    @mock_aws
     def test__get_entities_attached_to_securityaudit_roles__no_roles(self):
         iam_client = client("iam")
         _ = iam_client.list_entities_for_policy(
@@ -680,11 +652,11 @@ def test__get_entities_attached_to_securityaudit_roles__no_roles(self):
             EntityFilter="Role",
         )["PolicyRoles"]
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         iam = IAM(audit_info)
         assert len(iam.entities_role_attached_to_securityaudit_policy) == 0
 
-    @mock_iam
+    @mock_aws(config={"iam": {"load_aws_managed_policies": True}})
     def test__get_entities_attached_to_securityaudit_roles__(self):
         iam_client = client("iam")
         role_name = "test_securityaudit"
@@ -711,7 +683,7 @@ def test__get_entities_attached_to_securityaudit_roles__(self):
             EntityFilter="Role",
         )["PolicyRoles"]
 
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         iam = IAM(audit_info)
         assert len(iam.entities_role_attached_to_securityaudit_policy) == 1
         assert (
@@ -719,7 +691,7 @@ def test__get_entities_attached_to_securityaudit_roles__(self):
             == role_name
         )
 
-    @mock_iam
+    @mock_aws
     def test___list_policies__(self):
         iam_client = client("iam")
         policy_name = "policy1"
@@ -736,7 +708,7 @@ def test___list_policies__(self):
                 {"Key": "string", "Value": "string"},
             ],
         )
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         iam = IAM(audit_info)
         custom_policies = 0
         for policy in iam.policies:
@@ -748,7 +720,7 @@ def test___list_policies__(self):
                 ]
         assert custom_policies == 1
 
-    @mock_iam
+    @mock_aws
     def test__list_policies_version__(self):
         iam_client = client("iam")
         policy_name = "policy2"
@@ -761,7 +733,7 @@ def test__list_policies_version__(self):
         iam_client.create_policy(
             PolicyName=policy_name, PolicyDocument=dumps(policy_document)
         )
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         iam = IAM(audit_info)
 
         custom_policies = 0
@@ -775,7 +747,7 @@ def test__list_policies_version__(self):
         assert custom_policies == 1
 
     # Test IAM List SAML Providers
-    @mock_iam
+    @mock_aws
     def test__list_saml_providers__(self):
         iam_client = client("iam")
         xml_template = r""" 1000
 
-    @mock_sqs
+    @mock_aws
     # Test SQS list queues
     def test__get_queue_attributes__(self):
-        sqs_client = client("sqs", region_name=AWS_REGION)
+        sqs_client = client("sqs", region_name=AWS_REGION_EU_WEST_1)
         queue = sqs_client.create_queue(
             QueueName=test_queue,
         )
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
         sqs = SQS(audit_info)
         assert len(sqs.queues) == 1
         assert sqs.queues[0].id == queue["QueueUrl"]
-        assert sqs.queues[0].region == AWS_REGION
+        assert sqs.queues[0].region == AWS_REGION_EU_WEST_1
         assert sqs.queues[0].policy
         assert sqs.queues[0].kms_key_id == test_key
diff --git a/tests/providers/aws/services/ssm/ssm_document_secrets/ssm_document_secrets_test.py b/tests/providers/aws/services/ssm/ssm_document_secrets/ssm_document_secrets_test.py
index 2ebfd33e6cb..4f20a3578c2 100644
--- a/tests/providers/aws/services/ssm/ssm_document_secrets/ssm_document_secrets_test.py
+++ b/tests/providers/aws/services/ssm/ssm_document_secrets/ssm_document_secrets_test.py
@@ -1,10 +1,10 @@
 from unittest import mock
 
-from moto.core import DEFAULT_ACCOUNT_ID
-
 from prowler.providers.aws.services.ssm.ssm_service import Document
-
-AWS_REGION = "eu-west-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+)
 
 
 class Test_ssm_documents_secrets:
@@ -28,15 +28,13 @@ def test_no_documents(self):
     def test_document_with_secrets(self):
         ssm_client = mock.MagicMock
         document_name = "test-document"
-        document_arn = (
-            f"arn:aws:ssm:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:document/{document_name}"
-        )
-        ssm_client.audited_account = DEFAULT_ACCOUNT_ID
+        document_arn = f"arn:aws:ssm:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:document/{document_name}"
+        ssm_client.audited_account = AWS_ACCOUNT_NUMBER
         ssm_client.documents = {
             document_name: Document(
                 arn=document_arn,
                 name=document_name,
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 content={"db_password": "test-password"},
                 account_owners=[],
             )
@@ -54,7 +52,7 @@ def test_document_with_secrets(self):
             result = check.execute()
 
             assert len(result) == 1
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_id == document_name
             assert result[0].resource_arn == document_arn
             assert result[0].status == "FAIL"
@@ -66,15 +64,13 @@ def test_document_with_secrets(self):
     def test_document_no_secrets(self):
         ssm_client = mock.MagicMock
         document_name = "test-document"
-        document_arn = (
-            f"arn:aws:ssm:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:document/{document_name}"
-        )
-        ssm_client.audited_account = DEFAULT_ACCOUNT_ID
+        document_arn = f"arn:aws:ssm:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:document/{document_name}"
+        ssm_client.audited_account = AWS_ACCOUNT_NUMBER
         ssm_client.documents = {
             document_name: Document(
                 arn=document_arn,
                 name=document_name,
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 content={"profile": "test"},
                 account_owners=[],
             )
@@ -92,7 +88,7 @@ def test_document_no_secrets(self):
             result = check.execute()
 
             assert len(result) == 1
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_id == document_name
             assert result[0].resource_arn == document_arn
             assert result[0].status == "PASS"
diff --git a/tests/providers/aws/services/ssm/ssm_documents_set_as_public/ssm_documents_set_as_public_test.py b/tests/providers/aws/services/ssm/ssm_documents_set_as_public/ssm_documents_set_as_public_test.py
index 4216b62fcc3..a932c9e474d 100644
--- a/tests/providers/aws/services/ssm/ssm_documents_set_as_public/ssm_documents_set_as_public_test.py
+++ b/tests/providers/aws/services/ssm/ssm_documents_set_as_public/ssm_documents_set_as_public_test.py
@@ -1,10 +1,10 @@
 from unittest import mock
 
-from moto.core import DEFAULT_ACCOUNT_ID
-
 from prowler.providers.aws.services.ssm.ssm_service import Document
-
-AWS_REGION = "eu-west-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+)
 
 
 class Test_ssm_documents_set_as_public:
@@ -28,15 +28,13 @@ def test_no_documents(self):
     def test_document_public(self):
         ssm_client = mock.MagicMock
         document_name = "test-document"
-        document_arn = (
-            f"arn:aws:ssm:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:document/{document_name}"
-        )
-        ssm_client.audited_account = DEFAULT_ACCOUNT_ID
+        document_arn = f"arn:aws:ssm:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:document/{document_name}"
+        ssm_client.audited_account = AWS_ACCOUNT_NUMBER
         ssm_client.documents = {
             document_name: Document(
                 arn=document_arn,
                 name=document_name,
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 content="",
                 account_owners=["111111111111", "111111222222"],
             )
@@ -54,7 +52,7 @@ def test_document_public(self):
             result = check.execute()
 
             assert len(result) == 1
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_id == document_name
             assert result[0].resource_arn == document_arn
             assert result[0].status == "FAIL"
@@ -65,15 +63,13 @@ def test_document_public(self):
     def test_document_not_public(self):
         ssm_client = mock.MagicMock
         document_name = "test-document"
-        document_arn = (
-            f"arn:aws:ssm:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:document/{document_name}"
-        )
-        ssm_client.audited_account = DEFAULT_ACCOUNT_ID
+        document_arn = f"arn:aws:ssm:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:document/{document_name}"
+        ssm_client.audited_account = AWS_ACCOUNT_NUMBER
         ssm_client.documents = {
             document_name: Document(
                 arn=document_arn,
                 name=document_name,
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 content="",
                 account_owners=[],
             )
@@ -91,7 +87,7 @@ def test_document_not_public(self):
             result = check.execute()
 
             assert len(result) == 1
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_id == document_name
             assert result[0].resource_arn == document_arn
             assert result[0].status == "PASS"
diff --git a/tests/providers/aws/services/ssm/ssm_managed_compliant_patching/ssm_managed_compliant_patching_test.py b/tests/providers/aws/services/ssm/ssm_managed_compliant_patching/ssm_managed_compliant_patching_test.py
index 898a0fb25bd..ce70cc011a4 100644
--- a/tests/providers/aws/services/ssm/ssm_managed_compliant_patching/ssm_managed_compliant_patching_test.py
+++ b/tests/providers/aws/services/ssm/ssm_managed_compliant_patching/ssm_managed_compliant_patching_test.py
@@ -1,13 +1,13 @@
 from unittest import mock
 
-from moto.core import DEFAULT_ACCOUNT_ID
-
 from prowler.providers.aws.services.ssm.ssm_service import (
     ComplianceResource,
     ResourceStatus,
 )
-
-AWS_REGION = "eu-west-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+)
 
 
 class Test_ssm_managed_compliant_patching:
@@ -31,11 +31,11 @@ def test_no_compliance_resources(self):
     def test_compliance_resources_compliant(self):
         ssm_client = mock.MagicMock
         instance_id = "i-1234567890abcdef0"
-        ssm_client.audited_account = DEFAULT_ACCOUNT_ID
+        ssm_client.audited_account = AWS_ACCOUNT_NUMBER
         ssm_client.compliance_resources = {
             instance_id: ComplianceResource(
                 id="i-1234567890abcdef0",
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 status=ResourceStatus.COMPLIANT,
             )
         }
@@ -53,7 +53,7 @@ def test_compliance_resources_compliant(self):
             result = check.execute()
 
             assert len(result) == 1
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_id == instance_id
             assert result[0].status == "PASS"
             assert (
@@ -64,11 +64,11 @@ def test_compliance_resources_compliant(self):
     def test_compliance_resources_non_compliant(self):
         ssm_client = mock.MagicMock
         instance_id = "i-1234567890abcdef0"
-        ssm_client.audited_account = DEFAULT_ACCOUNT_ID
+        ssm_client.audited_account = AWS_ACCOUNT_NUMBER
         ssm_client.compliance_resources = {
             instance_id: ComplianceResource(
                 id="i-1234567890abcdef0",
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 status=ResourceStatus.NON_COMPLIANT,
             )
         }
@@ -86,7 +86,7 @@ def test_compliance_resources_non_compliant(self):
             result = check.execute()
 
             assert len(result) == 1
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_id == instance_id
             assert result[0].status == "FAIL"
             assert (
diff --git a/tests/providers/aws/services/ssm/ssm_service_test.py b/tests/providers/aws/services/ssm/ssm_service_test.py
index dd03957c5ab..b92254a2c48 100644
--- a/tests/providers/aws/services/ssm/ssm_service_test.py
+++ b/tests/providers/aws/services/ssm/ssm_service_test.py
@@ -2,16 +2,15 @@
 
 import botocore
 import yaml
-from boto3 import client, session
-from moto import mock_ssm
-from moto.core import DEFAULT_ACCOUNT_ID
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.audit_info import AWS_Audit_Info
 from prowler.providers.aws.services.ssm.ssm_service import SSM, ResourceStatus
-from prowler.providers.common.models import Audit_Metadata
-
-# Mock Test Region
-AWS_REGION = "eu-west-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 # Mocking Access Analyzer Calls
 make_api_call = botocore.client.BaseClient._make_api_call
@@ -67,10 +66,12 @@ def mock_make_api_call(self, operation_name, kwarg):
 
 
 # Mock generate_regional_clients()
-def mock_generate_regional_clients(service, audit_info, _):
-    regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
-    regional_client.region = AWS_REGION
-    return {AWS_REGION: regional_client}
+def mock_generate_regional_clients(service, audit_info):
+    regional_client = audit_info.audit_session.client(
+        service, region_name=AWS_REGION_US_EAST_1
+    )
+    regional_client.region = AWS_REGION_US_EAST_1
+    return {AWS_REGION_US_EAST_1: regional_client}
 
 
 # SSM Document YAML Template
@@ -132,59 +133,28 @@ def mock_generate_regional_clients(service, audit_info, _):
     new=mock_generate_regional_clients,
 )
 class Test_SSM_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=DEFAULT_ACCOUNT_ID,
-            audited_account_arn=f"arn:aws:iam::{DEFAULT_ACCOUNT_ID}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=AWS_REGION,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test SSM Client
-    @mock_ssm
+    @mock_aws
     def test__get_client__(self):
-        ssm = SSM(self.set_mocked_audit_info())
-        assert ssm.regional_clients[AWS_REGION].__class__.__name__ == "SSM"
+        ssm = SSM(set_mocked_aws_audit_info([AWS_REGION_US_EAST_1]))
+        assert ssm.regional_clients[AWS_REGION_US_EAST_1].__class__.__name__ == "SSM"
 
     # Test SSM Session
-    @mock_ssm
+    @mock_aws
     def test__get_session__(self):
-        ssm = SSM(self.set_mocked_audit_info())
+        ssm = SSM(set_mocked_aws_audit_info([AWS_REGION_US_EAST_1]))
         assert ssm.session.__class__.__name__ == "Session"
 
     # Test SSM Service
-    @mock_ssm
+    @mock_aws
     def test__get_service__(self):
-        ssm = SSM(self.set_mocked_audit_info())
+        ssm = SSM(set_mocked_aws_audit_info([AWS_REGION_US_EAST_1]))
         assert ssm.service == "ssm"
 
-    @mock_ssm
+    @mock_aws
     def test__list_documents__(self):
         # Create SSM Document
-        ssm_client = client("ssm", region_name=AWS_REGION)
+        ssm_client = client("ssm", region_name=AWS_REGION_US_EAST_1)
         ssm_document_name = "test-document"
         _ = ssm_client.create_document(
             Content=ssm_document_yaml,
@@ -199,32 +169,32 @@ def test__list_documents__(self):
         ssm_client.modify_document_permission(
             Name=ssm_document_name,
             PermissionType="Share",
-            AccountIdsToAdd=[DEFAULT_ACCOUNT_ID],
+            AccountIdsToAdd=[AWS_ACCOUNT_NUMBER],
         )
 
-        ssm = SSM(self.set_mocked_audit_info())
+        ssm = SSM(set_mocked_aws_audit_info([AWS_REGION_US_EAST_1]))
 
-        document_arn = f"arn:aws:ssm:{AWS_REGION}:{DEFAULT_ACCOUNT_ID}:document/{ssm_document_name}"
+        document_arn = f"arn:aws:ssm:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:document/{ssm_document_name}"
 
         assert len(ssm.documents) == 1
         assert ssm.documents
         assert ssm.documents[document_arn]
         assert ssm.documents[document_arn].arn == document_arn
         assert ssm.documents[document_arn].name == ssm_document_name
-        assert ssm.documents[document_arn].region == AWS_REGION
+        assert ssm.documents[document_arn].region == AWS_REGION_US_EAST_1
         assert ssm.documents[document_arn].tags == [
             {"Key": "test", "Value": "test"},
         ]
         assert ssm.documents[document_arn].content == yaml.safe_load(ssm_document_yaml)
-        assert ssm.documents[document_arn].account_owners == [DEFAULT_ACCOUNT_ID]
+        assert ssm.documents[document_arn].account_owners == [AWS_ACCOUNT_NUMBER]
 
-    @mock_ssm
+    @mock_aws
     def test__list_resource_compliance_summaries__(self):
-        ssm = SSM(self.set_mocked_audit_info())
+        ssm = SSM(set_mocked_aws_audit_info([AWS_REGION_US_EAST_1]))
         instance_id = "i-1234567890abcdef0"
         assert len(ssm.compliance_resources) == 1
         assert ssm.compliance_resources
         assert ssm.compliance_resources[instance_id]
         assert ssm.compliance_resources[instance_id].id == instance_id
-        assert ssm.compliance_resources[instance_id].region == AWS_REGION
+        assert ssm.compliance_resources[instance_id].region == AWS_REGION_US_EAST_1
         assert ssm.compliance_resources[instance_id].status == ResourceStatus.COMPLIANT
diff --git a/tests/providers/aws/services/ssmincidents/ssmincidents_enabled_with_plans/ssmincidents_enabled_with_plans_test.py b/tests/providers/aws/services/ssmincidents/ssmincidents_enabled_with_plans/ssmincidents_enabled_with_plans_test.py
index 32a98d2860a..63e2f44408f 100644
--- a/tests/providers/aws/services/ssmincidents/ssmincidents_enabled_with_plans/ssmincidents_enabled_with_plans_test.py
+++ b/tests/providers/aws/services/ssmincidents/ssmincidents_enabled_with_plans/ssmincidents_enabled_with_plans_test.py
@@ -4,11 +4,13 @@
     ReplicationSet,
     ResponsePlan,
 )
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+)
 
-AWS_REGION = "us-east-1"
 REPLICATION_SET_ARN = "arn:aws:ssm-incidents::111122223333:replication-set/40bd98f0-4110-2dee-b35e-b87006f9e172"
 RESPONSE_PLAN_ARN = "arn:aws:ssm-incidents::111122223333:response-plan/example-response"
-AWS_ACCOUNT_NUMBER = "123456789012"
 
 
 class Test_ssmincidents_enabled_with_plans:
@@ -18,7 +20,7 @@ def test_ssmincidents_no_replicationset(self):
         ssmincidents_client.audited_account_arn = (
             f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
         )
-        ssmincidents_client.region = AWS_REGION
+        ssmincidents_client.region = AWS_REGION_US_EAST_1
         ssmincidents_client.replication_set = []
         with mock.patch(
             "prowler.providers.aws.services.ssmincidents.ssmincidents_service.SSMIncidents",
@@ -39,7 +41,7 @@ def test_ssmincidents_no_replicationset(self):
             )
             assert result[0].resource_id == AWS_ACCOUNT_NUMBER
             assert result[0].resource_arn == f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
     def test_ssmincidents_replicationset_not_active(self):
         ssmincidents_client = mock.MagicMock
@@ -47,7 +49,7 @@ def test_ssmincidents_replicationset_not_active(self):
         ssmincidents_client.audited_account_arn = (
             f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
         )
-        ssmincidents_client.region = AWS_REGION
+        ssmincidents_client.region = AWS_REGION_US_EAST_1
         ssmincidents_client.replication_set = [
             ReplicationSet(arn=REPLICATION_SET_ARN, status="CREATING")
         ]
@@ -71,7 +73,7 @@ def test_ssmincidents_replicationset_not_active(self):
             )
             assert result[0].resource_id == AWS_ACCOUNT_NUMBER
             assert result[0].resource_arn == REPLICATION_SET_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
     def test_ssmincidents_replicationset_active_no_plans(self):
         ssmincidents_client = mock.MagicMock
@@ -79,7 +81,7 @@ def test_ssmincidents_replicationset_active_no_plans(self):
         ssmincidents_client.audited_account_arn = (
             f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
         )
-        ssmincidents_client.region = AWS_REGION
+        ssmincidents_client.region = AWS_REGION_US_EAST_1
         ssmincidents_client.replication_set = [
             ReplicationSet(arn=REPLICATION_SET_ARN, status="ACTIVE")
         ]
@@ -104,7 +106,7 @@ def test_ssmincidents_replicationset_active_no_plans(self):
             )
             assert result[0].resource_id == AWS_ACCOUNT_NUMBER
             assert result[0].resource_arn == REPLICATION_SET_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
     def test_ssmincidents_replicationset_active_with_plans(self):
         ssmincidents_client = mock.MagicMock
@@ -112,12 +114,14 @@ def test_ssmincidents_replicationset_active_with_plans(self):
         ssmincidents_client.audited_account_arn = (
             f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
         )
-        ssmincidents_client.region = AWS_REGION
+        ssmincidents_client.region = AWS_REGION_US_EAST_1
         ssmincidents_client.replication_set = [
             ReplicationSet(arn=REPLICATION_SET_ARN, status="ACTIVE")
         ]
         ssmincidents_client.response_plans = [
-            ResponsePlan(arn=RESPONSE_PLAN_ARN, name="test", region=AWS_REGION)
+            ResponsePlan(
+                arn=RESPONSE_PLAN_ARN, name="test", region=AWS_REGION_US_EAST_1
+            )
         ]
         with mock.patch(
             "prowler.providers.aws.services.ssmincidents.ssmincidents_service.SSMIncidents",
@@ -139,4 +143,4 @@ def test_ssmincidents_replicationset_active_with_plans(self):
             )
             assert result[0].resource_id == AWS_ACCOUNT_NUMBER
             assert result[0].resource_arn == REPLICATION_SET_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/ssmincidents/ssmincidents_service_test.py b/tests/providers/aws/services/ssmincidents/ssmincidents_service_test.py
index 7381965ea1c..bc1547b0c57 100644
--- a/tests/providers/aws/services/ssmincidents/ssmincidents_service_test.py
+++ b/tests/providers/aws/services/ssmincidents/ssmincidents_service_test.py
@@ -2,16 +2,15 @@
 from unittest.mock import patch
 
 import botocore
-from boto3 import session
 
-from prowler.providers.aws.lib.audit_info.audit_info import AWS_Audit_Info
 from prowler.providers.aws.services.ssmincidents.ssmincidents_service import (
     SSMIncidents,
 )
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
-# Mock Test Region
-AWS_REGION = "us-east-1"
 REPLICATION_SET_ARN = "arn:aws:ssm-incidents::111122223333:replication-set/40bd98f0-4110-2dee-b35e-b87006f9e172"
 RESPONSE_PLAN_ARN = "arn:aws:ssm-incidents::111122223333:response-plan/example-response"
 
@@ -33,7 +32,7 @@ def mock_make_api_call(self, operation_name, kwargs):
                 "lastModifiedBy": datetime(2024, 1, 1),
                 "lastModifiedTime": datetime(2024, 1, 1),
                 "regionMap": {
-                    AWS_REGION: {
+                    AWS_REGION_US_EAST_1: {
                         "sseKmsKeyId": "DefaultKey",
                         "status": "ACTIVE",
                         "statusMessage": "Test",
@@ -55,10 +54,12 @@ def mock_make_api_call(self, operation_name, kwargs):
     return make_api_call(self, operation_name, kwargs)
 
 
-def mock_generate_regional_clients(service, audit_info, _):
-    regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
-    regional_client.region = AWS_REGION
-    return {AWS_REGION: regional_client}
+def mock_generate_regional_clients(service, audit_info):
+    regional_client = audit_info.audit_session.client(
+        service, region_name=AWS_REGION_US_EAST_1
+    )
+    regional_client.region = AWS_REGION_US_EAST_1
+    return {AWS_REGION_US_EAST_1: regional_client}
 
 
 # Patch every AWS call using Boto3 and generate_regional_clients to have 1 client
@@ -68,76 +69,45 @@ def mock_generate_regional_clients(service, audit_info, _):
     new=mock_generate_regional_clients,
 )
 class Test_SSMIncidents_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=None,
-            audited_account_arn=None,
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     def test__get_client__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         ssmincidents = SSMIncidents(audit_info)
         assert (
-            ssmincidents.regional_clients[AWS_REGION].__class__.__name__
+            ssmincidents.regional_clients[AWS_REGION_US_EAST_1].__class__.__name__
             == "SSMIncidents"
         )
 
     def test__get_service__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         ssmincidents = SSMIncidents(audit_info)
         assert ssmincidents.service == "ssm-incidents"
 
     def test__list_replication_sets__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         ssmincidents = SSMIncidents(audit_info)
         assert len(ssmincidents.replication_set) == 1
 
     def test__get_replication_set__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         ssmincidents = SSMIncidents(audit_info)
         assert ssmincidents.replication_set[0].arn == REPLICATION_SET_ARN
         assert ssmincidents.replication_set[0].status == "ACTIVE"
         for region in ssmincidents.replication_set[0].region_map:
-            assert region.region == AWS_REGION
+            assert region.region == AWS_REGION_US_EAST_1
             assert region.status == "ACTIVE"
             assert region.sse_kms_id == "DefaultKey"
 
     def test__list_response_plans__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         ssmincidents = SSMIncidents(audit_info)
         assert len(ssmincidents.response_plans) == 1
         assert ssmincidents.response_plans[0].arn == RESPONSE_PLAN_ARN
         assert ssmincidents.response_plans[0].name == "test"
-        assert ssmincidents.response_plans[0].region == AWS_REGION
+        assert ssmincidents.response_plans[0].region == AWS_REGION_US_EAST_1
         assert ssmincidents.response_plans[0].tags == {"tag_test": "tag_value"}
 
     def test__list_tags_for_resource__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         ssmincidents = SSMIncidents(audit_info)
         assert len(ssmincidents.response_plans) == 1
         assert ssmincidents.response_plans[0].tags == {"tag_test": "tag_value"}
diff --git a/tests/providers/aws/services/trustedadvisor/trustedadvisor_errors_and_warnings/trustedadvisor_errors_and_warnings_test.py b/tests/providers/aws/services/trustedadvisor/trustedadvisor_errors_and_warnings/trustedadvisor_errors_and_warnings_test.py
index 5c6f95d1404..ae99e6fb3e9 100644
--- a/tests/providers/aws/services/trustedadvisor/trustedadvisor_errors_and_warnings/trustedadvisor_errors_and_warnings_test.py
+++ b/tests/providers/aws/services/trustedadvisor/trustedadvisor_errors_and_warnings/trustedadvisor_errors_and_warnings_test.py
@@ -4,10 +4,11 @@
     Check,
     PremiumSupport,
 )
-
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_ACCOUNT_ARN = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+)
 
 CHECK_NAME = "test-check"
 
@@ -19,7 +20,7 @@ def test_no_detectors_premium_support_disabled(self):
         trustedadvisor_client.premium_support = PremiumSupport(enabled=False)
         trustedadvisor_client.audited_account = AWS_ACCOUNT_NUMBER
         trustedadvisor_client.audited_account_arn = AWS_ACCOUNT_ARN
-        trustedadvisor_client.region = AWS_REGION
+        trustedadvisor_client.region = AWS_REGION_US_EAST_1
         with mock.patch(
             "prowler.providers.aws.services.trustedadvisor.trustedadvisor_service.TrustedAdvisor",
             trustedadvisor_client,
@@ -36,7 +37,7 @@ def test_no_detectors_premium_support_disabled(self):
                 result[0].status_extended
                 == "Amazon Web Services Premium Support Subscription is required to use this service."
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_id == AWS_ACCOUNT_NUMBER
             assert result[0].resource_arn == AWS_ACCOUNT_ARN
 
@@ -50,7 +51,7 @@ def test_trustedadvisor_all_passed_checks(self):
             Check(
                 id=CHECK_NAME,
                 name=CHECK_NAME,
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 status="ok",
             )
         )
@@ -71,7 +72,7 @@ def test_trustedadvisor_all_passed_checks(self):
                 == f"Trusted Advisor check {CHECK_NAME} is in state ok."
             )
             assert result[0].resource_id == CHECK_NAME
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
     def test_trustedadvisor_error_check(self):
         trustedadvisor_client = mock.MagicMock
@@ -83,7 +84,7 @@ def test_trustedadvisor_error_check(self):
             Check(
                 id=CHECK_NAME,
                 name=CHECK_NAME,
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 status="error",
             )
         )
@@ -104,7 +105,7 @@ def test_trustedadvisor_error_check(self):
                 == f"Trusted Advisor check {CHECK_NAME} is in state error."
             )
             assert result[0].resource_id == CHECK_NAME
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
 
     def test_trustedadvisor_not_available_check(self):
         trustedadvisor_client = mock.MagicMock
@@ -116,7 +117,7 @@ def test_trustedadvisor_not_available_check(self):
             Check(
                 id=CHECK_NAME,
                 name=CHECK_NAME,
-                region=AWS_REGION,
+                region=AWS_REGION_US_EAST_1,
                 status="not_available",
             )
         )
diff --git a/tests/providers/aws/services/trustedadvisor/trustedadvisor_premium_support_plan_subscribed/trustedadvisor_premium_support_plan_subscribed_test.py b/tests/providers/aws/services/trustedadvisor/trustedadvisor_premium_support_plan_subscribed/trustedadvisor_premium_support_plan_subscribed_test.py
index 9324061580f..595dabc27f1 100644
--- a/tests/providers/aws/services/trustedadvisor/trustedadvisor_premium_support_plan_subscribed/trustedadvisor_premium_support_plan_subscribed_test.py
+++ b/tests/providers/aws/services/trustedadvisor/trustedadvisor_premium_support_plan_subscribed/trustedadvisor_premium_support_plan_subscribed_test.py
@@ -3,10 +3,11 @@
 from prowler.providers.aws.services.trustedadvisor.trustedadvisor_service import (
     PremiumSupport,
 )
-
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_ACCOUNT_ARN = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+)
 
 
 class Test_trustedadvisor_premium_support_plan_subscribed:
@@ -16,7 +17,7 @@ def test_premium_support_not_susbcribed(self):
         trustedadvisor_client.premium_support = PremiumSupport(enabled=False)
         trustedadvisor_client.audited_account = AWS_ACCOUNT_NUMBER
         trustedadvisor_client.audited_account_arn = AWS_ACCOUNT_ARN
-        trustedadvisor_client.region = AWS_REGION
+        trustedadvisor_client.region = AWS_REGION_US_EAST_1
 
         # Set verify_premium_support_plans config
         trustedadvisor_client.audit_config = {"verify_premium_support_plans": True}
@@ -37,7 +38,7 @@ def test_premium_support_not_susbcribed(self):
                 result[0].status_extended
                 == "Amazon Web Services Premium Support Plan isn't subscribed."
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_id == AWS_ACCOUNT_NUMBER
             assert result[0].resource_arn == AWS_ACCOUNT_ARN
 
@@ -47,7 +48,7 @@ def test_premium_support_susbcribed(self):
         trustedadvisor_client.premium_support = PremiumSupport(enabled=True)
         trustedadvisor_client.audited_account = AWS_ACCOUNT_NUMBER
         trustedadvisor_client.audited_account_arn = AWS_ACCOUNT_ARN
-        trustedadvisor_client.region = AWS_REGION
+        trustedadvisor_client.region = AWS_REGION_US_EAST_1
 
         # Set verify_premium_support_plans config
         trustedadvisor_client.audit_config = {"verify_premium_support_plans": True}
@@ -68,6 +69,6 @@ def test_premium_support_susbcribed(self):
                 result[0].status_extended
                 == "Amazon Web Services Premium Support Plan is subscribed."
             )
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_US_EAST_1
             assert result[0].resource_id == AWS_ACCOUNT_NUMBER
             assert result[0].resource_arn == AWS_ACCOUNT_ARN
diff --git a/tests/providers/aws/services/trustedadvisor/trustedadvisor_service_test.py b/tests/providers/aws/services/trustedadvisor/trustedadvisor_service_test.py
index 3deb12f22bf..1e09d63c963 100644
--- a/tests/providers/aws/services/trustedadvisor/trustedadvisor_service_test.py
+++ b/tests/providers/aws/services/trustedadvisor/trustedadvisor_service_test.py
@@ -1,17 +1,15 @@
 from unittest.mock import patch
 
 import botocore
-from boto3 import session
-from moto import mock_support
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.trustedadvisor.trustedadvisor_service import (
     TrustedAdvisor,
 )
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 make_api_call = botocore.client.BaseClient._make_api_call
 
@@ -39,60 +37,30 @@ def mock_make_api_call(self, operation_name, kwarg):
 
 @patch("botocore.client.BaseClient._make_api_call", new=mock_make_api_call)
 class Test_TrustedAdvisor_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=AWS_REGION,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
 
     # Test TrustedAdvisor Service
     def test_service(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         trustedadvisor = TrustedAdvisor(audit_info)
         assert trustedadvisor.service == "support"
 
     # Test TrustedAdvisor client
     def test_client(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         trustedadvisor = TrustedAdvisor(audit_info)
         assert trustedadvisor.client.__class__.__name__ == "Support"
 
     # Test TrustedAdvisor session
     def test__get_session__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         trustedadvisor = TrustedAdvisor(audit_info)
         assert trustedadvisor.session.__class__.__name__ == "Session"
 
-    @mock_support
+    @mock_aws
     # Test TrustedAdvisor session
     def test__describe_trusted_advisor_checks__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         trustedadvisor = TrustedAdvisor(audit_info)
         assert trustedadvisor.premium_support.enabled
         assert len(trustedadvisor.checks) == 104  # Default checks
-        assert trustedadvisor.checks[0].region == AWS_REGION
+        assert trustedadvisor.checks[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/vpc/vpc_different_regions/vpc_different_regions_test.py b/tests/providers/aws/services/vpc/vpc_different_regions/vpc_different_regions_test.py
index 7856c206fa8..4fd860f6121 100644
--- a/tests/providers/aws/services/vpc/vpc_different_regions/vpc_different_regions_test.py
+++ b/tests/providers/aws/services/vpc/vpc_different_regions/vpc_different_regions_test.py
@@ -1,51 +1,51 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_ec2
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_ARN,
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_vpc_different_regions:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region="us-east-1",
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
+    @mock_aws
+    def test_no_vpcs(self):
+        from prowler.providers.aws.services.vpc.vpc_service import VPC
+
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
         )
 
-        return audit_info
+        with mock.patch(
+            "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
+            new=current_audit_info,
+        ):
+            with mock.patch(
+                "prowler.providers.aws.services.vpc.vpc_different_regions.vpc_different_regions.vpc_client",
+                new=VPC(current_audit_info),
+            ) as vpc_client:
+                # Remove all VPCs
+                vpc_client.vpcs.clear()
+
+                # Test Check
+                from prowler.providers.aws.services.vpc.vpc_different_regions.vpc_different_regions import (
+                    vpc_different_regions,
+                )
 
-    @mock_ec2
+                check = vpc_different_regions()
+                result = check.execute()
+
+                assert len(result) == 0
+
+    @mock_aws
     def test_vpc_different_regions(self):
         # VPC Region 1
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         ec2_client.create_vpc(CidrBlock="172.28.7.0/24", InstanceTenancy="default")
         # VPC Region 2
         ec2_client_eu = client("ec2", region_name="eu-west-1")
@@ -53,7 +53,9 @@ def test_vpc_different_regions(self):
 
         from prowler.providers.aws.services.vpc.vpc_service import VPC
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -78,17 +80,20 @@ def test_vpc_different_regions(self):
                     result[0].status_extended == "VPCs found in more than one region."
                 )
                 assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+                assert result[0].resource_arn == AWS_ACCOUNT_ARN
                 assert result[0].resource_tags == []
 
-    @mock_ec2
-    def test_vpc_only_one_regions(self):
-        ec2_client = client("ec2", region_name=AWS_REGION)
+    @mock_aws
+    def test_vpc_only_one_region(self):
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         # VPC Region 1
         ec2_client.create_vpc(CidrBlock="172.28.6.0/24", InstanceTenancy="default")
 
         from prowler.providers.aws.services.vpc.vpc_service import VPC
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -108,7 +113,8 @@ def test_vpc_only_one_regions(self):
 
                 assert len(result) == 1
                 assert result[0].status == "FAIL"
-                assert result[0].region == "us-east-1"
+                assert result[0].region == AWS_REGION_US_EAST_1
                 assert result[0].status_extended == "VPCs found only in one region."
                 assert result[0].resource_id == AWS_ACCOUNT_NUMBER
+                assert result[0].resource_arn == AWS_ACCOUNT_ARN
                 assert result[0].resource_tags == []
diff --git a/tests/providers/aws/services/vpc/vpc_endpoint_connections_trust_boundaries/vpc_endpoint_connections_trust_boundaries_test.py b/tests/providers/aws/services/vpc/vpc_endpoint_connections_trust_boundaries/vpc_endpoint_connections_trust_boundaries_test.py
index 6405bebb95e..74c1fa496e0 100644
--- a/tests/providers/aws/services/vpc/vpc_endpoint_connections_trust_boundaries/vpc_endpoint_connections_trust_boundaries_test.py
+++ b/tests/providers/aws/services/vpc/vpc_endpoint_connections_trust_boundaries/vpc_endpoint_connections_trust_boundaries_test.py
@@ -1,55 +1,25 @@
 import json
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_ec2
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
 TRUSTED_AWS_ACCOUNT_NUMBER = "111122223333"
 NON_TRUSTED_AWS_ACCOUNT_NUMBER = "000011112222"
 
 
 class Test_vpc_endpoint_connections_trust_boundaries:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_vpc_no_endpoints(self):
         from prowler.providers.aws.services.vpc.vpc_service import VPC
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         # Set config variable
         current_audit_info.audit_config = {"trusted_account_ids": []}
 
@@ -71,10 +41,10 @@ def test_vpc_no_endpoints(self):
 
                 assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_vpc_aws_endpoint(self):
         # Create VPC Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
 
         vpc = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"]
 
@@ -88,7 +58,7 @@ def test_vpc_aws_endpoint(self):
 
         from prowler.providers.aws.services.vpc.vpc_service import VPC
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         # Set config variable
         current_audit_info.audit_config = {"trusted_account_ids": []}
 
@@ -110,10 +80,10 @@ def test_vpc_aws_endpoint(self):
 
                 assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_vpc_endpoint_with_full_access(self):
         # Create VPC Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
 
         vpc = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"]
 
@@ -139,7 +109,7 @@ def test_vpc_endpoint_with_full_access(self):
 
         from prowler.providers.aws.services.vpc.vpc_service import VPC
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         # Set config variable
         current_audit_info.audit_config = {"trusted_account_ids": []}
 
@@ -169,12 +139,12 @@ def test_vpc_endpoint_with_full_access(self):
                     result[0].resource_id
                     == vpc_endpoint["VpcEndpoint"]["VpcEndpointId"]
                 )
-                assert result[0].region == AWS_REGION
+                assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_ec2
+    @mock_aws
     def test_vpc_endpoint_with_trusted_account_arn(self):
         # Create VPC Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
 
         vpc = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"]
 
@@ -201,7 +171,7 @@ def test_vpc_endpoint_with_trusted_account_arn(self):
         )
         from prowler.providers.aws.services.vpc.vpc_service import VPC
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         # Set config variable
         current_audit_info.audit_config = {"trusted_account_ids": []}
 
@@ -231,12 +201,12 @@ def test_vpc_endpoint_with_trusted_account_arn(self):
                     result[0].resource_id
                     == vpc_endpoint["VpcEndpoint"]["VpcEndpointId"]
                 )
-                assert result[0].region == AWS_REGION
+                assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_ec2
+    @mock_aws
     def test_vpc_endpoint_with_trusted_account_id(self):
         # Create VPC Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
 
         vpc = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"]
 
@@ -261,7 +231,7 @@ def test_vpc_endpoint_with_trusted_account_id(self):
         )
         from prowler.providers.aws.services.vpc.vpc_service import VPC
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         # Set config variable
         current_audit_info.audit_config = {"trusted_account_ids": []}
 
@@ -291,12 +261,12 @@ def test_vpc_endpoint_with_trusted_account_id(self):
                     result[0].resource_id
                     == vpc_endpoint["VpcEndpoint"]["VpcEndpointId"]
                 )
-                assert result[0].region == AWS_REGION
+                assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_ec2
+    @mock_aws
     def test_vpc_endpoint_with_untrusted_account(self):
         # Create VPC Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
 
         vpc = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"]
 
@@ -324,7 +294,7 @@ def test_vpc_endpoint_with_untrusted_account(self):
 
         from prowler.providers.aws.services.vpc.vpc_service import VPC
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         # Set config variable
         current_audit_info.audit_config = {"trusted_account_ids": []}
 
@@ -355,10 +325,10 @@ def test_vpc_endpoint_with_untrusted_account(self):
                     == vpc_endpoint["VpcEndpoint"]["VpcEndpointId"]
                 )
 
-    @mock_ec2
+    @mock_aws
     def test_vpc_endpoint_with_config_trusted_account_with_arn(self):
         # Create VPC Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
 
         vpc = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"]
 
@@ -385,7 +355,7 @@ def test_vpc_endpoint_with_config_trusted_account_with_arn(self):
         )
         from prowler.providers.aws.services.vpc.vpc_service import VPC
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         # Set config variable
         current_audit_info.audit_config = {
@@ -418,12 +388,12 @@ def test_vpc_endpoint_with_config_trusted_account_with_arn(self):
                     result[0].resource_id
                     == vpc_endpoint["VpcEndpoint"]["VpcEndpointId"]
                 )
-                assert result[0].region == AWS_REGION
+                assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_ec2
+    @mock_aws
     def test_vpc_endpoint_with_config_trusted_account(self):
         # Create VPC Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
 
         vpc = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"]
 
@@ -448,7 +418,7 @@ def test_vpc_endpoint_with_config_trusted_account(self):
         )
         from prowler.providers.aws.services.vpc.vpc_service import VPC
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         # Set config variable
         current_audit_info.audit_config = {
@@ -481,12 +451,12 @@ def test_vpc_endpoint_with_config_trusted_account(self):
                     result[0].resource_id
                     == vpc_endpoint["VpcEndpoint"]["VpcEndpointId"]
                 )
-                assert result[0].region == AWS_REGION
+                assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_ec2
+    @mock_aws
     def test_vpc_endpoint_with_two_account_ids_one_trusted_one_not(self):
         # Create VPC Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
 
         vpc = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"]
 
@@ -516,7 +486,7 @@ def test_vpc_endpoint_with_two_account_ids_one_trusted_one_not(self):
         )
         from prowler.providers.aws.services.vpc.vpc_service import VPC
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         # Set config variable
         current_audit_info.audit_config = {"trusted_account_ids": []}
 
@@ -546,12 +516,12 @@ def test_vpc_endpoint_with_two_account_ids_one_trusted_one_not(self):
                     result[0].resource_id
                     == vpc_endpoint["VpcEndpoint"]["VpcEndpointId"]
                 )
-                assert result[0].region == AWS_REGION
+                assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_ec2
+    @mock_aws
     def test_vpc_endpoint_with_aws_principal_all(self):
         # Create VPC Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
 
         vpc = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"]
 
@@ -576,7 +546,7 @@ def test_vpc_endpoint_with_aws_principal_all(self):
         )
         from prowler.providers.aws.services.vpc.vpc_service import VPC
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         # Set config variable
         current_audit_info.audit_config = {"trusted_account_ids": []}
 
@@ -606,14 +576,14 @@ def test_vpc_endpoint_with_aws_principal_all(self):
                     result[0].resource_id
                     == vpc_endpoint["VpcEndpoint"]["VpcEndpointId"]
                 )
-                assert result[0].region == AWS_REGION
+                assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_ec2
+    @mock_aws
     def test_vpc_endpoint_with_aws_principal_all_but_restricted_condition_with_SourceAccount(
         self,
     ):
         # Create VPC Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
 
         vpc = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"]
 
@@ -643,7 +613,7 @@ def test_vpc_endpoint_with_aws_principal_all_but_restricted_condition_with_Sourc
         )
         from prowler.providers.aws.services.vpc.vpc_service import VPC
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         # Set config variable
         current_audit_info.audit_config = {"trusted_account_ids": []}
 
@@ -673,14 +643,14 @@ def test_vpc_endpoint_with_aws_principal_all_but_restricted_condition_with_Sourc
                     result[0].resource_id
                     == vpc_endpoint["VpcEndpoint"]["VpcEndpointId"]
                 )
-                assert result[0].region == AWS_REGION
+                assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_ec2
+    @mock_aws
     def test_vpc_endpoint_with_aws_principal_all_but_restricted_condition_with_PrincipalAccount(
         self,
     ):
         # Create VPC Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
 
         vpc = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"]
 
@@ -710,7 +680,7 @@ def test_vpc_endpoint_with_aws_principal_all_but_restricted_condition_with_Princ
         )
         from prowler.providers.aws.services.vpc.vpc_service import VPC
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
         # Set config variable
         current_audit_info.audit_config = {"trusted_account_ids": []}
 
@@ -740,4 +710,4 @@ def test_vpc_endpoint_with_aws_principal_all_but_restricted_condition_with_Princ
                     result[0].resource_id
                     == vpc_endpoint["VpcEndpoint"]["VpcEndpointId"]
                 )
-                assert result[0].region == AWS_REGION
+                assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/vpc/vpc_endpoint_services_allowed_principals_trust_boundaries/vpc_endpoint_services_allowed_principals_trust_boundaries_test.py b/tests/providers/aws/services/vpc/vpc_endpoint_services_allowed_principals_trust_boundaries/vpc_endpoint_services_allowed_principals_trust_boundaries_test.py
index 5695ad9bc0a..885294759b5 100644
--- a/tests/providers/aws/services/vpc/vpc_endpoint_services_allowed_principals_trust_boundaries/vpc_endpoint_services_allowed_principals_trust_boundaries_test.py
+++ b/tests/providers/aws/services/vpc/vpc_endpoint_services_allowed_principals_trust_boundaries/vpc_endpoint_services_allowed_principals_trust_boundaries_test.py
@@ -1,21 +1,21 @@
 from unittest import mock
 
 from boto3 import client
-from moto import mock_ec2, mock_elbv2
+from moto import mock_aws
 
 from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
     AWS_REGION_US_EAST_1,
     set_mocked_aws_audit_info,
 )
 
-AWS_ACCOUNT_NUMBER = "123456789012"
 AWS_ACCOUNT_ARN = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root"
 AWS_ACCOUNT_NUMBER_2 = "111122223333"
 AWS_ACCOUNT_ARN_2 = f"arn:aws:iam::{AWS_ACCOUNT_NUMBER_2}:root"
 
 
 class Test_vpc_endpoint_services_allowed_principals_trust_boundaries:
-    @mock_ec2
+    @mock_aws
     def test_no_vpc_endpoint_services(self):
         from prowler.providers.aws.services.vpc.vpc_service import VPC
 
@@ -43,8 +43,7 @@ def test_no_vpc_endpoint_services(self):
 
                 assert len(result) == 0
 
-    @mock_ec2
-    @mock_elbv2
+    @mock_aws
     def test_vpc_endpoint_service_without_allowed_principals(self):
         # Create VPC Mocked Resources
         ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
@@ -107,8 +106,7 @@ def test_vpc_endpoint_service_without_allowed_principals(self):
                 assert result[0].resource_tags == []
                 assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_ec2
-    @mock_elbv2
+    @mock_aws
     def test_vpc_endpoint_service_with_allowed_principal_account_arn(self):
         # Create VPC Mocked Resources
         ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
@@ -176,8 +174,7 @@ def test_vpc_endpoint_service_with_allowed_principal_account_arn(self):
                 assert result[0].resource_tags == []
                 assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_ec2
-    @mock_elbv2
+    @mock_aws
     def test_vpc_endpoint_service_with_allowed_principal_account_number(self):
         # Create VPC Mocked Resources
         ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
@@ -245,8 +242,7 @@ def test_vpc_endpoint_service_with_allowed_principal_account_number(self):
                 assert result[0].resource_tags == []
                 assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_ec2
-    @mock_elbv2
+    @mock_aws
     def test_vpc_endpoint_service_with_principal_not_allowed(self):
         # Create VPC Mocked Resources
         ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
@@ -314,8 +310,7 @@ def test_vpc_endpoint_service_with_principal_not_allowed(self):
                 assert result[0].resource_tags == []
                 assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_ec2
-    @mock_elbv2
+    @mock_aws
     def test_vpc_endpoint_service_with_principal_different_than_account_but_allowed_in_config(
         self,
     ):
diff --git a/tests/providers/aws/services/vpc/vpc_flow_logs_enabled/vpc_flow_logs_enabled_test.py b/tests/providers/aws/services/vpc/vpc_flow_logs_enabled/vpc_flow_logs_enabled_test.py
index e3a63f76b92..f6cc27bc9f4 100644
--- a/tests/providers/aws/services/vpc/vpc_flow_logs_enabled/vpc_flow_logs_enabled_test.py
+++ b/tests/providers/aws/services/vpc/vpc_flow_logs_enabled/vpc_flow_logs_enabled_test.py
@@ -1,51 +1,24 @@
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_vpc_flow_logs_enabled:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_vpc_only_default_vpcs(self):
         from prowler.providers.aws.services.vpc.vpc_service import VPC
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -64,12 +37,12 @@ def test_vpc_only_default_vpcs(self):
 
             assert len(result) == 2  # Number of AWS regions, one default VPC per region
 
-    @mock_ec2
+    @mock_aws
     def test_vpc_with_flow_logs(self):
         from prowler.providers.aws.services.vpc.vpc_service import VPC
 
         # Create VPC Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
 
         vpc = ec2_client.create_vpc(
             CidrBlock="10.0.0.0/16",
@@ -94,7 +67,9 @@ def test_vpc_with_flow_logs(self):
             + ":role/test-role",
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -120,16 +95,18 @@ def test_vpc_with_flow_logs(self):
                     )
                     assert result.resource_id == vpc["VpcId"]
 
-    @mock_ec2
+    @mock_aws
     def test_vpc_without_flow_logs(self):
         from prowler.providers.aws.services.vpc.vpc_service import VPC
 
         # Create VPC Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
 
         vpc = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"]
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -156,16 +133,18 @@ def test_vpc_without_flow_logs(self):
                     )
                     assert result.resource_id == vpc["VpcId"]
 
-    @mock_ec2
+    @mock_aws
     def test_vpc_without_flow_logs_ignoring(self):
         from prowler.providers.aws.services.vpc.vpc_service import VPC
 
         # Create VPC Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
 
         ec2_client.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"]
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
         current_audit_info.ignore_unused_services = True
 
         with mock.patch(
@@ -185,17 +164,19 @@ def test_vpc_without_flow_logs_ignoring(self):
 
             assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_vpc_without_flow_logs_ignoring_in_use(self):
         from prowler.providers.aws.services.vpc.vpc_service import VPC
 
         # Create VPC Mocked Resources
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        ec2 = resource("ec2", region_name=AWS_REGION_US_EAST_1)
 
         vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
         subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18")
         ec2.create_network_interface(SubnetId=subnet.id)
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
         current_audit_info.ignore_unused_services = True
 
         with mock.patch(
diff --git a/tests/providers/aws/services/vpc/vpc_peering_routing_tables_with_least_privilege/vpc_peering_routing_tables_with_least_privilege_test.py b/tests/providers/aws/services/vpc/vpc_peering_routing_tables_with_least_privilege/vpc_peering_routing_tables_with_least_privilege_test.py
index 181a180bb8c..3fca4ab057e 100644
--- a/tests/providers/aws/services/vpc/vpc_peering_routing_tables_with_least_privilege/vpc_peering_routing_tables_with_least_privilege_test.py
+++ b/tests/providers/aws/services/vpc/vpc_peering_routing_tables_with_least_privilege/vpc_peering_routing_tables_with_least_privilege_test.py
@@ -1,52 +1,20 @@
 from unittest import mock
 
-from boto3 import client, resource, session
-from moto import mock_ec2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_vpc_peering_routing_tables_with_least_privilege:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_vpc_no_peering_connections(self):
         from prowler.providers.aws.services.vpc.vpc_service import VPC
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -66,11 +34,11 @@ def test_vpc_no_peering_connections(self):
 
                 assert len(result) == 0
 
-    @mock_ec2
+    @mock_aws
     def test_vpc_comply_peering_connection_(self):
         # Create VPC Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
-        ec2_resource = resource("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
+        ec2_resource = resource("ec2", region_name=AWS_REGION_US_EAST_1)
 
         # Create VPCs peers as well as a comply route
         vpc = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
@@ -96,7 +64,7 @@ def test_vpc_comply_peering_connection_(self):
 
         from prowler.providers.aws.services.vpc.vpc_service import VPC, Route
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -131,13 +99,13 @@ def test_vpc_comply_peering_connection_(self):
                     == f"VPC Peering Connection {vpc_pcx_id} comply with least privilege access."
                 )
                 assert result[0].resource_id == vpc_pcx_id
-                assert result[0].region == AWS_REGION
+                assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_ec2
+    @mock_aws
     def test_vpc_comply_peering_connection_edge_case(self):
         # Create VPC Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
-        ec2_resource = resource("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
+        ec2_resource = resource("ec2", region_name=AWS_REGION_US_EAST_1)
 
         # Create VPCs peers as well as a comply route
         vpc = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
@@ -161,7 +129,7 @@ def test_vpc_comply_peering_connection_edge_case(self):
 
         from prowler.providers.aws.services.vpc.vpc_service import VPC, Route
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -196,13 +164,13 @@ def test_vpc_comply_peering_connection_edge_case(self):
                     == f"VPC Peering Connection {vpc_pcx_id} comply with least privilege access."
                 )
                 assert result[0].resource_id == vpc_pcx_id
-                assert result[0].region == AWS_REGION
+                assert result[0].region == AWS_REGION_US_EAST_1
 
-    @mock_ec2
+    @mock_aws
     def test_vpc_not_comply_peering_connection_(self):
         # Create VPC Mocked Resources
-        ec2_client = client("ec2", region_name=AWS_REGION)
-        ec2_resource = resource("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
+        ec2_resource = resource("ec2", region_name=AWS_REGION_US_EAST_1)
 
         # Create VPCs peers as well as a comply route
         vpc = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
@@ -228,7 +196,7 @@ def test_vpc_not_comply_peering_connection_(self):
 
         from prowler.providers.aws.services.vpc.vpc_service import VPC, Route
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -263,4 +231,4 @@ def test_vpc_not_comply_peering_connection_(self):
                     == f"VPC Peering Connection {vpc_pcx_id} does not comply with least privilege access since it accepts whole VPCs CIDR in its route tables."
                 )
                 assert result[0].resource_id == vpc_pcx_id
-                assert result[0].region == AWS_REGION
+                assert result[0].region == AWS_REGION_US_EAST_1
diff --git a/tests/providers/aws/services/vpc/vpc_service_test.py b/tests/providers/aws/services/vpc/vpc_service_test.py
index 86493c2bc0f..c4317fc9325 100644
--- a/tests/providers/aws/services/vpc/vpc_service_test.py
+++ b/tests/providers/aws/services/vpc/vpc_service_test.py
@@ -1,86 +1,65 @@
 import json
 
-from boto3 import client, resource, session
-from moto import mock_ec2, mock_elbv2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.vpc.vpc_service import VPC, Route
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_VPC_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["eu-west-1", "us-east-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
 
     # Test VPC Service
-    @mock_ec2
+    @mock_aws
     def test_service(self):
         # VPC client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
         vpc = VPC(audit_info)
         assert vpc.service == "ec2"
 
     # Test VPC Client
-    @mock_ec2
+    @mock_aws
     def test_client(self):
         # VPC client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
         vpc = VPC(audit_info)
         for regional_client in vpc.regional_clients.values():
             assert regional_client.__class__.__name__ == "EC2"
 
     # Test VPC Session
-    @mock_ec2
+    @mock_aws
     def test__get_session__(self):
         # VPC client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
         vpc = VPC(audit_info)
         assert vpc.session.__class__.__name__ == "Session"
 
     # Test VPC Session
-    @mock_ec2
+    @mock_aws
     def test_audited_account(self):
         # VPC client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
         vpc = VPC(audit_info)
         assert vpc.audited_account == AWS_ACCOUNT_NUMBER
 
     # Test VPC Describe VPCs
-    @mock_ec2
+    @mock_aws
     def test__describe_vpcs__(self):
         # Generate VPC Client
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         # Create VPC
         vpc = ec2_client.create_vpc(
             CidrBlock="10.0.0.0/16",
@@ -94,7 +73,9 @@ def test__describe_vpcs__(self):
             ],
         )["Vpc"]
         # VPC client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
         vpc = VPC(audit_info)
         assert (
             len(vpc.vpcs) == 3
@@ -106,10 +87,10 @@ def test__describe_vpcs__(self):
                 ]
 
     # Test VPC Describe Flow Logs
-    @mock_ec2
+    @mock_aws
     def test__describe_flow_logs__(self):
         # Generate VPC Client
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         new_vpc = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"]
         # Create VPC Flow log
         ec2_client.create_flow_logs(
@@ -123,7 +104,9 @@ def test__describe_flow_logs__(self):
             + ":role/test-role",
         )
         # VPC client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
         vpc = VPC(audit_info)
         # Search created VPC among default ones
         for vpc_iter in vpc.vpcs.values():
@@ -131,10 +114,10 @@ def test__describe_flow_logs__(self):
                 assert vpc_iter.flow_log is True
 
     # Test VPC Describe VPC Peering connections
-    @mock_ec2
+    @mock_aws
     def test__describe_vpc_peering_connections__(self):
         # Generate VPC Client
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         # Create VPCs peers
         vpc = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
         peer_vpc = ec2_client.create_vpc(CidrBlock="11.0.0.0/16")
@@ -156,7 +139,9 @@ def test__describe_vpc_peering_connections__(self):
             VpcPeeringConnectionId=vpc_pcx_id
         )
         # VPC client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
         vpc = VPC(audit_info)
         assert len(vpc.vpc_peering_connections) == 1
         assert vpc.vpc_peering_connections[0].id == vpc_pcx_id
@@ -165,11 +150,11 @@ def test__describe_vpc_peering_connections__(self):
         ]
 
     # Test VPC Describe VPC Peering connections
-    @mock_ec2
+    @mock_aws
     def test__describe_route_tables__(self):
         # Generate VPC Client
-        ec2_client = client("ec2", region_name=AWS_REGION)
-        _ = resource("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
+        _ = resource("ec2", region_name=AWS_REGION_US_EAST_1)
 
         # Create VPCs peers as well as a route
         vpc = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")
@@ -195,7 +180,9 @@ def test__describe_route_tables__(self):
         # )
 
         # VPC client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
         vpc = VPC(audit_info)
         vpc.vpc_peering_connections[0].route_tables = [
             Route(
@@ -207,10 +194,10 @@ def test__describe_route_tables__(self):
         assert vpc.vpc_peering_connections[0].id == vpc_pcx_id
 
     # Test VPC Describe VPC Endpoints
-    @mock_ec2
+    @mock_aws
     def test__describe_vpc_endpoints__(self):
         # Generate VPC Client
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         # Create VPC endpoint
         vpc = ec2_client.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"]
 
@@ -242,7 +229,9 @@ def test__describe_vpc_endpoints__(self):
             ],
         )["VpcEndpoint"]["VpcEndpointId"]
         # VPC client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
         vpc = VPC(audit_info)
         assert len(vpc.vpc_endpoints) == 1
         assert vpc.vpc_endpoints[0].id == endpoint
@@ -251,12 +240,11 @@ def test__describe_vpc_endpoints__(self):
         ]
 
     # Test VPC Describe VPC Endpoint Services
-    @mock_ec2
-    @mock_elbv2
+    @mock_aws
     def test__describe_vpc_endpoint_services__(self):
         # Generate VPC Client
-        ec2_client = client("ec2", region_name=AWS_REGION)
-        elbv2_client = client("elbv2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
+        elbv2_client = client("elbv2", region_name=AWS_REGION_US_EAST_1)
 
         vpc = ec2_client.create_vpc(
             CidrBlock="172.28.7.0/24", InstanceTenancy="default"
@@ -264,7 +252,7 @@ def test__describe_vpc_endpoint_services__(self):
         subnet = ec2_client.create_subnet(
             VpcId=vpc["Vpc"]["VpcId"],
             CidrBlock="172.28.7.192/26",
-            AvailabilityZone=f"{AWS_REGION}a",
+            AvailabilityZone=f"{AWS_REGION_US_EAST_1}a",
         )
         lb_name = "lb_vpce-test"
         lb_arn = elbv2_client.create_load_balancer(
@@ -286,11 +274,13 @@ def test__describe_vpc_endpoint_services__(self):
             ],
         )
         endpoint_id = endpoint["ServiceConfiguration"]["ServiceId"]
-        endpoint_arn = f"arn:aws:ec2:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:vpc-endpoint-service/{endpoint_id}"
+        endpoint_arn = f"arn:aws:ec2:{AWS_REGION_US_EAST_1}:{AWS_ACCOUNT_NUMBER}:vpc-endpoint-service/{endpoint_id}"
         endpoint_service = endpoint["ServiceConfiguration"]["ServiceName"]
 
         # VPC client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
         vpc = VPC(audit_info)
 
         for vpce in vpc.vpc_endpoint_services:
@@ -299,14 +289,14 @@ def test__describe_vpc_endpoint_services__(self):
             assert vpce.service == endpoint_service
             assert vpce.owner_id == AWS_ACCOUNT_NUMBER
             assert vpce.allowed_principals == []
-            assert vpce.region == AWS_REGION
+            assert vpce.region == AWS_REGION_US_EAST_1
             assert vpce.tags == []
 
     # Test VPC Describe VPC Subnets
-    @mock_ec2
+    @mock_aws
     def test__describe_vpc_subnets__(self):
         # Generate VPC Client
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         # Create VPC
         vpc = ec2_client.create_vpc(
             CidrBlock="172.28.7.0/24", InstanceTenancy="default"
@@ -314,10 +304,12 @@ def test__describe_vpc_subnets__(self):
         subnet = ec2_client.create_subnet(
             VpcId=vpc["Vpc"]["VpcId"],
             CidrBlock="172.28.7.192/26",
-            AvailabilityZone=f"{AWS_REGION}a",
+            AvailabilityZone=f"{AWS_REGION_US_EAST_1}a",
         )
         # VPC client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info(
+            [AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
+        )
         vpc = VPC(audit_info)
         assert (
             len(vpc.vpcs) == 3
@@ -328,8 +320,8 @@ def test__describe_vpc_subnets__(self):
                 assert vpc.subnets[0].default is False
                 assert vpc.subnets[0].vpc_id == vpc.id
                 assert vpc.subnets[0].cidr_block == "172.28.7.192/26"
-                assert vpc.subnets[0].availability_zone == f"{AWS_REGION}a"
+                assert vpc.subnets[0].availability_zone == f"{AWS_REGION_US_EAST_1}a"
                 assert vpc.subnets[0].public is False
                 assert vpc.subnets[0].nat_gateway is False
-                assert vpc.subnets[0].region == AWS_REGION
+                assert vpc.subnets[0].region == AWS_REGION_US_EAST_1
                 assert vpc.subnets[0].tags is None
diff --git a/tests/providers/aws/services/vpc/vpc_subnet_different_az/vpc_subnet_different_az_test.py b/tests/providers/aws/services/vpc/vpc_subnet_different_az/vpc_subnet_different_az_test.py
index 6ff54eb3236..bf082e9916d 100644
--- a/tests/providers/aws/services/vpc/vpc_subnet_different_az/vpc_subnet_different_az_test.py
+++ b/tests/providers/aws/services/vpc/vpc_subnet_different_az/vpc_subnet_different_az_test.py
@@ -1,50 +1,18 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_ec2
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_vpc_subnet_different_az:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_vpc_subnet_different_az(self):
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc = ec2_client.create_vpc(
             CidrBlock="172.28.7.0/24",
             InstanceTenancy="default",
@@ -61,19 +29,19 @@ def test_vpc_subnet_different_az(self):
         ec2_client.create_subnet(
             VpcId=vpc["Vpc"]["VpcId"],
             CidrBlock="172.28.7.192/26",
-            AvailabilityZone=f"{AWS_REGION}a",
+            AvailabilityZone=f"{AWS_REGION_US_EAST_1}a",
         )
 
         # VPC AZ 2
         ec2_client.create_subnet(
             VpcId=vpc["Vpc"]["VpcId"],
             CidrBlock="172.28.7.0/26",
-            AvailabilityZone=f"{AWS_REGION}b",
+            AvailabilityZone=f"{AWS_REGION_US_EAST_1}b",
         )
 
         from prowler.providers.aws.services.vpc.vpc_service import VPC
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -103,13 +71,13 @@ def test_vpc_subnet_different_az(self):
                         assert result.resource_tags == [
                             {"Key": "Name", "Value": "vpc_name"}
                         ]
-                        assert result.region == AWS_REGION
+                        assert result.region == AWS_REGION_US_EAST_1
                 if not found:
                     assert False
 
-    @mock_ec2
+    @mock_aws
     def test_vpc_subnet_same_az(self):
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc = ec2_client.create_vpc(
             CidrBlock="172.28.7.0/24", InstanceTenancy="default"
         )
@@ -117,19 +85,19 @@ def test_vpc_subnet_same_az(self):
         ec2_client.create_subnet(
             VpcId=vpc["Vpc"]["VpcId"],
             CidrBlock="172.28.7.192/26",
-            AvailabilityZone=f"{AWS_REGION}a",
+            AvailabilityZone=f"{AWS_REGION_US_EAST_1}a",
         )
 
         # VPC AZ 2
         ec2_client.create_subnet(
             VpcId=vpc["Vpc"]["VpcId"],
             CidrBlock="172.28.7.0/26",
-            AvailabilityZone=f"{AWS_REGION}a",
+            AvailabilityZone=f"{AWS_REGION_US_EAST_1}a",
         )
 
         from prowler.providers.aws.services.vpc.vpc_service import VPC
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -153,24 +121,24 @@ def test_vpc_subnet_same_az(self):
                         assert result.status == "FAIL"
                         assert (
                             result.status_extended
-                            == f"VPC {vpc['Vpc']['VpcId']} has only subnets in {AWS_REGION}a."
+                            == f"VPC {vpc['Vpc']['VpcId']} has only subnets in {AWS_REGION_US_EAST_1}a."
                         )
                         assert result.resource_id == vpc["Vpc"]["VpcId"]
                         assert result.resource_tags == []
-                        assert result.region == AWS_REGION
+                        assert result.region == AWS_REGION_US_EAST_1
                 if not found:
                     assert False
 
-    @mock_ec2
+    @mock_aws
     def test_vpc_no_subnets(self):
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc = ec2_client.create_vpc(
             CidrBlock="172.28.7.0/24", InstanceTenancy="default"
         )
 
         from prowler.providers.aws.services.vpc.vpc_service import VPC
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -198,6 +166,6 @@ def test_vpc_no_subnets(self):
                         )
                         assert result.resource_id == vpc["Vpc"]["VpcId"]
                         assert result.resource_tags == []
-                        assert result.region == AWS_REGION
+                        assert result.region == AWS_REGION_US_EAST_1
                 if not found:
                     assert False
diff --git a/tests/providers/aws/services/vpc/vpc_subnet_no_public_ip_by_default/vpc_subnet_no_public_ip_by_default_test.py b/tests/providers/aws/services/vpc/vpc_subnet_no_public_ip_by_default/vpc_subnet_no_public_ip_by_default_test.py
index f0475ab2bb0..543db22e462 100644
--- a/tests/providers/aws/services/vpc/vpc_subnet_no_public_ip_by_default/vpc_subnet_no_public_ip_by_default_test.py
+++ b/tests/providers/aws/services/vpc/vpc_subnet_no_public_ip_by_default/vpc_subnet_no_public_ip_by_default_test.py
@@ -1,57 +1,25 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_ec2
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_vpc_subnet_no_public_ip_by_default:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_vpc_with_map_ip_on_launch(self):
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc = ec2_client.create_vpc(
             CidrBlock="172.28.7.0/24", InstanceTenancy="default"
         )
         subnet_private = ec2_client.create_subnet(
             VpcId=vpc["Vpc"]["VpcId"],
             CidrBlock="172.28.7.192/26",
-            AvailabilityZone=f"{AWS_REGION}a",
+            AvailabilityZone=f"{AWS_REGION_US_EAST_1}a",
             TagSpecifications=[
                 {
                     "ResourceType": "subnet",
@@ -69,7 +37,7 @@ def test_vpc_with_map_ip_on_launch(self):
 
         from prowler.providers.aws.services.vpc.vpc_service import VPC
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -94,16 +62,16 @@ def test_vpc_with_map_ip_on_launch(self):
                             == "VPC subnet subnet_name assigns public IP by default."
                         )
 
-    @mock_ec2
+    @mock_aws
     def test_vpc_without_map_ip_on_launch(self):
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc = ec2_client.create_vpc(
             CidrBlock="172.28.7.0/24", InstanceTenancy="default"
         )
         subnet_private = ec2_client.create_subnet(
             VpcId=vpc["Vpc"]["VpcId"],
             CidrBlock="172.28.7.192/26",
-            AvailabilityZone=f"{AWS_REGION}a",
+            AvailabilityZone=f"{AWS_REGION_US_EAST_1}a",
         )
 
         ec2_client.modify_subnet_attribute(
@@ -113,7 +81,7 @@ def test_vpc_without_map_ip_on_launch(self):
 
         from prowler.providers.aws.services.vpc.vpc_service import VPC
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
diff --git a/tests/providers/aws/services/vpc/vpc_subnet_separate_private_public/vpc_subnet_separate_private_public_test.py b/tests/providers/aws/services/vpc/vpc_subnet_separate_private_public/vpc_subnet_separate_private_public_test.py
index 7732c9da155..9cccbf9e819 100644
--- a/tests/providers/aws/services/vpc/vpc_subnet_separate_private_public/vpc_subnet_separate_private_public_test.py
+++ b/tests/providers/aws/services/vpc/vpc_subnet_separate_private_public/vpc_subnet_separate_private_public_test.py
@@ -1,50 +1,18 @@
 from unittest import mock
 
-from boto3 import client, session
-from moto import mock_ec2
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_REGION = "us-east-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_US_EAST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_vpc_subnet_separate_private_public:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
-    @mock_ec2
+    @mock_aws
     def test_vpc_subnet_only_private(self):
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc = ec2_client.create_vpc(
             CidrBlock="172.28.7.0/24",
             InstanceTenancy="default",
@@ -61,7 +29,7 @@ def test_vpc_subnet_only_private(self):
         subnet_private = ec2_client.create_subnet(
             VpcId=vpc["Vpc"]["VpcId"],
             CidrBlock="172.28.7.192/26",
-            AvailabilityZone=f"{AWS_REGION}a",
+            AvailabilityZone=f"{AWS_REGION_US_EAST_1}a",
         )
         route_table_private = ec2_client.create_route_table(
             VpcId=vpc["Vpc"]["VpcId"],
@@ -77,7 +45,7 @@ def test_vpc_subnet_only_private(self):
 
         from prowler.providers.aws.services.vpc.vpc_service import VPC
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -107,13 +75,13 @@ def test_vpc_subnet_only_private(self):
                         assert result.resource_tags == [
                             {"Key": "Name", "Value": "vpc_name"}
                         ]
-                        assert result.region == AWS_REGION
+                        assert result.region == AWS_REGION_US_EAST_1
                 if not found:
                     assert False
 
-    @mock_ec2
+    @mock_aws
     def test_vpc_subnet_only_public(self):
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc = ec2_client.create_vpc(
             CidrBlock="172.28.7.0/24", InstanceTenancy="default"
         )
@@ -121,7 +89,7 @@ def test_vpc_subnet_only_public(self):
         subnet_public = ec2_client.create_subnet(
             VpcId=vpc["Vpc"]["VpcId"],
             CidrBlock="172.28.7.192/26",
-            AvailabilityZone=f"{AWS_REGION}a",
+            AvailabilityZone=f"{AWS_REGION_US_EAST_1}a",
         )
         route_table_public = ec2_client.create_route_table(
             VpcId=vpc["Vpc"]["VpcId"],
@@ -139,7 +107,7 @@ def test_vpc_subnet_only_public(self):
 
         from prowler.providers.aws.services.vpc.vpc_service import VPC
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -167,13 +135,13 @@ def test_vpc_subnet_only_public(self):
                         )
                         assert result.resource_id == vpc["Vpc"]["VpcId"]
                         assert result.resource_tags == []
-                        assert result.region == AWS_REGION
+                        assert result.region == AWS_REGION_US_EAST_1
                 if not found:
                     assert False
 
-    @mock_ec2
+    @mock_aws
     def test_vpc_subnet_private_and_public(self):
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_US_EAST_1)
         vpc = ec2_client.create_vpc(
             CidrBlock="172.28.7.0/24", InstanceTenancy="default"
         )
@@ -181,7 +149,7 @@ def test_vpc_subnet_private_and_public(self):
         subnet_private = ec2_client.create_subnet(
             VpcId=vpc["Vpc"]["VpcId"],
             CidrBlock="172.28.7.192/26",
-            AvailabilityZone=f"{AWS_REGION}a",
+            AvailabilityZone=f"{AWS_REGION_US_EAST_1}a",
         )
         route_table_private = ec2_client.create_route_table(
             VpcId=vpc["Vpc"]["VpcId"],
@@ -198,7 +166,7 @@ def test_vpc_subnet_private_and_public(self):
         subnet_public = ec2_client.create_subnet(
             VpcId=vpc["Vpc"]["VpcId"],
             CidrBlock="172.28.7.0/26",
-            AvailabilityZone=f"{AWS_REGION}a",
+            AvailabilityZone=f"{AWS_REGION_US_EAST_1}a",
         )
         route_table_public = ec2_client.create_route_table(
             VpcId=vpc["Vpc"]["VpcId"],
@@ -216,7 +184,7 @@ def test_vpc_subnet_private_and_public(self):
 
         from prowler.providers.aws.services.vpc.vpc_service import VPC
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_US_EAST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -244,6 +212,6 @@ def test_vpc_subnet_private_and_public(self):
                         )
                         assert result.resource_id == vpc["Vpc"]["VpcId"]
                         assert result.resource_tags == []
-                        assert result.region == AWS_REGION
+                        assert result.region == AWS_REGION_US_EAST_1
                 if not found:
                     assert False
diff --git a/tests/providers/aws/services/waf/waf_service_test.py b/tests/providers/aws/services/waf/waf_service_test.py
index 8851e961e75..c6c2305ca61 100644
--- a/tests/providers/aws/services/waf/waf_service_test.py
+++ b/tests/providers/aws/services/waf/waf_service_test.py
@@ -1,14 +1,12 @@
 from unittest.mock import patch
 
 import botocore
-from boto3 import session
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.waf.waf_service import WAF
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    set_mocked_aws_audit_info,
+)
 
 # Mocking WAF-Regional Calls
 make_api_call = botocore.client.BaseClient._make_api_call
@@ -33,10 +31,12 @@ def mock_make_api_call(self, operation_name, kwarg):
 
 
 # Mock generate_regional_clients()
-def mock_generate_regional_clients(service, audit_info, _):
-    regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
-    regional_client.region = AWS_REGION
-    return {AWS_REGION: regional_client}
+def mock_generate_regional_clients(service, audit_info):
+    regional_client = audit_info.audit_session.client(
+        service, region_name=AWS_REGION_EU_WEST_1
+    )
+    regional_client.region = AWS_REGION_EU_WEST_1
+    return {AWS_REGION_EU_WEST_1: regional_client}
 
 
 # Patch every AWS call using Boto3 and generate_regional_clients to have 1 client
@@ -46,48 +46,17 @@ def mock_generate_regional_clients(service, audit_info, _):
     new=mock_generate_regional_clients,
 )
 class Test_WAF_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test WAF Service
     def test_service(self):
         # WAF client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
         waf = WAF(audit_info)
         assert waf.service == "waf-regional"
 
     # Test WAF Client
     def test_client(self):
         # WAF client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
         waf = WAF(audit_info)
         for regional_client in waf.regional_clients.values():
             assert regional_client.__class__.__name__ == "WAFRegional"
@@ -95,24 +64,24 @@ def test_client(self):
     # Test WAF Session
     def test__get_session__(self):
         # WAF client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
         waf = WAF(audit_info)
         assert waf.session.__class__.__name__ == "Session"
 
     # Test WAF Describe Web ACLs
     def test__list_web_acls__(self):
         # WAF client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
         waf = WAF(audit_info)
         assert len(waf.web_acls) == 1
         assert waf.web_acls[0].name == "my-web-acl"
-        assert waf.web_acls[0].region == AWS_REGION
+        assert waf.web_acls[0].region == AWS_REGION_EU_WEST_1
         assert waf.web_acls[0].id == "my-web-acl-id"
 
     # Test WAF Describe Web ACLs Resources
     def test__list_resources_for_web_acl__(self):
         # WAF client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
         waf = WAF(audit_info)
         assert len(waf.web_acls) == 1
         assert len(waf.web_acls[0].albs) == 1
diff --git a/tests/providers/aws/services/wafv2/wafv2_service_test.py b/tests/providers/aws/services/wafv2/wafv2_service_test.py
index 5022c27cf79..f8af8ce43be 100644
--- a/tests/providers/aws/services/wafv2/wafv2_service_test.py
+++ b/tests/providers/aws/services/wafv2/wafv2_service_test.py
@@ -1,75 +1,43 @@
-from boto3 import client, resource, session
-from moto import mock_ec2, mock_elbv2, mock_wafv2
+from boto3 import client, resource
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.wafv2.wafv2_service import WAFv2
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "us-east-1"
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    set_mocked_aws_audit_info,
+)
 
 
 class Test_WAFv2_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test WAFv2 Service
-    @mock_wafv2
+    @mock_aws
     def test_service(self):
         # WAFv2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
         wafv2 = WAFv2(audit_info)
         assert wafv2.service == "wafv2"
 
     # Test WAFv2 Client
-    @mock_wafv2
+    @mock_aws
     def test_client(self):
         # WAFv2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
         wafv2 = WAFv2(audit_info)
         for regional_client in wafv2.regional_clients.values():
             assert regional_client.__class__.__name__ == "WAFV2"
 
     # Test WAFv2 Session
-    @mock_wafv2
+    @mock_aws
     def test__get_session__(self):
         # WAFv2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
         wafv2 = WAFv2(audit_info)
         assert wafv2.session.__class__.__name__ == "Session"
 
     # Test WAFv2 Describe Web ACLs
-    @mock_wafv2
+    @mock_aws
     def test__list_web_acls__(self):
-        wafv2 = client("wafv2", region_name="us-east-1")
+        wafv2 = client("wafv2", region_name=AWS_REGION_EU_WEST_1)
         waf = wafv2.create_web_acl(
             Scope="REGIONAL",
             Name="my-web-acl",
@@ -81,22 +49,20 @@ def test__list_web_acls__(self):
             },
         )["Summary"]
         # WAFv2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
         wafv2 = WAFv2(audit_info)
         assert len(wafv2.web_acls) == 1
         assert wafv2.web_acls[0].name == waf["Name"]
-        assert wafv2.web_acls[0].region == AWS_REGION
+        assert wafv2.web_acls[0].region == AWS_REGION_EU_WEST_1
         assert wafv2.web_acls[0].arn == waf["ARN"]
         assert wafv2.web_acls[0].id == waf["Id"]
 
     # Test WAFv2 Describe Web ACLs Resources
-    @mock_ec2
-    @mock_elbv2
-    @mock_wafv2
+    @mock_aws
     def test__list_resources_for_web_acl__(self):
-        wafv2 = client("wafv2", region_name="us-east-1")
-        conn = client("elbv2", region_name=AWS_REGION)
-        ec2 = resource("ec2", region_name=AWS_REGION)
+        wafv2 = client("wafv2", region_name=AWS_REGION_EU_WEST_1)
+        conn = client("elbv2", region_name=AWS_REGION_EU_WEST_1)
+        ec2 = resource("ec2", region_name=AWS_REGION_EU_WEST_1)
         waf = wafv2.create_web_acl(
             Scope="REGIONAL",
             Name="my-web-acl",
@@ -112,10 +78,14 @@ def test__list_resources_for_web_acl__(self):
         )
         vpc = ec2.create_vpc(CidrBlock="172.28.7.0/24", InstanceTenancy="default")
         subnet1 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.192/26", AvailabilityZone=f"{AWS_REGION}a"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.192/26",
+            AvailabilityZone=f"{AWS_REGION_EU_WEST_1}a",
         )
         subnet2 = ec2.create_subnet(
-            VpcId=vpc.id, CidrBlock="172.28.7.0/26", AvailabilityZone=f"{AWS_REGION}b"
+            VpcId=vpc.id,
+            CidrBlock="172.28.7.0/26",
+            AvailabilityZone=f"{AWS_REGION_EU_WEST_1}b",
         )
 
         lb = conn.create_load_balancer(
@@ -128,7 +98,7 @@ def test__list_resources_for_web_acl__(self):
 
         wafv2.associate_web_acl(WebACLArn=waf["ARN"], ResourceArn=lb["LoadBalancerArn"])
         # WAFv2 client for this test class
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
         wafv2 = WAFv2(audit_info)
         wafv2.web_acls[0].albs.append(lb["LoadBalancerArn"])
         assert len(wafv2.web_acls) == 1
diff --git a/tests/providers/aws/services/wafv2/wafv2_webacl_logging_enabled/wafv2_webacl_logging_enabled_test.py b/tests/providers/aws/services/wafv2/wafv2_webacl_logging_enabled/wafv2_webacl_logging_enabled_test.py
index 8e782fcbb3a..1f557324c73 100644
--- a/tests/providers/aws/services/wafv2/wafv2_webacl_logging_enabled/wafv2_webacl_logging_enabled_test.py
+++ b/tests/providers/aws/services/wafv2/wafv2_webacl_logging_enabled/wafv2_webacl_logging_enabled_test.py
@@ -2,12 +2,14 @@
 from uuid import uuid4
 
 from prowler.providers.aws.services.wafv2.wafv2_service import WebAclv2
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+)
 
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
 waf_id = str(uuid4())
 waf_name = "waf-example"
-waf_arn = f"arn:aws:wafv2:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:regional/webacl/{waf_name}/{waf_id}"
+waf_arn = f"arn:aws:wafv2:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:regional/webacl/{waf_name}/{waf_id}"
 
 
 class Test_wafv2_webacl_logging_enabled:
@@ -39,7 +41,7 @@ def test_wafv2_wb_acl_with_logging(self):
                 name=waf_name,
                 id=waf_id,
                 albs=[],
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 logging_enabled=True,
             )
         )
@@ -64,7 +66,7 @@ def test_wafv2_wb_acl_with_logging(self):
             )
             assert result[0].resource_id == waf_id
             assert result[0].resource_arn == waf_arn
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
     def test_wafv2_wb_acl_without_logging(self):
         wafv2_client = mock.MagicMock
@@ -76,7 +78,7 @@ def test_wafv2_wb_acl_without_logging(self):
                 name=waf_name,
                 id=waf_id,
                 albs=[],
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 logging_enabled=False,
             )
         )
@@ -101,4 +103,4 @@ def test_wafv2_wb_acl_without_logging(self):
             )
             assert result[0].resource_id == waf_id
             assert result[0].resource_arn == waf_arn
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
diff --git a/tests/providers/aws/services/wellarchitected/wellarchitected_service_test.py b/tests/providers/aws/services/wellarchitected/wellarchitected_service_test.py
index 345a937b783..8a32598aaa0 100644
--- a/tests/providers/aws/services/wellarchitected/wellarchitected_service_test.py
+++ b/tests/providers/aws/services/wellarchitected/wellarchitected_service_test.py
@@ -2,17 +2,15 @@
 from uuid import uuid4
 
 import botocore
-from boto3 import session
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.wellarchitected.wellarchitected_service import (
     WellArchitected,
 )
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "eu-west-1"
-
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    set_mocked_aws_audit_info,
+)
 
 workload_id = str(uuid4())
 
@@ -25,7 +23,7 @@ def mock_make_api_call(self, operation_name, kwarg):
             "WorkloadSummaries": [
                 {
                     "WorkloadId": workload_id,
-                    "WorkloadArn": f"arn:aws:wellarchitected:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:workload/{workload_id}",
+                    "WorkloadArn": f"arn:aws:wellarchitected:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:workload/{workload_id}",
                     "WorkloadName": "test",
                     "Owner": AWS_ACCOUNT_NUMBER,
                     "UpdatedAt": "2023-06-07T15:40:24+02:00",
@@ -42,10 +40,12 @@ def mock_make_api_call(self, operation_name, kwarg):
     return make_api_call(self, operation_name, kwarg)
 
 
-def mock_generate_regional_clients(service, audit_info, _):
-    regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
-    regional_client.region = AWS_REGION
-    return {AWS_REGION: regional_client}
+def mock_generate_regional_clients(service, audit_info):
+    regional_client = audit_info.audit_session.client(
+        service, region_name=AWS_REGION_EU_WEST_1
+    )
+    regional_client.region = AWS_REGION_EU_WEST_1
+    return {AWS_REGION_EU_WEST_1: regional_client}
 
 
 @patch("botocore.client.BaseClient._make_api_call", new=mock_make_api_call)
@@ -54,68 +54,37 @@ def mock_generate_regional_clients(service, audit_info, _):
     new=mock_generate_regional_clients,
 )
 class Test_WellArchitected_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test WellArchitected Service
     def test_service(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
         wellarchitected = WellArchitected(audit_info)
         assert wellarchitected.service == "wellarchitected"
 
     # Test WellArchitected client
     def test_client(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
         wellarchitected = WellArchitected(audit_info)
         for reg_client in wellarchitected.regional_clients.values():
             assert reg_client.__class__.__name__ == "WellArchitected"
 
     # Test WellArchitected session
     def test__get_session__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
         wellarchitected = WellArchitected(audit_info)
         assert wellarchitected.session.__class__.__name__ == "Session"
 
     # Test WellArchitected list workloads
     def test__list_workloads__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
         wellarchitected = WellArchitected(audit_info)
         assert len(wellarchitected.workloads) == 1
         assert wellarchitected.workloads[0].id == workload_id
         assert (
             wellarchitected.workloads[0].arn
-            == f"arn:aws:wellarchitected:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:workload/{workload_id}"
+            == f"arn:aws:wellarchitected:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:workload/{workload_id}"
         )
         assert wellarchitected.workloads[0].name == "test"
-        assert wellarchitected.workloads[0].region == AWS_REGION
+        assert wellarchitected.workloads[0].region == AWS_REGION_EU_WEST_1
         assert wellarchitected.workloads[0].tags == [
             {"Key": "test", "Value": "test"},
         ]
diff --git a/tests/providers/aws/services/wellarchitected/wellarchitected_workload_no_high_or_medium_risks/wellarchitected_workload_no_high_or_medium_risks_test.py b/tests/providers/aws/services/wellarchitected/wellarchitected_workload_no_high_or_medium_risks/wellarchitected_workload_no_high_or_medium_risks_test.py
index 9d6cd2f246d..99e0ce765f6 100644
--- a/tests/providers/aws/services/wellarchitected/wellarchitected_workload_no_high_or_medium_risks/wellarchitected_workload_no_high_or_medium_risks_test.py
+++ b/tests/providers/aws/services/wellarchitected/wellarchitected_workload_no_high_or_medium_risks/wellarchitected_workload_no_high_or_medium_risks_test.py
@@ -5,9 +5,10 @@
 from prowler.providers.aws.services.wellarchitected.wellarchitected_service import (
     Workload,
 )
-
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+)
 
 workload_id = str(uuid4())
 
@@ -37,12 +38,12 @@ def test_wellarchitected_no_risks(self):
         wellarchitected_client.workloads.append(
             Workload(
                 id=workload_id,
-                arn=f"arn:aws:wellarchitected:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:workload/{workload_id}",
+                arn=f"arn:aws:wellarchitected:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:workload/{workload_id}",
                 name="test",
                 lenses=["wellarchitected", "serverless", "softwareasaservice"],
                 improvement_status="NOT_APPLICABLE",
                 risks={},
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
             )
         )
         with mock.patch(
@@ -66,7 +67,7 @@ def test_wellarchitected_no_risks(self):
             assert result[0].resource_id == workload_id
             assert (
                 result[0].resource_arn
-                == f"arn:aws:wellarchitected:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:workload/{workload_id}"
+                == f"arn:aws:wellarchitected:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:workload/{workload_id}"
             )
 
     def test_wellarchitected_no_high_medium_risks(self):
@@ -75,7 +76,7 @@ def test_wellarchitected_no_high_medium_risks(self):
         wellarchitected_client.workloads.append(
             Workload(
                 id=workload_id,
-                arn=f"arn:aws:wellarchitected:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:workload/{workload_id}",
+                arn=f"arn:aws:wellarchitected:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:workload/{workload_id}",
                 name="test",
                 lenses=["wellarchitected", "serverless", "softwareasaservice"],
                 improvement_status="NOT_APPLICABLE",
@@ -83,7 +84,7 @@ def test_wellarchitected_no_high_medium_risks(self):
                     "UNANSWERED": 56,
                     "NOT_APPLICABLE": 4,
                 },
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
             )
         )
         with mock.patch(
@@ -107,7 +108,7 @@ def test_wellarchitected_no_high_medium_risks(self):
             assert result[0].resource_id == workload_id
             assert (
                 result[0].resource_arn
-                == f"arn:aws:wellarchitected:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:workload/{workload_id}"
+                == f"arn:aws:wellarchitected:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:workload/{workload_id}"
             )
 
     def test_wellarchitected_with_high_medium_risks(self):
@@ -116,7 +117,7 @@ def test_wellarchitected_with_high_medium_risks(self):
         wellarchitected_client.workloads.append(
             Workload(
                 id=workload_id,
-                arn=f"arn:aws:wellarchitected:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:workload/{workload_id}",
+                arn=f"arn:aws:wellarchitected:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:workload/{workload_id}",
                 name="test",
                 lenses=["wellarchitected", "serverless", "softwareasaservice"],
                 improvement_status="NOT_APPLICABLE",
@@ -126,7 +127,7 @@ def test_wellarchitected_with_high_medium_risks(self):
                     "HIGH": 10,
                     "MEDIUM": 20,
                 },
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
             )
         )
         with mock.patch(
@@ -150,5 +151,5 @@ def test_wellarchitected_with_high_medium_risks(self):
             assert result[0].resource_id == workload_id
             assert (
                 result[0].resource_arn
-                == f"arn:aws:wellarchitected:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:workload/{workload_id}"
+                == f"arn:aws:wellarchitected:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:workload/{workload_id}"
             )
diff --git a/tests/providers/aws/services/workspaces/workspaces_service_test.py b/tests/providers/aws/services/workspaces/workspaces_service_test.py
index 347d18ffdcb..4b66ad908dd 100644
--- a/tests/providers/aws/services/workspaces/workspaces_service_test.py
+++ b/tests/providers/aws/services/workspaces/workspaces_service_test.py
@@ -2,15 +2,12 @@
 from uuid import uuid4
 
 import botocore
-from boto3 import session
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.workspaces.workspaces_service import WorkSpaces
-from prowler.providers.common.models import Audit_Metadata
-
-AWS_ACCOUNT_NUMBER = "123456789012"
-AWS_REGION = "eu-west-1"
-
+from tests.providers.aws.audit_info_utils import (
+    AWS_REGION_EU_WEST_1,
+    set_mocked_aws_audit_info,
+)
 
 workspace_id = str(uuid4())
 
@@ -38,10 +35,12 @@ def mock_make_api_call(self, operation_name, kwarg):
     return make_api_call(self, operation_name, kwarg)
 
 
-def mock_generate_regional_clients(service, audit_info, _):
-    regional_client = audit_info.audit_session.client(service, region_name=AWS_REGION)
-    regional_client.region = AWS_REGION
-    return {AWS_REGION: regional_client}
+def mock_generate_regional_clients(service, audit_info):
+    regional_client = audit_info.audit_session.client(
+        service, region_name=AWS_REGION_EU_WEST_1
+    )
+    regional_client.region = AWS_REGION_EU_WEST_1
+    return {AWS_REGION_EU_WEST_1: regional_client}
 
 
 @patch("botocore.client.BaseClient._make_api_call", new=mock_make_api_call)
@@ -50,63 +49,32 @@ def mock_generate_regional_clients(service, audit_info, _):
     new=mock_generate_regional_clients,
 )
 class Test_WorkSpaces_Service:
-    # Mocked Audit Info
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=None,
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-        return audit_info
-
     # Test WorkSpaces Service
     def test_service(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
         workspaces = WorkSpaces(audit_info)
         assert workspaces.service == "workspaces"
 
     # Test WorkSpaces client
     def test_client(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
         workspaces = WorkSpaces(audit_info)
         for reg_client in workspaces.regional_clients.values():
             assert reg_client.__class__.__name__ == "WorkSpaces"
 
     # Test WorkSpaces session
     def test__get_session__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
         workspaces = WorkSpaces(audit_info)
         assert workspaces.session.__class__.__name__ == "Session"
 
     # Test WorkSpaces describe workspaces
     def test__describe_workspaces__(self):
-        audit_info = self.set_mocked_audit_info()
+        audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
         workspaces = WorkSpaces(audit_info)
         assert len(workspaces.workspaces) == 1
         assert workspaces.workspaces[0].id == workspace_id
-        assert workspaces.workspaces[0].region == AWS_REGION
+        assert workspaces.workspaces[0].region == AWS_REGION_EU_WEST_1
         assert workspaces.workspaces[0].tags == [
             {"Key": "test", "Value": "test"},
         ]
diff --git a/tests/providers/aws/services/workspaces/workspaces_volume_encryption_enabled/workspaces_volume_encryption_enabled_test.py b/tests/providers/aws/services/workspaces/workspaces_volume_encryption_enabled/workspaces_volume_encryption_enabled_test.py
index d92d40db94f..5ae74c3ff5e 100644
--- a/tests/providers/aws/services/workspaces/workspaces_volume_encryption_enabled/workspaces_volume_encryption_enabled_test.py
+++ b/tests/providers/aws/services/workspaces/workspaces_volume_encryption_enabled/workspaces_volume_encryption_enabled_test.py
@@ -3,13 +3,13 @@
 from uuid import uuid4
 
 from prowler.providers.aws.services.workspaces.workspaces_service import WorkSpace
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+)
 
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
 WORKSPACE_ID = str(uuid4())
-WORKSPACE_ARN = (
-    f"arn:aws:workspaces:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:workspace/{WORKSPACE_ID}"
-)
+WORKSPACE_ARN = f"arn:aws:workspaces:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:workspace/{WORKSPACE_ID}"
 
 
 class Test_workspaces_volume_encryption_enabled:
@@ -38,7 +38,7 @@ def test_workspaces_encrypted(self):
             WorkSpace(
                 id=WORKSPACE_ID,
                 arn=WORKSPACE_ARN,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 user_volume_encryption_enabled=True,
                 root_volume_encryption_enabled=True,
                 subnet_id="subnet-12345678",
@@ -64,7 +64,7 @@ def test_workspaces_encrypted(self):
             )
             assert result[0].resource_id == WORKSPACE_ID
             assert result[0].resource_arn == WORKSPACE_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
     def test_workspaces_user_not_encrypted(self):
         workspaces_client = mock.MagicMock
@@ -73,7 +73,7 @@ def test_workspaces_user_not_encrypted(self):
             WorkSpace(
                 id=WORKSPACE_ID,
                 arn=WORKSPACE_ARN,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 user_volume_encryption_enabled=False,
                 root_volume_encryption_enabled=True,
                 subnet_id="subnet-12345678",
@@ -97,7 +97,7 @@ def test_workspaces_user_not_encrypted(self):
             assert search("user unencrypted volumes", result[0].status_extended)
             assert result[0].resource_id == WORKSPACE_ID
             assert result[0].resource_arn == WORKSPACE_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
     def test_workspaces_root_not_encrypted(self):
         workspaces_client = mock.MagicMock
@@ -106,7 +106,7 @@ def test_workspaces_root_not_encrypted(self):
             WorkSpace(
                 id=WORKSPACE_ID,
                 arn=WORKSPACE_ARN,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 user_volume_encryption_enabled=True,
                 root_volume_encryption_enabled=False,
                 subnet_id="subnet-12345678",
@@ -130,7 +130,7 @@ def test_workspaces_root_not_encrypted(self):
             assert search("root unencrypted volumes", result[0].status_extended)
             assert result[0].resource_id == WORKSPACE_ID
             assert result[0].resource_arn == WORKSPACE_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
 
     def test_workspaces_user_and_root_not_encrypted(self):
         workspaces_client = mock.MagicMock
@@ -139,7 +139,7 @@ def test_workspaces_user_and_root_not_encrypted(self):
             WorkSpace(
                 id=WORKSPACE_ID,
                 arn=WORKSPACE_ARN,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 user_volume_encryption_enabled=False,
                 root_volume_encryption_enabled=False,
                 subnet_id="subnet-12345678",
@@ -165,4 +165,4 @@ def test_workspaces_user_and_root_not_encrypted(self):
             )
             assert result[0].resource_id == WORKSPACE_ID
             assert result[0].resource_arn == WORKSPACE_ARN
-            assert result[0].region == AWS_REGION
+            assert result[0].region == AWS_REGION_EU_WEST_1
diff --git a/tests/providers/aws/services/workspaces/workspaces_vpc_2private_1public_subnets_nat/workspaces_vpc_2private_1public_subnets_nat_test.py b/tests/providers/aws/services/workspaces/workspaces_vpc_2private_1public_subnets_nat/workspaces_vpc_2private_1public_subnets_nat_test.py
index 4633c500b5f..55522532c93 100644
--- a/tests/providers/aws/services/workspaces/workspaces_vpc_2private_1public_subnets_nat/workspaces_vpc_2private_1public_subnets_nat_test.py
+++ b/tests/providers/aws/services/workspaces/workspaces_vpc_2private_1public_subnets_nat/workspaces_vpc_2private_1public_subnets_nat_test.py
@@ -1,54 +1,22 @@
 from unittest import mock
 from uuid import uuid4
 
-from boto3 import client, session
-from moto import mock_ec2
+from boto3 import client
+from moto import mock_aws
 
-from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info
 from prowler.providers.aws.services.vpc.vpc_service import VPC
 from prowler.providers.aws.services.workspaces.workspaces_service import WorkSpace
-from prowler.providers.common.models import Audit_Metadata
+from tests.providers.aws.audit_info_utils import (
+    AWS_ACCOUNT_NUMBER,
+    AWS_REGION_EU_WEST_1,
+    set_mocked_aws_audit_info,
+)
 
-AWS_REGION = "eu-west-1"
-AWS_ACCOUNT_NUMBER = "123456789012"
 WORKSPACE_ID = str(uuid4())
-WORKSPACE_ARN = (
-    f"arn:aws:workspaces:{AWS_REGION}:{AWS_ACCOUNT_NUMBER}:workspace/{WORKSPACE_ID}"
-)
+WORKSPACE_ARN = f"arn:aws:workspaces:{AWS_REGION_EU_WEST_1}:{AWS_ACCOUNT_NUMBER}:workspace/{WORKSPACE_ID}"
 
 
 class Test_workspaces_vpc_2private_1public_subnets_nat:
-    def set_mocked_audit_info(self):
-        audit_info = AWS_Audit_Info(
-            session_config=None,
-            original_session=None,
-            audit_session=session.Session(
-                profile_name=None,
-                botocore_session=None,
-            ),
-            audited_account=AWS_ACCOUNT_NUMBER,
-            audited_account_arn=f"arn:aws:iam::{AWS_ACCOUNT_NUMBER}:root",
-            audited_user_id=None,
-            audited_partition="aws",
-            audited_identity_arn=None,
-            profile=None,
-            profile_region=None,
-            credentials=None,
-            assumed_role_info=None,
-            audited_regions=["us-east-1", "eu-west-1"],
-            organizations_metadata=None,
-            audit_resources=None,
-            mfa_enabled=False,
-            audit_metadata=Audit_Metadata(
-                services_scanned=0,
-                expected_checks=[],
-                completed_checks=0,
-                audit_progress=0,
-            ),
-        )
-
-        return audit_info
-
     def test_no_workspaces(self):
         workspaces_client = mock.MagicMock
         workspaces_client.workspaces = []
@@ -78,13 +46,13 @@ def test_workspaces_no_subnet(self):
             WorkSpace(
                 id=WORKSPACE_ID,
                 arn=WORKSPACE_ARN,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 user_volume_encryption_enabled=True,
                 root_volume_encryption_enabled=True,
             )
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -112,12 +80,12 @@ def test_workspaces_no_subnet(self):
                     )
                     assert result[0].resource_id == WORKSPACE_ID
                     assert result[0].resource_arn == WORKSPACE_ARN
-                    assert result[0].region == AWS_REGION
+                    assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_ec2
+    @mock_aws
     def test_workspaces_vpc_one_private_subnet(self):
         # EC2 Client
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_EU_WEST_1)
         vpc = ec2_client.create_vpc(
             CidrBlock="172.28.7.0/24", InstanceTenancy="default"
         )
@@ -125,7 +93,7 @@ def test_workspaces_vpc_one_private_subnet(self):
         subnet_private = ec2_client.create_subnet(
             VpcId=vpc["Vpc"]["VpcId"],
             CidrBlock="172.28.7.0/26",
-            AvailabilityZone=f"{AWS_REGION}a",
+            AvailabilityZone=f"{AWS_REGION_EU_WEST_1}a",
         )
         route_table_private = ec2_client.create_route_table(
             VpcId=vpc["Vpc"]["VpcId"],
@@ -145,14 +113,14 @@ def test_workspaces_vpc_one_private_subnet(self):
             WorkSpace(
                 id=WORKSPACE_ID,
                 arn=WORKSPACE_ARN,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 user_volume_encryption_enabled=True,
                 root_volume_encryption_enabled=True,
                 subnet_id=subnet_private["Subnet"]["SubnetId"],
             )
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -180,12 +148,12 @@ def test_workspaces_vpc_one_private_subnet(self):
                     )
                     assert result[0].resource_id == WORKSPACE_ID
                     assert result[0].resource_arn == WORKSPACE_ARN
-                    assert result[0].region == AWS_REGION
+                    assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_ec2
+    @mock_aws
     def test_workspaces_vpc_two_private_subnet(self):
         # EC2 Client
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_EU_WEST_1)
         vpc = ec2_client.create_vpc(
             CidrBlock="172.28.7.0/24", InstanceTenancy="default"
         )
@@ -193,7 +161,7 @@ def test_workspaces_vpc_two_private_subnet(self):
         subnet_private = ec2_client.create_subnet(
             VpcId=vpc["Vpc"]["VpcId"],
             CidrBlock="172.28.7.0/26",
-            AvailabilityZone=f"{AWS_REGION}a",
+            AvailabilityZone=f"{AWS_REGION_EU_WEST_1}a",
         )
         route_table_private = ec2_client.create_route_table(
             VpcId=vpc["Vpc"]["VpcId"],
@@ -210,7 +178,7 @@ def test_workspaces_vpc_two_private_subnet(self):
         subnet_private_2 = ec2_client.create_subnet(
             VpcId=vpc["Vpc"]["VpcId"],
             CidrBlock="172.28.7.64/26",
-            AvailabilityZone=f"{AWS_REGION}a",
+            AvailabilityZone=f"{AWS_REGION_EU_WEST_1}a",
         )
         route_table_private_2 = ec2_client.create_route_table(
             VpcId=vpc["Vpc"]["VpcId"],
@@ -230,14 +198,14 @@ def test_workspaces_vpc_two_private_subnet(self):
             WorkSpace(
                 id=WORKSPACE_ID,
                 arn=WORKSPACE_ARN,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 user_volume_encryption_enabled=True,
                 root_volume_encryption_enabled=True,
                 subnet_id=subnet_private["Subnet"]["SubnetId"],
             )
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -265,12 +233,12 @@ def test_workspaces_vpc_two_private_subnet(self):
                     )
                     assert result[0].resource_id == WORKSPACE_ID
                     assert result[0].resource_arn == WORKSPACE_ARN
-                    assert result[0].region == AWS_REGION
+                    assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_ec2
+    @mock_aws
     def test_workspaces_vpc_two_private_subnet_one_public(self):
         # EC2 Client
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_EU_WEST_1)
         vpc = ec2_client.create_vpc(
             CidrBlock="172.28.7.0/24", InstanceTenancy="default"
         )
@@ -278,7 +246,7 @@ def test_workspaces_vpc_two_private_subnet_one_public(self):
         subnet_private = ec2_client.create_subnet(
             VpcId=vpc["Vpc"]["VpcId"],
             CidrBlock="172.28.7.0/26",
-            AvailabilityZone=f"{AWS_REGION}a",
+            AvailabilityZone=f"{AWS_REGION_EU_WEST_1}a",
         )
         route_table_private = ec2_client.create_route_table(
             VpcId=vpc["Vpc"]["VpcId"],
@@ -295,7 +263,7 @@ def test_workspaces_vpc_two_private_subnet_one_public(self):
         subnet_private_2 = ec2_client.create_subnet(
             VpcId=vpc["Vpc"]["VpcId"],
             CidrBlock="172.28.7.64/26",
-            AvailabilityZone=f"{AWS_REGION}a",
+            AvailabilityZone=f"{AWS_REGION_EU_WEST_1}a",
         )
         route_table_private_2 = ec2_client.create_route_table(
             VpcId=vpc["Vpc"]["VpcId"],
@@ -312,7 +280,7 @@ def test_workspaces_vpc_two_private_subnet_one_public(self):
         subnet_public = ec2_client.create_subnet(
             VpcId=vpc["Vpc"]["VpcId"],
             CidrBlock="172.28.7.192/26",
-            AvailabilityZone=f"{AWS_REGION}a",
+            AvailabilityZone=f"{AWS_REGION_EU_WEST_1}a",
         )
         route_table_public = ec2_client.create_route_table(
             VpcId=vpc["Vpc"]["VpcId"],
@@ -334,14 +302,14 @@ def test_workspaces_vpc_two_private_subnet_one_public(self):
             WorkSpace(
                 id=WORKSPACE_ID,
                 arn=WORKSPACE_ARN,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 user_volume_encryption_enabled=True,
                 root_volume_encryption_enabled=True,
                 subnet_id=subnet_private["Subnet"]["SubnetId"],
             )
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -369,12 +337,12 @@ def test_workspaces_vpc_two_private_subnet_one_public(self):
                     )
                     assert result[0].resource_id == WORKSPACE_ID
                     assert result[0].resource_arn == WORKSPACE_ARN
-                    assert result[0].region == AWS_REGION
+                    assert result[0].region == AWS_REGION_EU_WEST_1
 
-    @mock_ec2
+    @mock_aws
     def test_workspaces_vpc_two_private_subnet_one_public_and_nat(self):
         # EC2 Client
-        ec2_client = client("ec2", region_name=AWS_REGION)
+        ec2_client = client("ec2", region_name=AWS_REGION_EU_WEST_1)
         vpc = ec2_client.create_vpc(
             CidrBlock="172.28.7.0/24", InstanceTenancy="default"
         )
@@ -382,7 +350,7 @@ def test_workspaces_vpc_two_private_subnet_one_public_and_nat(self):
         subnet_private = ec2_client.create_subnet(
             VpcId=vpc["Vpc"]["VpcId"],
             CidrBlock="172.28.7.0/26",
-            AvailabilityZone=f"{AWS_REGION}a",
+            AvailabilityZone=f"{AWS_REGION_EU_WEST_1}a",
         )
         route_table_private = ec2_client.create_route_table(
             VpcId=vpc["Vpc"]["VpcId"],
@@ -399,7 +367,7 @@ def test_workspaces_vpc_two_private_subnet_one_public_and_nat(self):
         subnet_private_2 = ec2_client.create_subnet(
             VpcId=vpc["Vpc"]["VpcId"],
             CidrBlock="172.28.7.64/26",
-            AvailabilityZone=f"{AWS_REGION}a",
+            AvailabilityZone=f"{AWS_REGION_EU_WEST_1}a",
         )
         route_table_private_2 = ec2_client.create_route_table(
             VpcId=vpc["Vpc"]["VpcId"],
@@ -424,7 +392,7 @@ def test_workspaces_vpc_two_private_subnet_one_public_and_nat(self):
         subnet_public = ec2_client.create_subnet(
             VpcId=vpc["Vpc"]["VpcId"],
             CidrBlock="172.28.7.192/26",
-            AvailabilityZone=f"{AWS_REGION}a",
+            AvailabilityZone=f"{AWS_REGION_EU_WEST_1}a",
         )
         route_table_public = ec2_client.create_route_table(
             VpcId=vpc["Vpc"]["VpcId"],
@@ -446,14 +414,14 @@ def test_workspaces_vpc_two_private_subnet_one_public_and_nat(self):
             WorkSpace(
                 id=WORKSPACE_ID,
                 arn=WORKSPACE_ARN,
-                region=AWS_REGION,
+                region=AWS_REGION_EU_WEST_1,
                 user_volume_encryption_enabled=True,
                 root_volume_encryption_enabled=True,
                 subnet_id=subnet_private["Subnet"]["SubnetId"],
             )
         )
 
-        current_audit_info = self.set_mocked_audit_info()
+        current_audit_info = set_mocked_aws_audit_info([AWS_REGION_EU_WEST_1])
 
         with mock.patch(
             "prowler.providers.aws.lib.audit_info.audit_info.current_audit_info",
@@ -481,4 +449,4 @@ def test_workspaces_vpc_two_private_subnet_one_public_and_nat(self):
                     )
                     assert result[0].resource_id == WORKSPACE_ID
                     assert result[0].resource_arn == WORKSPACE_ARN
-                    assert result[0].region == AWS_REGION
+                    assert result[0].region == AWS_REGION_EU_WEST_1
diff --git a/tests/providers/azure/azure_fixtures.py b/tests/providers/azure/azure_fixtures.py
new file mode 100644
index 00000000000..55741defff3
--- /dev/null
+++ b/tests/providers/azure/azure_fixtures.py
@@ -0,0 +1,43 @@
+from uuid import uuid4
+
+from azure.identity import DefaultAzureCredential
+
+from prowler.providers.azure.lib.audit_info.models import (
+    Azure_Audit_Info,
+    Azure_Identity_Info,
+    Azure_Region_Config,
+)
+
+AZURE_SUBSCRIPTION = str(uuid4())
+
+# Azure Identity
+IDENTITY_ID = "00000000-0000-0000-0000-000000000000"
+IDENTITY_TYPE = "Service Principal"
+TENANT_IDS = ["00000000-0000-0000-0000-000000000000"]
+DOMAIN = "user.onmicrosoft.com"
+
+
+# Mocked Azure Audit Info
+def set_mocked_azure_audit_info(
+    credentials: DefaultAzureCredential = DefaultAzureCredential(),
+    identity: Azure_Identity_Info = Azure_Identity_Info(
+        identity_id=IDENTITY_ID,
+        identity_type=IDENTITY_TYPE,
+        tenant_ids=TENANT_IDS,
+        domain=DOMAIN,
+        subscriptions={AZURE_SUBSCRIPTION: "id_subscription"},
+    ),
+    audit_config: dict = None,
+    azure_region_config: Azure_Region_Config = Azure_Region_Config(),
+    locations: list = None,
+):
+    audit_info = Azure_Audit_Info(
+        credentials=credentials,
+        identity=identity,
+        audit_metadata=None,
+        audit_resources=None,
+        audit_config=audit_config,
+        azure_region_config=azure_region_config,
+        locations=locations,
+    )
+    return audit_info
diff --git a/tests/providers/azure/services/app/app_client_certificates_on/app_client_certificates_on_test.py b/tests/providers/azure/services/app/app_client_certificates_on/app_client_certificates_on_test.py
new file mode 100644
index 00000000000..d2c5537b023
--- /dev/null
+++ b/tests/providers/azure/services/app/app_client_certificates_on/app_client_certificates_on_test.py
@@ -0,0 +1,111 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.app.app_service import WebApp
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_app_client_certificates_on:
+    def test_app_no_subscriptions(self):
+        app_client = mock.MagicMock
+        app_client.apps = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_client_certificates_on.app_client_certificates_on.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_client_certificates_on.app_client_certificates_on import (
+                app_client_certificates_on,
+            )
+
+            check = app_client_certificates_on()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_app_subscription_empty(self):
+        app_client = mock.MagicMock
+        app_client.apps = {AZURE_SUBSCRIPTION: {}}
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_client_certificates_on.app_client_certificates_on.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_client_certificates_on.app_client_certificates_on import (
+                app_client_certificates_on,
+            )
+
+            check = app_client_certificates_on()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_app_client_certificates_on(self):
+        resource_id = f"/subscriptions/{uuid4()}"
+        app_client = mock.MagicMock
+        app_client.apps = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": WebApp(
+                    resource_id=resource_id,
+                    auth_enabled=True,
+                    configurations=None,
+                    client_cert_mode="Required",
+                    https_only=False,
+                    identity=None,
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_client_certificates_on.app_client_certificates_on.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_client_certificates_on.app_client_certificates_on import (
+                app_client_certificates_on,
+            )
+
+            check = app_client_certificates_on()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Clients are required to present a certificate for app 'app_id-1' in subscription '{AZURE_SUBSCRIPTION}'."
+            )
+            assert result[0].resource_id == resource_id
+            assert result[0].resource_name == "app_id-1"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+
+    def test_app_client_certificates_off(self):
+        resource_id = f"/subscriptions/{uuid4()}"
+        app_client = mock.MagicMock
+        app_client.apps = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": WebApp(
+                    resource_id=resource_id,
+                    auth_enabled=True,
+                    configurations=None,
+                    client_cert_mode="Ignore",
+                    https_only=False,
+                    identity=None,
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_client_certificates_on.app_client_certificates_on.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_client_certificates_on.app_client_certificates_on import (
+                app_client_certificates_on,
+            )
+
+            check = app_client_certificates_on()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Clients are not required to present a certificate for app 'app_id-1' in subscription '{AZURE_SUBSCRIPTION}'."
+            )
+            assert result[0].resource_id == resource_id
+            assert result[0].resource_name == "app_id-1"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
diff --git a/tests/providers/azure/services/app/app_ensure_auth_is_set_up/app_ensure_auth_is_set_up_test.py b/tests/providers/azure/services/app/app_ensure_auth_is_set_up/app_ensure_auth_is_set_up_test.py
new file mode 100644
index 00000000000..61b77e03cb9
--- /dev/null
+++ b/tests/providers/azure/services/app/app_ensure_auth_is_set_up/app_ensure_auth_is_set_up_test.py
@@ -0,0 +1,111 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.app.app_service import WebApp
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_app_ensure_auth_is_set_up:
+    def test_app_no_subscriptions(self):
+        app_client = mock.MagicMock
+        app_client.apps = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_auth_is_set_up.app_ensure_auth_is_set_up.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_auth_is_set_up.app_ensure_auth_is_set_up import (
+                app_ensure_auth_is_set_up,
+            )
+
+            check = app_ensure_auth_is_set_up()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_app_subscription_empty(self):
+        app_client = mock.MagicMock
+        app_client.apps = {AZURE_SUBSCRIPTION: {}}
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_auth_is_set_up.app_ensure_auth_is_set_up.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_auth_is_set_up.app_ensure_auth_is_set_up import (
+                app_ensure_auth_is_set_up,
+            )
+
+            check = app_ensure_auth_is_set_up()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_app_auth_enabled(self):
+        resource_id = f"/subscriptions/{uuid4()}"
+        app_client = mock.MagicMock
+        app_client.apps = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": WebApp(
+                    resource_id=resource_id,
+                    auth_enabled=True,
+                    configurations=mock.MagicMock(),
+                    client_cert_mode="Ignore",
+                    https_only=False,
+                    identity=None,
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_auth_is_set_up.app_ensure_auth_is_set_up.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_auth_is_set_up.app_ensure_auth_is_set_up import (
+                app_ensure_auth_is_set_up,
+            )
+
+            check = app_ensure_auth_is_set_up()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Authentication is set up for app 'app_id-1' in subscription '{AZURE_SUBSCRIPTION}'."
+            )
+            assert result[0].resource_name == "app_id-1"
+            assert result[0].resource_id == resource_id
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+
+    def test_app_auth_disabled(self):
+        resource_id = f"/subscriptions/{uuid4()}"
+        app_client = mock.MagicMock
+        app_client.apps = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": WebApp(
+                    resource_id=resource_id,
+                    auth_enabled=False,
+                    configurations=mock.MagicMock(),
+                    client_cert_mode="Ignore",
+                    https_only=False,
+                    identity=None,
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_auth_is_set_up.app_ensure_auth_is_set_up.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_auth_is_set_up.app_ensure_auth_is_set_up import (
+                app_ensure_auth_is_set_up,
+            )
+
+            check = app_ensure_auth_is_set_up()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Authentication is not set up for app 'app_id-1' in subscription '{AZURE_SUBSCRIPTION}'."
+            )
+            assert result[0].resource_name == "app_id-1"
+            assert result[0].resource_id == resource_id
+            assert result[0].subscription == AZURE_SUBSCRIPTION
diff --git a/tests/providers/azure/services/app/app_ensure_http_is_redirected_to_https/app_ensure_http_is_redirected_to_https_test.py b/tests/providers/azure/services/app/app_ensure_http_is_redirected_to_https/app_ensure_http_is_redirected_to_https_test.py
new file mode 100644
index 00000000000..cba1a49a7d2
--- /dev/null
+++ b/tests/providers/azure/services/app/app_ensure_http_is_redirected_to_https/app_ensure_http_is_redirected_to_https_test.py
@@ -0,0 +1,111 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.app.app_service import WebApp
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_app_ensure_http_is_redirected_to_https:
+    def test_app_no_subscriptions(self):
+        app_client = mock.MagicMock
+        app_client.apps = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_http_is_redirected_to_https.app_ensure_http_is_redirected_to_https.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_http_is_redirected_to_https.app_ensure_http_is_redirected_to_https import (
+                app_ensure_http_is_redirected_to_https,
+            )
+
+            check = app_ensure_http_is_redirected_to_https()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_app_subscriptions_empty_empty(self):
+        app_client = mock.MagicMock
+        app_client.apps = {AZURE_SUBSCRIPTION: {}}
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_http_is_redirected_to_https.app_ensure_http_is_redirected_to_https.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_http_is_redirected_to_https.app_ensure_http_is_redirected_to_https import (
+                app_ensure_http_is_redirected_to_https,
+            )
+
+            check = app_ensure_http_is_redirected_to_https()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_app_http_to_https(self):
+        resource_id = f"/subscriptions/{uuid4()}"
+        app_client = mock.MagicMock
+        app_client.apps = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": WebApp(
+                    resource_id=resource_id,
+                    auth_enabled=True,
+                    configurations=mock.MagicMock(),
+                    client_cert_mode="Ignore",
+                    https_only=False,
+                    identity=None,
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_http_is_redirected_to_https.app_ensure_http_is_redirected_to_https.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_http_is_redirected_to_https.app_ensure_http_is_redirected_to_https import (
+                app_ensure_http_is_redirected_to_https,
+            )
+
+            check = app_ensure_http_is_redirected_to_https()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"HTTP is not redirected to HTTPS for app 'app_id-1' in subscription '{AZURE_SUBSCRIPTION}'."
+            )
+            assert result[0].resource_name == "app_id-1"
+            assert result[0].resource_id == resource_id
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+
+    def test_app_http_to_https_enabled(self):
+        resource_id = f"/subscriptions/{uuid4()}"
+        app_client = mock.MagicMock
+        app_client.apps = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": WebApp(
+                    resource_id=resource_id,
+                    auth_enabled=True,
+                    configurations=mock.MagicMock(),
+                    client_cert_mode="Ignore",
+                    https_only=True,
+                    identity=None,
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_http_is_redirected_to_https.app_ensure_http_is_redirected_to_https.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_http_is_redirected_to_https.app_ensure_http_is_redirected_to_https import (
+                app_ensure_http_is_redirected_to_https,
+            )
+
+            check = app_ensure_http_is_redirected_to_https()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"HTTP is redirected to HTTPS for app 'app_id-1' in subscription '{AZURE_SUBSCRIPTION}'."
+            )
+            assert result[0].resource_name == "app_id-1"
+            assert result[0].resource_id == resource_id
+            assert result[0].subscription == AZURE_SUBSCRIPTION
diff --git a/tests/providers/azure/services/app/app_ensure_java_version_is_latest/app_ensure_java_version_is_latest_test.py b/tests/providers/azure/services/app/app_ensure_java_version_is_latest/app_ensure_java_version_is_latest_test.py
new file mode 100644
index 00000000000..e4f057a0234
--- /dev/null
+++ b/tests/providers/azure/services/app/app_ensure_java_version_is_latest/app_ensure_java_version_is_latest_test.py
@@ -0,0 +1,259 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.app.app_service import WebApp
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_app_ensure_java_version_is_latest:
+    def test_app_no_subscriptions(self):
+        app_client = mock.MagicMock
+        app_client.apps = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_java_version_is_latest.app_ensure_java_version_is_latest.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_java_version_is_latest.app_ensure_java_version_is_latest import (
+                app_ensure_java_version_is_latest,
+            )
+
+            check = app_ensure_java_version_is_latest()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_app_subscriptions_empty(self):
+        app_client = mock.MagicMock
+        app_client.apps = {AZURE_SUBSCRIPTION: {}}
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_java_version_is_latest.app_ensure_java_version_is_latest.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_java_version_is_latest.app_ensure_java_version_is_latest import (
+                app_ensure_java_version_is_latest,
+            )
+
+            check = app_ensure_java_version_is_latest()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_app_configurations_none(self):
+        resource_id = f"/subscriptions/{uuid4()}"
+        app_client = mock.MagicMock
+        app_client.apps = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": WebApp(
+                    resource_id=resource_id,
+                    auth_enabled=True,
+                    configurations=None,
+                    client_cert_mode="Ignore",
+                    https_only=False,
+                    identity=None,
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_java_version_is_latest.app_ensure_java_version_is_latest.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_java_version_is_latest.app_ensure_java_version_is_latest import (
+                app_ensure_java_version_is_latest,
+            )
+
+            check = app_ensure_java_version_is_latest()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_app_linux_java_version_latest(self):
+        resource_id = f"/subscriptions/{uuid4()}"
+        app_client = mock.MagicMock
+        app_client.apps = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": WebApp(
+                    resource_id=resource_id,
+                    auth_enabled=True,
+                    configurations=mock.MagicMock(
+                        linux_fx_version="Tomcat|9.0-java17", java_version=None
+                    ),
+                    client_cert_mode="Ignore",
+                    https_only=False,
+                    identity=None,
+                )
+            }
+        }
+
+        app_client.audit_config = {"java_latest_version": "17"}
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_java_version_is_latest.app_ensure_java_version_is_latest.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_java_version_is_latest.app_ensure_java_version_is_latest import (
+                app_ensure_java_version_is_latest,
+            )
+
+            check = app_ensure_java_version_is_latest()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Java version is set to 'java 17' for app 'app_id-1' in subscription '{AZURE_SUBSCRIPTION}'."
+            )
+            assert result[0].resource_id == resource_id
+            assert result[0].resource_name == "app_id-1"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+
+    def test_app_linux_java_version_not_latest(self):
+        resource_id = f"/subscriptions/{uuid4()}"
+        app_client = mock.MagicMock
+        app_client.apps = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": WebApp(
+                    resource_id=resource_id,
+                    auth_enabled=True,
+                    configurations=mock.MagicMock(
+                        linux_fx_version="Tomcat|9.0-java11", java_version=None
+                    ),
+                    client_cert_mode="Ignore",
+                    https_only=False,
+                    identity=None,
+                )
+            }
+        }
+
+        app_client.audit_config = {"java_latest_version": "17"}
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_java_version_is_latest.app_ensure_java_version_is_latest.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_java_version_is_latest.app_ensure_java_version_is_latest import (
+                app_ensure_java_version_is_latest,
+            )
+
+            check = app_ensure_java_version_is_latest()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Java version is set to 'Tomcat|9.0-java11', but should be set to 'java 17' for app 'app_id-1' in subscription '{AZURE_SUBSCRIPTION}'."
+            )
+            assert result[0].resource_id == resource_id
+            assert result[0].resource_name == "app_id-1"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+
+    def test_app_windows_java_version_latest(self):
+        resource_id = f"/subscriptions/{uuid4()}"
+        app_client = mock.MagicMock
+        app_client.apps = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": WebApp(
+                    resource_id=resource_id,
+                    auth_enabled=True,
+                    configurations=mock.MagicMock(
+                        linux_fx_version="", java_version="17"
+                    ),
+                    client_cert_mode="Ignore",
+                    https_only=False,
+                    identity=None,
+                )
+            }
+        }
+
+        app_client.audit_config = {"java_latest_version": "17"}
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_java_version_is_latest.app_ensure_java_version_is_latest.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_java_version_is_latest.app_ensure_java_version_is_latest import (
+                app_ensure_java_version_is_latest,
+            )
+
+            check = app_ensure_java_version_is_latest()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Java version is set to 'java 17' for app 'app_id-1' in subscription '{AZURE_SUBSCRIPTION}'."
+            )
+            assert result[0].resource_id == resource_id
+            assert result[0].resource_name == "app_id-1"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+
+    def test_app_windows_java_version_not_latest(self):
+        resource_id = f"/subscriptions/{uuid4()}"
+        app_client = mock.MagicMock
+        app_client.apps = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": WebApp(
+                    resource_id=resource_id,
+                    auth_enabled=True,
+                    configurations=mock.MagicMock(
+                        linux_fx_version="", java_version="11"
+                    ),
+                    client_cert_mode="Ignore",
+                    https_only=False,
+                    identity=None,
+                )
+            }
+        }
+
+        app_client.audit_config = {"java_latest_version": "17"}
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_java_version_is_latest.app_ensure_java_version_is_latest.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_java_version_is_latest.app_ensure_java_version_is_latest import (
+                app_ensure_java_version_is_latest,
+            )
+
+            check = app_ensure_java_version_is_latest()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Java version is set to 'java11', but should be set to 'java 17' for app 'app_id-1' in subscription '{AZURE_SUBSCRIPTION}'."
+            )
+            assert result[0].resource_id == resource_id
+            assert result[0].resource_name == "app_id-1"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+
+    def test_app_linux_php_version_latest(self):
+        resource_id = f"/subscriptions/{uuid4()}"
+        app_client = mock.MagicMock
+        app_client.apps = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": WebApp(
+                    resource_id=resource_id,
+                    auth_enabled=True,
+                    configurations=mock.MagicMock(
+                        linux_fx_version="php|8.0", java_version=None
+                    ),
+                    client_cert_mode="Ignore",
+                    https_only=False,
+                    identity=None,
+                )
+            }
+        }
+
+        app_client.audit_config = {"java_latest_version": "17"}
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_java_version_is_latest.app_ensure_java_version_is_latest.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_java_version_is_latest.app_ensure_java_version_is_latest import (
+                app_ensure_java_version_is_latest,
+            )
+
+            check = app_ensure_java_version_is_latest()
+            result = check.execute()
+            assert len(result) == 0
diff --git a/tests/providers/azure/services/app/app_ensure_php_version_is_latest/app_ensure_php_version_is_latest_test.py b/tests/providers/azure/services/app/app_ensure_php_version_is_latest/app_ensure_php_version_is_latest_test.py
new file mode 100644
index 00000000000..b9fd80c7490
--- /dev/null
+++ b/tests/providers/azure/services/app/app_ensure_php_version_is_latest/app_ensure_php_version_is_latest_test.py
@@ -0,0 +1,143 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.app.app_service import WebApp
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_app_ensure_php_version_is_latest:
+    def test_app_no_subscriptions(self):
+        app_client = mock.MagicMock
+        app_client.apps = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_php_version_is_latest.app_ensure_php_version_is_latest.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_php_version_is_latest.app_ensure_php_version_is_latest import (
+                app_ensure_php_version_is_latest,
+            )
+
+            check = app_ensure_php_version_is_latest()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_app_subscription_empty(self):
+        app_client = mock.MagicMock
+        app_client.apps = {AZURE_SUBSCRIPTION: {}}
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_php_version_is_latest.app_ensure_php_version_is_latest.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_php_version_is_latest.app_ensure_php_version_is_latest import (
+                app_ensure_php_version_is_latest,
+            )
+
+            check = app_ensure_php_version_is_latest()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_app_configurations_none(self):
+        resource_id = f"/subscriptions/{uuid4()}"
+        app_client = mock.MagicMock
+        app_client.apps = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": WebApp(
+                    resource_id=resource_id,
+                    auth_enabled=True,
+                    configurations=None,
+                    client_cert_mode="Ignore",
+                    https_only=False,
+                    identity=None,
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_php_version_is_latest.app_ensure_php_version_is_latest.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_php_version_is_latest.app_ensure_php_version_is_latest import (
+                app_ensure_php_version_is_latest,
+            )
+
+            check = app_ensure_php_version_is_latest()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_app_php_version_not_latest(self):
+        resource_id = f"/subscriptions/{uuid4()}"
+        app_client = mock.MagicMock
+        app_client.apps = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": WebApp(
+                    resource_id=resource_id,
+                    auth_enabled=True,
+                    configurations=mock.MagicMock(linux_fx_version="php|8.0"),
+                    client_cert_mode="Ignore",
+                    https_only=False,
+                    identity=None,
+                )
+            }
+        }
+
+        app_client.audit_config = {"php_latest_version": "8.2"}
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_php_version_is_latest.app_ensure_php_version_is_latest.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_php_version_is_latest.app_ensure_php_version_is_latest import (
+                app_ensure_php_version_is_latest,
+            )
+
+            check = app_ensure_php_version_is_latest()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"PHP version is set to 'php|8.0', the latest version that you could use is the '8.2' version, for app 'app_id-1' in subscription '{AZURE_SUBSCRIPTION}'."
+            )
+            assert result[0].resource_id == resource_id
+            assert result[0].resource_name == "app_id-1"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+
+    def test_app_php_version_latest(self):
+        resource_id = f"/subscriptions/{uuid4()}"
+        app_client = mock.MagicMock
+        app_client.apps = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": WebApp(
+                    resource_id=resource_id,
+                    auth_enabled=True,
+                    configurations=mock.MagicMock(linux_fx_version="php|8.2"),
+                    client_cert_mode="Ignore",
+                    https_only=False,
+                    identity=None,
+                )
+            }
+        }
+
+        app_client.audit_config = {"php_latest_version": "8.2"}
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_php_version_is_latest.app_ensure_php_version_is_latest.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_php_version_is_latest.app_ensure_php_version_is_latest import (
+                app_ensure_php_version_is_latest,
+            )
+
+            check = app_ensure_php_version_is_latest()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"PHP version is set to '8.2' for app 'app_id-1' in subscription '{AZURE_SUBSCRIPTION}'."
+            )
+            assert result[0].resource_id == resource_id
+            assert result[0].resource_name == "app_id-1"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
diff --git a/tests/providers/azure/services/app/app_ensure_python_version_is_latest/app_ensure_python_version_is_latest_test.py b/tests/providers/azure/services/app/app_ensure_python_version_is_latest/app_ensure_python_version_is_latest_test.py
new file mode 100644
index 00000000000..8795bacb8ef
--- /dev/null
+++ b/tests/providers/azure/services/app/app_ensure_python_version_is_latest/app_ensure_python_version_is_latest_test.py
@@ -0,0 +1,143 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.app.app_service import WebApp
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_app_ensure_python_version_is_latest:
+    def test_app_no_subscriptions(self):
+        app_client = mock.MagicMock
+        app_client.apps = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_python_version_is_latest.app_ensure_python_version_is_latest.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_python_version_is_latest.app_ensure_python_version_is_latest import (
+                app_ensure_python_version_is_latest,
+            )
+
+            check = app_ensure_python_version_is_latest()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_app_subscriptions_empty(self):
+        app_client = mock.MagicMock
+        app_client.apps = {AZURE_SUBSCRIPTION: {}}
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_python_version_is_latest.app_ensure_python_version_is_latest.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_python_version_is_latest.app_ensure_python_version_is_latest import (
+                app_ensure_python_version_is_latest,
+            )
+
+            check = app_ensure_python_version_is_latest()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_app_configurations_none(self):
+        resource_id = f"/subscriptions/{uuid4()}"
+        app_client = mock.MagicMock
+        app_client.apps = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": WebApp(
+                    resource_id=resource_id,
+                    auth_enabled=True,
+                    configurations=None,
+                    client_cert_mode="Ignore",
+                    https_only=False,
+                    identity=None,
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_python_version_is_latest.app_ensure_python_version_is_latest.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_python_version_is_latest.app_ensure_python_version_is_latest import (
+                app_ensure_python_version_is_latest,
+            )
+
+            check = app_ensure_python_version_is_latest()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_app_python_version_latest(self):
+        resource_id = f"/subscriptions/{uuid4()}"
+        app_client = mock.MagicMock
+        app_client.apps = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": WebApp(
+                    resource_id=resource_id,
+                    auth_enabled=True,
+                    configurations=mock.MagicMock(linux_fx_version="python|3.12"),
+                    client_cert_mode="Ignore",
+                    https_only=False,
+                    identity=None,
+                )
+            }
+        }
+
+        app_client.audit_config = {"python_latest_version": "3.12"}
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_python_version_is_latest.app_ensure_python_version_is_latest.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_python_version_is_latest.app_ensure_python_version_is_latest import (
+                app_ensure_python_version_is_latest,
+            )
+
+            check = app_ensure_python_version_is_latest()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Python version is set to '3.12' for app 'app_id-1' in subscription '{AZURE_SUBSCRIPTION}'."
+            )
+            assert result[0].resource_id == resource_id
+            assert result[0].resource_name == "app_id-1"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+
+    def test_app_python_version_not_latest(self):
+        resource_id = f"/subscriptions/{uuid4()}"
+        app_client = mock.MagicMock
+        app_client.apps = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": WebApp(
+                    resource_id=resource_id,
+                    auth_enabled=True,
+                    configurations=mock.MagicMock(linux_fx_version="python|3.10"),
+                    client_cert_mode="Ignore",
+                    https_only=False,
+                    identity=None,
+                )
+            }
+        }
+
+        app_client.audit_config = {"python_latest_version": "3.12"}
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_python_version_is_latest.app_ensure_python_version_is_latest.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_python_version_is_latest.app_ensure_python_version_is_latest import (
+                app_ensure_python_version_is_latest,
+            )
+
+            check = app_ensure_python_version_is_latest()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Python version is 'python|3.10', the latest version that you could use is the '3.12' version, for app 'app_id-1' in subscription '{AZURE_SUBSCRIPTION}'."
+            )
+            assert result[0].resource_id == resource_id
+            assert result[0].resource_name == "app_id-1"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
diff --git a/tests/providers/azure/services/app/app_ensure_using_http20/app_ensure_using_http20_test.py b/tests/providers/azure/services/app/app_ensure_using_http20/app_ensure_using_http20_test.py
new file mode 100644
index 00000000000..a5a04ec4c50
--- /dev/null
+++ b/tests/providers/azure/services/app/app_ensure_using_http20/app_ensure_using_http20_test.py
@@ -0,0 +1,147 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.app.app_service import WebApp
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_app_ensure_using_http20:
+    def test_app_no_subscriptions(self):
+        app_client = mock.MagicMock
+        app_client.apps = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_using_http20.app_ensure_using_http20.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_using_http20.app_ensure_using_http20 import (
+                app_ensure_using_http20,
+            )
+
+            check = app_ensure_using_http20()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_app_subscription_empty(self):
+        app_client = mock.MagicMock
+        app_client.apps = {AZURE_SUBSCRIPTION: {}}
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_using_http20.app_ensure_using_http20.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_using_http20.app_ensure_using_http20 import (
+                app_ensure_using_http20,
+            )
+
+            check = app_ensure_using_http20()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_app_configurations_none(self):
+        resource_id = f"/subscriptions/{uuid4()}"
+        app_client = mock.MagicMock
+        app_client.apps = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": WebApp(
+                    resource_id=resource_id,
+                    auth_enabled=True,
+                    configurations=None,
+                    client_cert_mode="Ignore",
+                    https_only=False,
+                    identity=None,
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_using_http20.app_ensure_using_http20.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_using_http20.app_ensure_using_http20 import (
+                app_ensure_using_http20,
+            )
+
+            check = app_ensure_using_http20()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"HTTP/2.0 is not enabled for app 'app_id-1' in subscription '{AZURE_SUBSCRIPTION}'."
+            )
+            assert result[0].resource_id == resource_id
+            assert result[0].resource_name == "app_id-1"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+
+    def test_app_http20_enabled(self):
+        resource_id = f"/subscriptions/{uuid4()}"
+        app_client = mock.MagicMock
+        app_client.apps = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": WebApp(
+                    resource_id=resource_id,
+                    auth_enabled=True,
+                    configurations=mock.MagicMock(http20_enabled=True),
+                    client_cert_mode="Ignore",
+                    https_only=False,
+                    identity=None,
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_using_http20.app_ensure_using_http20.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_using_http20.app_ensure_using_http20 import (
+                app_ensure_using_http20,
+            )
+
+            check = app_ensure_using_http20()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"HTTP/2.0 is enabled for app 'app_id-1' in subscription '{AZURE_SUBSCRIPTION}'."
+            )
+            assert result[0].resource_id == resource_id
+            assert result[0].resource_name == "app_id-1"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+
+    def test_app_http20_not_enabled(self):
+        resource_id = f"/subscriptions/{uuid4()}"
+        app_client = mock.MagicMock
+        app_client.apps = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": WebApp(
+                    resource_id=resource_id,
+                    auth_enabled=True,
+                    configurations=mock.MagicMock(http20_enabled=False),
+                    client_cert_mode="Ignore",
+                    https_only=False,
+                    identity=None,
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ensure_using_http20.app_ensure_using_http20.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ensure_using_http20.app_ensure_using_http20 import (
+                app_ensure_using_http20,
+            )
+
+            check = app_ensure_using_http20()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"HTTP/2.0 is not enabled for app 'app_id-1' in subscription '{AZURE_SUBSCRIPTION}'."
+            )
+            assert result[0].resource_id == resource_id
+            assert result[0].resource_name == "app_id-1"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
diff --git a/tests/providers/azure/services/app/app_ftp_deployment_disabled/app_ftp_deployment_disabled_test.py b/tests/providers/azure/services/app/app_ftp_deployment_disabled/app_ftp_deployment_disabled_test.py
new file mode 100644
index 00000000000..6f522d2a32e
--- /dev/null
+++ b/tests/providers/azure/services/app/app_ftp_deployment_disabled/app_ftp_deployment_disabled_test.py
@@ -0,0 +1,147 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.app.app_service import WebApp
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_app_ftp_deployment_disabled:
+    def test_app_no_subscriptions(self):
+        app_client = mock.MagicMock
+        app_client.apps = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ftp_deployment_disabled.app_ftp_deployment_disabled.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ftp_deployment_disabled.app_ftp_deployment_disabled import (
+                app_ftp_deployment_disabled,
+            )
+
+            check = app_ftp_deployment_disabled()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_app_subscriptions_empty(self):
+        app_client = mock.MagicMock
+        app_client.apps = {AZURE_SUBSCRIPTION: {}}
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ftp_deployment_disabled.app_ftp_deployment_disabled.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ftp_deployment_disabled.app_ftp_deployment_disabled import (
+                app_ftp_deployment_disabled,
+            )
+
+            check = app_ftp_deployment_disabled()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_app_configurations_none(self):
+        resource_id = f"/subscriptions/{uuid4()}"
+        app_client = mock.MagicMock
+        app_client.apps = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": WebApp(
+                    resource_id=resource_id,
+                    auth_enabled=True,
+                    configurations=None,
+                    client_cert_mode="Ignore",
+                    https_only=False,
+                    identity=None,
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ftp_deployment_disabled.app_ftp_deployment_disabled.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ftp_deployment_disabled.app_ftp_deployment_disabled import (
+                app_ftp_deployment_disabled,
+            )
+
+            check = app_ftp_deployment_disabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"FTP is enabled for app 'app_id-1' in subscription '{AZURE_SUBSCRIPTION}'."
+            )
+            assert result[0].resource_id == resource_id
+            assert result[0].resource_name == "app_id-1"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+
+    def test_app_ftp_deployment_disabled(self):
+        resource_id = f"/subscriptions/{uuid4()}"
+        app_client = mock.MagicMock
+        app_client.apps = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": WebApp(
+                    resource_id=resource_id,
+                    auth_enabled=True,
+                    configurations=mock.MagicMock(ftps_state="AllAllowed"),
+                    client_cert_mode="Ignore",
+                    https_only=False,
+                    identity=None,
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ftp_deployment_disabled.app_ftp_deployment_disabled.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ftp_deployment_disabled.app_ftp_deployment_disabled import (
+                app_ftp_deployment_disabled,
+            )
+
+            check = app_ftp_deployment_disabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"FTP is enabled for app 'app_id-1' in subscription '{AZURE_SUBSCRIPTION}'."
+            )
+            assert result[0].resource_id == resource_id
+            assert result[0].resource_name == "app_id-1"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+
+    def test_app_ftp_deploy_enabled(self):
+        resource_id = f"/subscriptions/{uuid4()}"
+        app_client = mock.MagicMock
+        app_client.apps = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": WebApp(
+                    resource_id=resource_id,
+                    auth_enabled=True,
+                    configurations=mock.MagicMock(ftps_state="Disabled"),
+                    client_cert_mode="Ignore",
+                    https_only=False,
+                    identity=None,
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_ftp_deployment_disabled.app_ftp_deployment_disabled.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_ftp_deployment_disabled.app_ftp_deployment_disabled import (
+                app_ftp_deployment_disabled,
+            )
+
+            check = app_ftp_deployment_disabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"FTP is disabled for app 'app_id-1' in subscription '{AZURE_SUBSCRIPTION}'."
+            )
+            assert result[0].resource_id == resource_id
+            assert result[0].resource_name == "app_id-1"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
diff --git a/tests/providers/azure/services/app/app_minimum_tls_version_12/app_minimum_tls_version_12_test.py b/tests/providers/azure/services/app/app_minimum_tls_version_12/app_minimum_tls_version_12_test.py
new file mode 100644
index 00000000000..b408b846f04
--- /dev/null
+++ b/tests/providers/azure/services/app/app_minimum_tls_version_12/app_minimum_tls_version_12_test.py
@@ -0,0 +1,147 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.app.app_service import WebApp
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_app_minimum_tls_version_12:
+    def test_app_no_subscriptions(self):
+        app_client = mock.MagicMock
+        app_client.apps = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_minimum_tls_version_12.app_minimum_tls_version_12.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_minimum_tls_version_12.app_minimum_tls_version_12 import (
+                app_minimum_tls_version_12,
+            )
+
+            check = app_minimum_tls_version_12()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_app_subscriptions_empty(self):
+        app_client = mock.MagicMock
+        app_client.apps = {AZURE_SUBSCRIPTION: {}}
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_minimum_tls_version_12.app_minimum_tls_version_12.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_minimum_tls_version_12.app_minimum_tls_version_12 import (
+                app_minimum_tls_version_12,
+            )
+
+            check = app_minimum_tls_version_12()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_app_none_configurations(self):
+        resource_id = f"/subscriptions/{uuid4()}"
+        app_client = mock.MagicMock
+        app_client.apps = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": WebApp(
+                    resource_id=resource_id,
+                    auth_enabled=True,
+                    configurations=None,
+                    client_cert_mode="Ignore",
+                    https_only=False,
+                    identity=None,
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_minimum_tls_version_12.app_minimum_tls_version_12.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_minimum_tls_version_12.app_minimum_tls_version_12 import (
+                app_minimum_tls_version_12,
+            )
+
+            check = app_minimum_tls_version_12()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Minimum TLS version is not set to 1.2 for app 'app_id-1' in subscription '{AZURE_SUBSCRIPTION}'."
+            )
+            assert result[0].resource_id == resource_id
+            assert result[0].resource_name == "app_id-1"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+
+    def test_app_min_tls_version_12(self):
+        resource_id = f"/subscriptions/{uuid4()}"
+        app_client = mock.MagicMock
+        app_client.apps = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": WebApp(
+                    resource_id=resource_id,
+                    auth_enabled=True,
+                    configurations=mock.MagicMock(min_tls_version="1.2"),
+                    client_cert_mode="Ignore",
+                    https_only=False,
+                    identity=None,
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_minimum_tls_version_12.app_minimum_tls_version_12.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_minimum_tls_version_12.app_minimum_tls_version_12 import (
+                app_minimum_tls_version_12,
+            )
+
+            check = app_minimum_tls_version_12()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Minimum TLS version is set to 1.2 for app 'app_id-1' in subscription '{AZURE_SUBSCRIPTION}'."
+            )
+            assert result[0].resource_id == resource_id
+            assert result[0].resource_name == "app_id-1"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+
+    def test_app_min_tls_version_10(self):
+        resource_id = f"/subscriptions/{uuid4()}"
+        app_client = mock.MagicMock
+        app_client.apps = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": WebApp(
+                    resource_id=resource_id,
+                    auth_enabled=False,
+                    configurations=mock.MagicMock(min_tls_version="1.0"),
+                    client_cert_mode="Ignore",
+                    https_only=False,
+                    identity=None,
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_minimum_tls_version_12.app_minimum_tls_version_12.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_minimum_tls_version_12.app_minimum_tls_version_12 import (
+                app_minimum_tls_version_12,
+            )
+
+            check = app_minimum_tls_version_12()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Minimum TLS version is not set to 1.2 for app 'app_id-1' in subscription '{AZURE_SUBSCRIPTION}'."
+            )
+            assert result[0].resource_id == resource_id
+            assert result[0].resource_name == "app_id-1"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
diff --git a/tests/providers/azure/services/app/app_register_with_identity/app_register_with_identity_test.py b/tests/providers/azure/services/app/app_register_with_identity/app_register_with_identity_test.py
new file mode 100644
index 00000000000..e80075882f5
--- /dev/null
+++ b/tests/providers/azure/services/app/app_register_with_identity/app_register_with_identity_test.py
@@ -0,0 +1,111 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.app.app_service import WebApp
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_app_register_with_identity:
+    def test_app_no_subscriptions(self):
+        app_client = mock.MagicMock
+        app_client.apps = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_register_with_identity.app_register_with_identity.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_register_with_identity.app_register_with_identity import (
+                app_register_with_identity,
+            )
+
+            check = app_register_with_identity()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_app_subscriptions_empty(self):
+        app_client = mock.MagicMock
+        app_client.apps = {AZURE_SUBSCRIPTION: {}}
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_register_with_identity.app_register_with_identity.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_register_with_identity.app_register_with_identity import (
+                app_register_with_identity,
+            )
+
+            check = app_register_with_identity()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_app_none_configurations(self):
+        resource_id = f"/subscriptions/{uuid4()}"
+        app_client = mock.MagicMock
+        app_client.apps = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": WebApp(
+                    resource_id=resource_id,
+                    auth_enabled=True,
+                    configurations=None,
+                    client_cert_mode="Ignore",
+                    https_only=False,
+                    identity=None,
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_register_with_identity.app_register_with_identity.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_register_with_identity.app_register_with_identity import (
+                app_register_with_identity,
+            )
+
+            check = app_register_with_identity()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"App 'app_id-1' in subscription '{AZURE_SUBSCRIPTION}' does not have an identity configured."
+            )
+            assert result[0].resource_id == resource_id
+            assert result[0].resource_name == "app_id-1"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+
+    def test_app_identity(self):
+        resource_id = f"/subscriptions/{uuid4()}"
+        app_client = mock.MagicMock
+        app_client.apps = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": WebApp(
+                    resource_id=resource_id,
+                    auth_enabled=True,
+                    configurations=None,
+                    client_cert_mode="Ignore",
+                    https_only=False,
+                    identity=mock.MagicMock,
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.app.app_register_with_identity.app_register_with_identity.app_client",
+            new=app_client,
+        ):
+            from prowler.providers.azure.services.app.app_register_with_identity.app_register_with_identity import (
+                app_register_with_identity,
+            )
+
+            check = app_register_with_identity()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"App 'app_id-1' in subscription '{AZURE_SUBSCRIPTION}' has an identity configured."
+            )
+            assert result[0].resource_id == resource_id
+            assert result[0].resource_name == "app_id-1"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
diff --git a/tests/providers/azure/services/app/app_service_test.py b/tests/providers/azure/services/app/app_service_test.py
new file mode 100644
index 00000000000..6b5d45728e5
--- /dev/null
+++ b/tests/providers/azure/services/app/app_service_test.py
@@ -0,0 +1,79 @@
+from unittest.mock import patch
+
+from azure.mgmt.web.models import ManagedServiceIdentity, SiteConfigResource
+
+from prowler.providers.azure.services.app.app_service import App, WebApp
+from tests.providers.azure.azure_fixtures import (
+    AZURE_SUBSCRIPTION,
+    set_mocked_azure_audit_info,
+)
+
+
+def mock_app_get_apps(self):
+    return {
+        AZURE_SUBSCRIPTION: {
+            "app_id-1": WebApp(
+                resource_id="/subscriptions/resource_id",
+                configurations=SiteConfigResource(),
+                identity=ManagedServiceIdentity(type="SystemAssigned"),
+                auth_enabled=True,
+                client_cert_mode="Required",
+                https_only=True,
+            )
+        }
+    }
+
+
+@patch(
+    "prowler.providers.azure.services.app.app_service.App.__get_apps__",
+    new=mock_app_get_apps,
+)
+class Test_App_Service:
+    def test__get_client__(self):
+        app_service = App(set_mocked_azure_audit_info())
+        assert (
+            app_service.clients[AZURE_SUBSCRIPTION].__class__.__name__
+            == "WebSiteManagementClient"
+        )
+
+    def test__get_subscriptions__(self):
+        app_service = App(set_mocked_azure_audit_info())
+        assert app_service.subscriptions.__class__.__name__ == "dict"
+
+    def test__get_apps__(self):
+        app_service = App(set_mocked_azure_audit_info())
+        assert len(app_service.apps) == 1
+        assert (
+            app_service.apps[AZURE_SUBSCRIPTION]["app_id-1"].resource_id
+            == "/subscriptions/resource_id"
+        )
+        assert app_service.apps[AZURE_SUBSCRIPTION]["app_id-1"].auth_enabled
+        assert (
+            app_service.apps[AZURE_SUBSCRIPTION]["app_id-1"].client_cert_mode
+            == "Required"
+        )
+        assert app_service.apps[AZURE_SUBSCRIPTION]["app_id-1"].https_only
+        assert (
+            app_service.apps[AZURE_SUBSCRIPTION]["app_id-1"].identity.type
+            == "SystemAssigned"
+        )
+        assert (
+            app_service.apps[AZURE_SUBSCRIPTION][
+                "app_id-1"
+            ].configurations.__class__.__name__
+            == "SiteConfigResource"
+        )
+
+    def test__get_client_cert_mode__(self):
+        app_service = App(set_mocked_azure_audit_info())
+        assert (
+            app_service.__get_client_cert_mode__(False, "OptionalInteractiveUser")
+            == "Ignore"
+        )
+        assert (
+            app_service.__get_client_cert_mode__(True, "OptionalInteractiveUser")
+            == "Optional"
+        )
+        assert app_service.__get_client_cert_mode__(True, "Optional") == "Allow"
+        assert app_service.__get_client_cert_mode__(True, "Required") == "Required"
+        assert app_service.__get_client_cert_mode__(True, "Foo") == "Ignore"
diff --git a/tests/providers/azure/services/appinsights/appinsights_ensure_is_configured/appinsights_ensure_is_configured_test.py b/tests/providers/azure/services/appinsights/appinsights_ensure_is_configured/appinsights_ensure_is_configured_test.py
new file mode 100644
index 00000000000..9ccaf7e8aab
--- /dev/null
+++ b/tests/providers/azure/services/appinsights/appinsights_ensure_is_configured/appinsights_ensure_is_configured_test.py
@@ -0,0 +1,77 @@
+from unittest import mock
+
+from prowler.providers.azure.services.appinsights.appinsights_service import Component
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_appinsights_ensure_is_configured:
+    def test_appinsights_no_subscriptions(self):
+        appinsights_client = mock.MagicMock
+        appinsights_client.components = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.appinsights.appinsights_ensure_is_configured.appinsights_ensure_is_configured.appinsights_client",
+            new=appinsights_client,
+        ):
+            from prowler.providers.azure.services.appinsights.appinsights_ensure_is_configured.appinsights_ensure_is_configured import (
+                appinsights_ensure_is_configured,
+            )
+
+            check = appinsights_ensure_is_configured()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_no_appinsights(self):
+        appinsights_client = mock.MagicMock
+        appinsights_client.components = {AZURE_SUBSCRIPTION: {}}
+
+        with mock.patch(
+            "prowler.providers.azure.services.appinsights.appinsights_ensure_is_configured.appinsights_ensure_is_configured.appinsights_client",
+            new=appinsights_client,
+        ):
+            from prowler.providers.azure.services.appinsights.appinsights_ensure_is_configured.appinsights_ensure_is_configured import (
+                appinsights_ensure_is_configured,
+            )
+
+            check = appinsights_ensure_is_configured()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].status == "FAIL"
+            assert result[0].resource_id == "AppInsights"
+            assert result[0].resource_name == "AppInsights"
+            assert (
+                result[0].status_extended
+                == f"There are no AppInsight configured in susbscription {AZURE_SUBSCRIPTION}."
+            )
+
+    def test_appinsights_configured(self):
+        appinsights_client = mock.MagicMock
+        appinsights_client.components = {
+            AZURE_SUBSCRIPTION: {
+                "app_id-1": Component(
+                    resource_id="/subscriptions/resource_id",
+                    resource_name="AppInsightsTest",
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.appinsights.appinsights_ensure_is_configured.appinsights_ensure_is_configured.appinsights_client",
+            new=appinsights_client,
+        ):
+            from prowler.providers.azure.services.appinsights.appinsights_ensure_is_configured.appinsights_ensure_is_configured import (
+                appinsights_ensure_is_configured,
+            )
+
+            check = appinsights_ensure_is_configured()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].status == "PASS"
+            assert result[0].resource_id == "AppInsights"
+            assert result[0].resource_name == "AppInsights"
+            assert (
+                result[0].status_extended
+                == f"There is at least one AppInsight configured in susbscription {AZURE_SUBSCRIPTION}."
+            )
diff --git a/tests/providers/azure/services/appinsights/appinsights_service_test.py b/tests/providers/azure/services/appinsights/appinsights_service_test.py
new file mode 100644
index 00000000000..8761e96a3b7
--- /dev/null
+++ b/tests/providers/azure/services/appinsights/appinsights_service_test.py
@@ -0,0 +1,50 @@
+from unittest.mock import patch
+
+from prowler.providers.azure.services.appinsights.appinsights_service import (
+    AppInsights,
+    Component,
+)
+from tests.providers.azure.azure_fixtures import (
+    AZURE_SUBSCRIPTION,
+    set_mocked_azure_audit_info,
+)
+
+
+def mock_appinsights_get_components(_):
+    return {
+        AZURE_SUBSCRIPTION: {
+            "app_id-1": Component(
+                resource_id="/subscriptions/resource_id",
+                resource_name="AppInsightsTest",
+            )
+        }
+    }
+
+
+@patch(
+    "prowler.providers.azure.services.appinsights.appinsights_service.AppInsights.__get_components__",
+    new=mock_appinsights_get_components,
+)
+class Test_AppInsights_Service:
+    def test__get_client__(self):
+        app_insights = AppInsights(set_mocked_azure_audit_info())
+        assert (
+            app_insights.clients[AZURE_SUBSCRIPTION].__class__.__name__
+            == "ApplicationInsightsManagementClient"
+        )
+
+    def test__get_subscriptions__(self):
+        app_insights = AppInsights(set_mocked_azure_audit_info())
+        assert app_insights.subscriptions.__class__.__name__ == "dict"
+
+    def test__get_components__(self):
+        appinsights = AppInsights(set_mocked_azure_audit_info())
+        assert len(appinsights.components) == 1
+        assert (
+            appinsights.components[AZURE_SUBSCRIPTION]["app_id-1"].resource_id
+            == "/subscriptions/resource_id"
+        )
+        assert (
+            appinsights.components[AZURE_SUBSCRIPTION]["app_id-1"].resource_name
+            == "AppInsightsTest"
+        )
diff --git a/tests/providers/azure/services/cosmosdb/cosmosdb_account_firewall_use_selected_networks/cosmosdb_account_firewall_use_selected_networks_test.py b/tests/providers/azure/services/cosmosdb/cosmosdb_account_firewall_use_selected_networks/cosmosdb_account_firewall_use_selected_networks_test.py
new file mode 100644
index 00000000000..64187ba0ff9
--- /dev/null
+++ b/tests/providers/azure/services/cosmosdb/cosmosdb_account_firewall_use_selected_networks/cosmosdb_account_firewall_use_selected_networks_test.py
@@ -0,0 +1,101 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.cosmosdb.cosmosdb_service import Account
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_cosmosdb_account_firewall_use_selected_networks:
+    def test_no_accounts(self):
+        cosmosdb_client = mock.MagicMock
+        cosmosdb_client.accounts = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.cosmosdb.cosmosdb_account_firewall_use_selected_networks.cosmosdb_account_firewall_use_selected_networks.cosmosdb_client",
+            new=cosmosdb_client,
+        ):
+            from prowler.providers.azure.services.cosmosdb.cosmosdb_account_firewall_use_selected_networks.cosmosdb_account_firewall_use_selected_networks import (
+                cosmosdb_account_firewall_use_selected_networks,
+            )
+
+            check = cosmosdb_account_firewall_use_selected_networks()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_accounts_no_virtual_network_filter_enabled(self):
+        cosmosdb_client = mock.MagicMock
+        account_name = "Account Name"
+        account_id = str(uuid4())
+        cosmosdb_client.accounts = {
+            AZURE_SUBSCRIPTION: [
+                Account(
+                    id=account_id,
+                    name=account_name,
+                    kind=None,
+                    location=None,
+                    type=None,
+                    tags=None,
+                    disable_local_auth=None,
+                    is_virtual_network_filter_enabled=False,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.cosmosdb.cosmosdb_account_firewall_use_selected_networks.cosmosdb_account_firewall_use_selected_networks.cosmosdb_client",
+            new=cosmosdb_client,
+        ):
+            from prowler.providers.azure.services.cosmosdb.cosmosdb_account_firewall_use_selected_networks.cosmosdb_account_firewall_use_selected_networks import (
+                cosmosdb_account_firewall_use_selected_networks,
+            )
+
+            check = cosmosdb_account_firewall_use_selected_networks()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"CosmosDB account {account_name} from subscription {AZURE_SUBSCRIPTION} has firewall rules that allow access from all networks."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == account_name
+            assert result[0].resource_id == account_id
+
+    def test_accounts_virtual_network_filter_enabled(self):
+        cosmosdb_client = mock.MagicMock
+        account_name = "Account Name"
+        account_id = str(uuid4())
+        cosmosdb_client.accounts = {
+            AZURE_SUBSCRIPTION: [
+                Account(
+                    id=account_id,
+                    name=account_name,
+                    kind=None,
+                    location=None,
+                    type=None,
+                    tags=None,
+                    disable_local_auth=None,
+                    is_virtual_network_filter_enabled=True,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.cosmosdb.cosmosdb_account_firewall_use_selected_networks.cosmosdb_account_firewall_use_selected_networks.cosmosdb_client",
+            new=cosmosdb_client,
+        ):
+            from prowler.providers.azure.services.cosmosdb.cosmosdb_account_firewall_use_selected_networks.cosmosdb_account_firewall_use_selected_networks import (
+                cosmosdb_account_firewall_use_selected_networks,
+            )
+
+            check = cosmosdb_account_firewall_use_selected_networks()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"CosmosDB account {account_name} from subscription {AZURE_SUBSCRIPTION} has firewall rules that allow access only from selected networks."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == account_name
+            assert result[0].resource_id == account_id
diff --git a/tests/providers/azure/services/cosmosdb/cosmosdb_account_use_aad_and_rbac/cosmosdb_account_use_aad_and_rbac_test.py b/tests/providers/azure/services/cosmosdb/cosmosdb_account_use_aad_and_rbac/cosmosdb_account_use_aad_and_rbac_test.py
new file mode 100644
index 00000000000..5530262be3c
--- /dev/null
+++ b/tests/providers/azure/services/cosmosdb/cosmosdb_account_use_aad_and_rbac/cosmosdb_account_use_aad_and_rbac_test.py
@@ -0,0 +1,103 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.cosmosdb.cosmosdb_service import Account
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_cosmosdb_account_use_aad_and_rbac:
+    def test_no_accounts(self):
+        cosmosdb_client = mock.MagicMock
+        cosmosdb_client.accounts = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.cosmosdb.cosmosdb_account_use_aad_and_rbac.cosmosdb_account_use_aad_and_rbac.cosmosdb_client",
+            new=cosmosdb_client,
+        ):
+            from prowler.providers.azure.services.cosmosdb.cosmosdb_account_use_aad_and_rbac.cosmosdb_account_use_aad_and_rbac import (
+                cosmosdb_account_use_aad_and_rbac,
+            )
+
+            check = cosmosdb_account_use_aad_and_rbac()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_accounts_disable_local_auth_false(self):
+        cosmosdb_client = mock.MagicMock
+        account_name = "Account Name"
+        account_id = str(uuid4())
+        cosmosdb_client.accounts = {
+            AZURE_SUBSCRIPTION: [
+                Account(
+                    id=account_id,
+                    name=account_name,
+                    kind=None,
+                    location=None,
+                    type=None,
+                    tags=None,
+                    is_virtual_network_filter_enabled=None,
+                    private_endpoint_connections=None,
+                    disable_local_auth=False,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.cosmosdb.cosmosdb_account_use_aad_and_rbac.cosmosdb_account_use_aad_and_rbac.cosmosdb_client",
+            new=cosmosdb_client,
+        ):
+            from prowler.providers.azure.services.cosmosdb.cosmosdb_account_use_aad_and_rbac.cosmosdb_account_use_aad_and_rbac import (
+                cosmosdb_account_use_aad_and_rbac,
+            )
+
+            check = cosmosdb_account_use_aad_and_rbac()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"CosmosDB account {account_name} from subscription {AZURE_SUBSCRIPTION} is not using AAD and RBAC"
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == account_name
+            assert result[0].resource_id == account_id
+
+    def test_accounts_disable_local_auth_true(self):
+        cosmosdb_client = mock.MagicMock
+        account_name = "Account Name"
+        account_id = str(uuid4())
+        cosmosdb_client.accounts = {
+            AZURE_SUBSCRIPTION: [
+                Account(
+                    id=account_id,
+                    name=account_name,
+                    kind=None,
+                    location=None,
+                    type=None,
+                    tags=None,
+                    is_virtual_network_filter_enabled=None,
+                    private_endpoint_connections=None,
+                    disable_local_auth=True,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.cosmosdb.cosmosdb_account_use_aad_and_rbac.cosmosdb_account_use_aad_and_rbac.cosmosdb_client",
+            new=cosmosdb_client,
+        ):
+            from prowler.providers.azure.services.cosmosdb.cosmosdb_account_use_aad_and_rbac.cosmosdb_account_use_aad_and_rbac import (
+                cosmosdb_account_use_aad_and_rbac,
+            )
+
+            check = cosmosdb_account_use_aad_and_rbac()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"CosmosDB account {account_name} from subscription {AZURE_SUBSCRIPTION} is using AAD and RBAC"
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == account_name
+            assert result[0].resource_id == account_id
diff --git a/tests/providers/azure/services/cosmosdb/cosmosdb_account_use_private_endpoints/cosmosdb_account_use_private_endpoints_test.py b/tests/providers/azure/services/cosmosdb/cosmosdb_account_use_private_endpoints/cosmosdb_account_use_private_endpoints_test.py
new file mode 100644
index 00000000000..4fdf18a19a1
--- /dev/null
+++ b/tests/providers/azure/services/cosmosdb/cosmosdb_account_use_private_endpoints/cosmosdb_account_use_private_endpoints_test.py
@@ -0,0 +1,109 @@
+from unittest import mock
+from uuid import uuid4
+
+from azure.mgmt.cosmosdb.models import PrivateEndpointConnection
+
+from prowler.providers.azure.services.cosmosdb.cosmosdb_service import Account
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_cosmosdb_account_use_private_endpoints:
+    def test_no_accounts(self):
+        cosmosdb_client = mock.MagicMock
+        cosmosdb_client.accounts = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.cosmosdb.cosmosdb_account_use_private_endpoints.cosmosdb_account_use_private_endpoints.cosmosdb_client",
+            new=cosmosdb_client,
+        ):
+            from prowler.providers.azure.services.cosmosdb.cosmosdb_account_use_private_endpoints.cosmosdb_account_use_private_endpoints import (
+                cosmosdb_account_use_private_endpoints,
+            )
+
+            check = cosmosdb_account_use_private_endpoints()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_accounts_no_private_endpoints_connections(self):
+        cosmosdb_client = mock.MagicMock
+        account_name = "Account Name"
+        account_id = str(uuid4())
+        cosmosdb_client.accounts = {
+            AZURE_SUBSCRIPTION: [
+                Account(
+                    id=account_id,
+                    name=account_name,
+                    kind=None,
+                    location=None,
+                    type=None,
+                    tags=None,
+                    is_virtual_network_filter_enabled=None,
+                    private_endpoint_connections=None,
+                    disable_local_auth=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.cosmosdb.cosmosdb_account_use_private_endpoints.cosmosdb_account_use_private_endpoints.cosmosdb_client",
+            new=cosmosdb_client,
+        ):
+            from prowler.providers.azure.services.cosmosdb.cosmosdb_account_use_private_endpoints.cosmosdb_account_use_private_endpoints import (
+                cosmosdb_account_use_private_endpoints,
+            )
+
+            check = cosmosdb_account_use_private_endpoints()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"CosmosDB account {account_name} from subscription {AZURE_SUBSCRIPTION} is not using private endpoints connections"
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == account_name
+            assert result[0].resource_id == account_id
+
+    def test_accounts_private_endpoints_connections(self):
+        cosmosdb_client = mock.MagicMock
+        account_name = "Account Name"
+        account_id = str(uuid4())
+        cosmosdb_client.accounts = {
+            AZURE_SUBSCRIPTION: [
+                Account(
+                    id=account_id,
+                    name=account_name,
+                    kind=None,
+                    location=None,
+                    type=None,
+                    tags=None,
+                    is_virtual_network_filter_enabled=None,
+                    private_endpoint_connections=[
+                        PrivateEndpointConnection(
+                            id="private_endpoint", name="private_name"
+                        )
+                    ],
+                    disable_local_auth=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.cosmosdb.cosmosdb_account_use_private_endpoints.cosmosdb_account_use_private_endpoints.cosmosdb_client",
+            new=cosmosdb_client,
+        ):
+            from prowler.providers.azure.services.cosmosdb.cosmosdb_account_use_private_endpoints.cosmosdb_account_use_private_endpoints import (
+                cosmosdb_account_use_private_endpoints,
+            )
+
+            check = cosmosdb_account_use_private_endpoints()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"CosmosDB account {account_name} from subscription {AZURE_SUBSCRIPTION} is using private endpoints connections"
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == account_name
+            assert result[0].resource_id == account_id
diff --git a/tests/providers/azure/services/cosmosdb/cosmosdb_service_test.py b/tests/providers/azure/services/cosmosdb/cosmosdb_service_test.py
new file mode 100644
index 00000000000..4e965c8ad9a
--- /dev/null
+++ b/tests/providers/azure/services/cosmosdb/cosmosdb_service_test.py
@@ -0,0 +1,52 @@
+from unittest.mock import patch
+
+from prowler.providers.azure.services.cosmosdb.cosmosdb_service import Account, CosmosDB
+from tests.providers.azure.azure_fixtures import (
+    AZURE_SUBSCRIPTION,
+    set_mocked_azure_audit_info,
+)
+
+
+def mock_cosmosdb_get_accounts(_):
+    return {
+        AZURE_SUBSCRIPTION: [
+            Account(
+                id="account_id",
+                name="account_name",
+                kind=None,
+                location=None,
+                type=None,
+                tags=None,
+                is_virtual_network_filter_enabled=None,
+                disable_local_auth=None,
+            )
+        ]
+    }
+
+
+@patch(
+    "prowler.providers.azure.services.cosmosdb.cosmosdb_service.CosmosDB.__get_accounts__",
+    new=mock_cosmosdb_get_accounts,
+)
+class Test_CosmosDB_Service:
+    def test__get_client__(self):
+        account = CosmosDB(set_mocked_azure_audit_info())
+        assert (
+            account.clients[AZURE_SUBSCRIPTION].__class__.__name__
+            == "CosmosDBManagementClient"
+        )
+
+    def test__get_accounts__(self):
+        account = CosmosDB(set_mocked_azure_audit_info())
+        assert account.accounts[AZURE_SUBSCRIPTION][0].__class__.__name__ == "Account"
+        assert account.accounts[AZURE_SUBSCRIPTION][0].id == "account_id"
+        assert account.accounts[AZURE_SUBSCRIPTION][0].name == "account_name"
+        assert account.accounts[AZURE_SUBSCRIPTION][0].kind is None
+        assert account.accounts[AZURE_SUBSCRIPTION][0].location is None
+        assert account.accounts[AZURE_SUBSCRIPTION][0].type is None
+        assert account.accounts[AZURE_SUBSCRIPTION][0].tags is None
+        assert (
+            account.accounts[AZURE_SUBSCRIPTION][0].is_virtual_network_filter_enabled
+            is None
+        )
+        assert account.accounts[AZURE_SUBSCRIPTION][0].disable_local_auth is None
diff --git a/tests/providers/azure/services/defender/defender_additional_email_configured_with_a_security_contact/defender_additional_email_configured_with_a_security_contact_test.py b/tests/providers/azure/services/defender/defender_additional_email_configured_with_a_security_contact/defender_additional_email_configured_with_a_security_contact_test.py
new file mode 100644
index 00000000000..5078c909b6a
--- /dev/null
+++ b/tests/providers/azure/services/defender/defender_additional_email_configured_with_a_security_contact/defender_additional_email_configured_with_a_security_contact_test.py
@@ -0,0 +1,247 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.defender.defender_service import SecurityContacts
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_defender_additional_email_configured_with_a_security_contact:
+    def test_defender_no_subscriptions(self):
+        defender_client = mock.MagicMock
+        defender_client.security_contacts = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_additional_email_configured_with_a_security_contact.defender_additional_email_configured_with_a_security_contact.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_additional_email_configured_with_a_security_contact.defender_additional_email_configured_with_a_security_contact import (
+                defender_additional_email_configured_with_a_security_contact,
+            )
+
+            check = defender_additional_email_configured_with_a_security_contact()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_defender_no_additional_emails(self):
+        resource_id = str(uuid4())
+        defender_client = mock.MagicMock
+        defender_client.security_contacts = {
+            AZURE_SUBSCRIPTION: {
+                "default": SecurityContacts(
+                    resource_id=resource_id,
+                    emails="",
+                    phone="",
+                    alert_notifications_minimal_severity="High",
+                    alert_notifications_state="On",
+                    notified_roles=["Contributor"],
+                    notified_roles_state="On",
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_additional_email_configured_with_a_security_contact.defender_additional_email_configured_with_a_security_contact.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_additional_email_configured_with_a_security_contact.defender_additional_email_configured_with_a_security_contact import (
+                defender_additional_email_configured_with_a_security_contact,
+            )
+
+            check = defender_additional_email_configured_with_a_security_contact()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"There is not another correct email configured for susbscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "default"
+            assert result[0].resource_id == resource_id
+
+    def test_defender_additional_email_bad_format(self):
+        resource_id = str(uuid4())
+        defender_client = mock.MagicMock
+        defender_client.security_contacts = {
+            AZURE_SUBSCRIPTION: {
+                "default": SecurityContacts(
+                    resource_id=resource_id,
+                    emails="bad_email",
+                    phone="",
+                    alert_notifications_minimal_severity="High",
+                    alert_notifications_state="On",
+                    notified_roles=["Contributor"],
+                    notified_roles_state="On",
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_additional_email_configured_with_a_security_contact.defender_additional_email_configured_with_a_security_contact.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_additional_email_configured_with_a_security_contact.defender_additional_email_configured_with_a_security_contact import (
+                defender_additional_email_configured_with_a_security_contact,
+            )
+
+            check = defender_additional_email_configured_with_a_security_contact()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"There is not another correct email configured for susbscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "default"
+            assert result[0].resource_id == resource_id
+
+    def test_defender_additional_email_bad_separator(self):
+        resource_id = str(uuid4())
+        defender_client = mock.MagicMock
+        defender_client.security_contacts = {
+            AZURE_SUBSCRIPTION: {
+                "default": SecurityContacts(
+                    resource_id=resource_id,
+                    emails="test@test.es,   test@test.email.com",
+                    phone="",
+                    alert_notifications_minimal_severity="High",
+                    alert_notifications_state="On",
+                    notified_roles=["Contributor"],
+                    notified_roles_state="On",
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_additional_email_configured_with_a_security_contact.defender_additional_email_configured_with_a_security_contact.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_additional_email_configured_with_a_security_contact.defender_additional_email_configured_with_a_security_contact import (
+                defender_additional_email_configured_with_a_security_contact,
+            )
+
+            check = defender_additional_email_configured_with_a_security_contact()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"There is not another correct email configured for susbscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "default"
+            assert result[0].resource_id == resource_id
+
+    def test_defender_additional_email_good_format(self):
+        resource_id = str(uuid4())
+        defender_client = mock.MagicMock
+        defender_client.security_contacts = {
+            AZURE_SUBSCRIPTION: {
+                "default": SecurityContacts(
+                    resource_id=resource_id,
+                    emails="test@test.com",
+                    phone="",
+                    alert_notifications_minimal_severity="High",
+                    alert_notifications_state="On",
+                    notified_roles=["Contributor"],
+                    notified_roles_state="On",
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_additional_email_configured_with_a_security_contact.defender_additional_email_configured_with_a_security_contact.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_additional_email_configured_with_a_security_contact.defender_additional_email_configured_with_a_security_contact import (
+                defender_additional_email_configured_with_a_security_contact,
+            )
+
+            check = defender_additional_email_configured_with_a_security_contact()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"There is another correct email configured for susbscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "default"
+            assert result[0].resource_id == resource_id
+
+    def test_defender_additional_email_good_format_multiple_subdomains(self):
+        resource_id = str(uuid4())
+        defender_client = mock.MagicMock
+        defender_client.security_contacts = {
+            AZURE_SUBSCRIPTION: {
+                "default": SecurityContacts(
+                    resource_id=resource_id,
+                    emails="test@test.mail.es; bad_mail",
+                    phone="",
+                    alert_notifications_minimal_severity="High",
+                    alert_notifications_state="On",
+                    notified_roles=["Contributor"],
+                    notified_roles_state="On",
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_additional_email_configured_with_a_security_contact.defender_additional_email_configured_with_a_security_contact.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_additional_email_configured_with_a_security_contact.defender_additional_email_configured_with_a_security_contact import (
+                defender_additional_email_configured_with_a_security_contact,
+            )
+
+            check = defender_additional_email_configured_with_a_security_contact()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"There is another correct email configured for susbscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "default"
+            assert result[0].resource_id == resource_id
+
+    def test_defender_default_security_contact_not_found(self):
+        defender_client = mock.MagicMock
+        defender_client.security_contacts = {
+            AZURE_SUBSCRIPTION: {
+                "default": SecurityContacts(
+                    resource_id=f"/subscriptions/{AZURE_SUBSCRIPTION}/providers/Microsoft.Security/securityContacts/default",
+                    emails="",
+                    phone="",
+                    alert_notifications_minimal_severity="",
+                    alert_notifications_state="",
+                    notified_roles=[""],
+                    notified_roles_state="",
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_additional_email_configured_with_a_security_contact.defender_additional_email_configured_with_a_security_contact.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_additional_email_configured_with_a_security_contact.defender_additional_email_configured_with_a_security_contact import (
+                defender_additional_email_configured_with_a_security_contact,
+            )
+
+            check = defender_additional_email_configured_with_a_security_contact()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"There is not another correct email configured for susbscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "default"
+            assert (
+                result[0].resource_id
+                == f"/subscriptions/{AZURE_SUBSCRIPTION}/providers/Microsoft.Security/securityContacts/default"
+            )
diff --git a/tests/providers/azure/services/defender/defender_assessments_vm_endpoint_protection_installed/defender_assessments_vm_endpoint_protection_installed_test.py b/tests/providers/azure/services/defender/defender_assessments_vm_endpoint_protection_installed/defender_assessments_vm_endpoint_protection_installed_test.py
new file mode 100644
index 00000000000..d88615c4aa1
--- /dev/null
+++ b/tests/providers/azure/services/defender/defender_assessments_vm_endpoint_protection_installed/defender_assessments_vm_endpoint_protection_installed_test.py
@@ -0,0 +1,103 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.defender.defender_service import Assesment
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_defender_assessments_vm_endpoint_protection_installed:
+    def test_defender_no_subscriptions(self):
+        defender_client = mock.MagicMock
+        defender_client.assessments = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_assessments_vm_endpoint_protection_installed.defender_assessments_vm_endpoint_protection_installed.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_assessments_vm_endpoint_protection_installed.defender_assessments_vm_endpoint_protection_installed import (
+                defender_assessments_vm_endpoint_protection_installed,
+            )
+
+            check = defender_assessments_vm_endpoint_protection_installed()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_defender_subscriptions_with_no_assessments(self):
+        defender_client = mock.MagicMock
+        defender_client.assessments = {AZURE_SUBSCRIPTION: {}}
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_assessments_vm_endpoint_protection_installed.defender_assessments_vm_endpoint_protection_installed.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_assessments_vm_endpoint_protection_installed.defender_assessments_vm_endpoint_protection_installed import (
+                defender_assessments_vm_endpoint_protection_installed,
+            )
+
+            check = defender_assessments_vm_endpoint_protection_installed()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_defender_subscriptions_with_healthy_assessments(self):
+        defender_client = mock.MagicMock
+        resource_id = str(uuid4())
+        defender_client.assessments = {
+            AZURE_SUBSCRIPTION: {
+                "Install endpoint protection solution on virtual machines": Assesment(
+                    resource_id=resource_id,
+                    resource_name="vm1",
+                    status="Healthy",
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_assessments_vm_endpoint_protection_installed.defender_assessments_vm_endpoint_protection_installed.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_assessments_vm_endpoint_protection_installed.defender_assessments_vm_endpoint_protection_installed import (
+                defender_assessments_vm_endpoint_protection_installed,
+            )
+
+            check = defender_assessments_vm_endpoint_protection_installed()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Endpoint protection is set up in all VMs in subscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].resource_name == "vm1"
+            assert result[0].resource_id == resource_id
+
+    def test_defender_subscriptions_with_unhealthy_assessments(self):
+        defender_client = mock.MagicMock
+        resource_id = str(uuid4())
+        defender_client.assessments = {
+            AZURE_SUBSCRIPTION: {
+                "Install endpoint protection solution on virtual machines": Assesment(
+                    resource_id=resource_id,
+                    resource_name="vm1",
+                    status="Unhealthy",
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_assessments_vm_endpoint_protection_installed.defender_assessments_vm_endpoint_protection_installed.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_assessments_vm_endpoint_protection_installed.defender_assessments_vm_endpoint_protection_installed import (
+                defender_assessments_vm_endpoint_protection_installed,
+            )
+
+            check = defender_assessments_vm_endpoint_protection_installed()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Endpoint protection is not set up in all VMs in subscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].resource_name == "vm1"
+            assert result[0].resource_id == resource_id
diff --git a/tests/providers/azure/services/defender/defender_auto_provisioning_log_analytics_agent_vms_on/defender_auto_provisioning_log_analytics_agent_vms_on_test.py b/tests/providers/azure/services/defender/defender_auto_provisioning_log_analytics_agent_vms_on/defender_auto_provisioning_log_analytics_agent_vms_on_test.py
new file mode 100644
index 00000000000..c048075070a
--- /dev/null
+++ b/tests/providers/azure/services/defender/defender_auto_provisioning_log_analytics_agent_vms_on/defender_auto_provisioning_log_analytics_agent_vms_on_test.py
@@ -0,0 +1,142 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.defender.defender_service import (
+    AutoProvisioningSetting,
+)
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_defender_auto_provisioning_log_analytics_agent_vms_on:
+    def test_defender_no_app_services(self):
+        defender_client = mock.MagicMock
+        defender_client.auto_provisioning_settings = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_auto_provisioning_log_analytics_agent_vms_on.defender_auto_provisioning_log_analytics_agent_vms_on.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_auto_provisioning_log_analytics_agent_vms_on.defender_auto_provisioning_log_analytics_agent_vms_on import (
+                defender_auto_provisioning_log_analytics_agent_vms_on,
+            )
+
+            check = defender_auto_provisioning_log_analytics_agent_vms_on()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_defender_auto_provisioning_log_analytics_off(self):
+        resource_id = str(uuid4())
+        defender_client = mock.MagicMock
+        defender_client.auto_provisioning_settings = {
+            AZURE_SUBSCRIPTION: {
+                "default": AutoProvisioningSetting(
+                    resource_id=resource_id,
+                    resource_name="default",
+                    auto_provision="Off",
+                    resource_type="Defender",
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_auto_provisioning_log_analytics_agent_vms_on.defender_auto_provisioning_log_analytics_agent_vms_on.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_auto_provisioning_log_analytics_agent_vms_on.defender_auto_provisioning_log_analytics_agent_vms_on import (
+                defender_auto_provisioning_log_analytics_agent_vms_on,
+            )
+
+            check = defender_auto_provisioning_log_analytics_agent_vms_on()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Defender Auto Provisioning Log Analytics Agents from subscription {AZURE_SUBSCRIPTION} is set to OFF."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "default"
+            assert result[0].resource_id == resource_id
+
+    def test_defender_auto_provisioning_log_analytics_on(self):
+        resource_id = str(uuid4())
+        defender_client = mock.MagicMock
+        defender_client.auto_provisioning_settings = {
+            AZURE_SUBSCRIPTION: {
+                "default": AutoProvisioningSetting(
+                    resource_id=resource_id,
+                    resource_name="default",
+                    auto_provision="On",
+                    resource_type="Defender",
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_auto_provisioning_log_analytics_agent_vms_on.defender_auto_provisioning_log_analytics_agent_vms_on.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_auto_provisioning_log_analytics_agent_vms_on.defender_auto_provisioning_log_analytics_agent_vms_on import (
+                defender_auto_provisioning_log_analytics_agent_vms_on,
+            )
+
+            check = defender_auto_provisioning_log_analytics_agent_vms_on()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Defender Auto Provisioning Log Analytics Agents from subscription {AZURE_SUBSCRIPTION} is set to ON."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "default"
+            assert result[0].resource_id == resource_id
+
+    def test_defender_auto_provisioning_log_analytics_on_and_off(self):
+        resource_id = str(uuid4())
+        defender_client = mock.MagicMock
+        defender_client.auto_provisioning_settings = {
+            AZURE_SUBSCRIPTION: {
+                "default": AutoProvisioningSetting(
+                    resource_id=resource_id,
+                    resource_name="default",
+                    auto_provision="On",
+                    resource_type="Defender",
+                ),
+                "default2": AutoProvisioningSetting(
+                    resource_id=resource_id,
+                    resource_name="default2",
+                    auto_provision="Off",
+                    resource_type="Defender",
+                ),
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_auto_provisioning_log_analytics_agent_vms_on.defender_auto_provisioning_log_analytics_agent_vms_on.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_auto_provisioning_log_analytics_agent_vms_on.defender_auto_provisioning_log_analytics_agent_vms_on import (
+                defender_auto_provisioning_log_analytics_agent_vms_on,
+            )
+
+            check = defender_auto_provisioning_log_analytics_agent_vms_on()
+            result = check.execute()
+            assert len(result) == 2
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Defender Auto Provisioning Log Analytics Agents from subscription {AZURE_SUBSCRIPTION} is set to ON."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "default"
+            assert result[0].resource_id == resource_id
+
+            assert result[1].status == "FAIL"
+            assert (
+                result[1].status_extended
+                == f"Defender Auto Provisioning Log Analytics Agents from subscription {AZURE_SUBSCRIPTION} is set to OFF."
+            )
+            assert result[1].subscription == AZURE_SUBSCRIPTION
+            assert result[1].resource_name == "default2"
+            assert result[1].resource_id == resource_id
diff --git a/tests/providers/azure/services/defender/defender_auto_provisioning_vulnerabilty_assessments_machines_on/defender_auto_provisioning_vulnerabilty_assessments_machines_on_test.py b/tests/providers/azure/services/defender/defender_auto_provisioning_vulnerabilty_assessments_machines_on/defender_auto_provisioning_vulnerabilty_assessments_machines_on_test.py
new file mode 100644
index 00000000000..0f7306fdcda
--- /dev/null
+++ b/tests/providers/azure/services/defender/defender_auto_provisioning_vulnerabilty_assessments_machines_on/defender_auto_provisioning_vulnerabilty_assessments_machines_on_test.py
@@ -0,0 +1,89 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.defender.defender_service import Assesment
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_defender_auto_provisioning_vulnerabilty_assessments_machines_on:
+    def test_defender_no_app_services(self):
+        defender_client = mock.MagicMock
+        defender_client.assessments = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_auto_provisioning_vulnerabilty_assessments_machines_on.defender_auto_provisioning_vulnerabilty_assessments_machines_on.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_auto_provisioning_vulnerabilty_assessments_machines_on.defender_auto_provisioning_vulnerabilty_assessments_machines_on import (
+                defender_auto_provisioning_vulnerabilty_assessments_machines_on,
+            )
+
+            check = defender_auto_provisioning_vulnerabilty_assessments_machines_on()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_defender_machines_no_vulnerability_assessment_solution(self):
+        resource_id = str(uuid4())
+        defender_client = mock.MagicMock
+        defender_client.assessments = {
+            AZURE_SUBSCRIPTION: {
+                "Machines should have a vulnerability assessment solution": Assesment(
+                    resource_id=resource_id,
+                    resource_name="vm1",
+                    status="Unhealthy",
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_auto_provisioning_vulnerabilty_assessments_machines_on.defender_auto_provisioning_vulnerabilty_assessments_machines_on.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_auto_provisioning_vulnerabilty_assessments_machines_on.defender_auto_provisioning_vulnerabilty_assessments_machines_on import (
+                defender_auto_provisioning_vulnerabilty_assessments_machines_on,
+            )
+
+            check = defender_auto_provisioning_vulnerabilty_assessments_machines_on()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Vulnerability assessment is not set up in all VMs in subscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "vm1"
+            assert result[0].resource_id == resource_id
+
+    def test_defender_machines_vulnerability_assessment_solution(self):
+        resource_id = str(uuid4())
+        defender_client = mock.MagicMock
+        defender_client.assessments = {
+            AZURE_SUBSCRIPTION: {
+                "Machines should have a vulnerability assessment solution": Assesment(
+                    resource_id=resource_id,
+                    resource_name="vm1",
+                    status="Healthy",
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_auto_provisioning_vulnerabilty_assessments_machines_on.defender_auto_provisioning_vulnerabilty_assessments_machines_on.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_auto_provisioning_vulnerabilty_assessments_machines_on.defender_auto_provisioning_vulnerabilty_assessments_machines_on import (
+                defender_auto_provisioning_vulnerabilty_assessments_machines_on,
+            )
+
+            check = defender_auto_provisioning_vulnerabilty_assessments_machines_on()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Vulnerability assessment is set up in all VMs in subscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "vm1"
+            assert result[0].resource_id == resource_id
diff --git a/tests/providers/azure/services/defender/defender_ensure_defender_for_app_services_is_on/defender_ensure_defender_for_app_services_is_on_test.py b/tests/providers/azure/services/defender/defender_ensure_defender_for_app_services_is_on/defender_ensure_defender_for_app_services_is_on_test.py
index 83bf9fe5c86..fc659680abf 100644
--- a/tests/providers/azure/services/defender/defender_ensure_defender_for_app_services_is_on/defender_ensure_defender_for_app_services_is_on_test.py
+++ b/tests/providers/azure/services/defender/defender_ensure_defender_for_app_services_is_on/defender_ensure_defender_for_app_services_is_on_test.py
@@ -1,9 +1,8 @@
 from unittest import mock
 from uuid import uuid4
 
-from prowler.providers.azure.services.defender.defender_service import Defender_Pricing
-
-AZURE_SUSCRIPTION = str(uuid4())
+from prowler.providers.azure.services.defender.defender_service import Pricing
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
 
 
 class Test_defender_ensure_defender_for_app_services_is_on:
@@ -27,8 +26,8 @@ def test_defender_app_services_pricing_tier_not_standard(self):
         resource_id = str(uuid4())
         defender_client = mock.MagicMock
         defender_client.pricings = {
-            AZURE_SUSCRIPTION: {
-                "AppServices": Defender_Pricing(
+            AZURE_SUBSCRIPTION: {
+                "AppServices": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Not Standard",
                     free_trial_remaining_time=0,
@@ -50,9 +49,9 @@ def test_defender_app_services_pricing_tier_not_standard(self):
             assert result[0].status == "FAIL"
             assert (
                 result[0].status_extended
-                == f"Defender plan Defender for App Services from subscription {AZURE_SUSCRIPTION} is set to OFF (pricing tier not standard)."
+                == f"Defender plan Defender for App Services from subscription {AZURE_SUBSCRIPTION} is set to OFF (pricing tier not standard)."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == "Defender plan App Services"
             assert result[0].resource_id == resource_id
 
@@ -60,8 +59,8 @@ def test_defender_app_services_pricing_tier_standard(self):
         resource_id = str(uuid4())
         defender_client = mock.MagicMock
         defender_client.pricings = {
-            AZURE_SUSCRIPTION: {
-                "AppServices": Defender_Pricing(
+            AZURE_SUBSCRIPTION: {
+                "AppServices": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Standard",
                     free_trial_remaining_time=0,
@@ -83,8 +82,8 @@ def test_defender_app_services_pricing_tier_standard(self):
             assert result[0].status == "PASS"
             assert (
                 result[0].status_extended
-                == f"Defender plan Defender for App Services from subscription {AZURE_SUSCRIPTION} is set to ON (pricing tier standard)."
+                == f"Defender plan Defender for App Services from subscription {AZURE_SUBSCRIPTION} is set to ON (pricing tier standard)."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == "Defender plan App Services"
             assert result[0].resource_id == resource_id
diff --git a/tests/providers/azure/services/defender/defender_ensure_defender_for_arm_is_on/defender_ensure_defender_for_arm_is_on_test.py b/tests/providers/azure/services/defender/defender_ensure_defender_for_arm_is_on/defender_ensure_defender_for_arm_is_on_test.py
index ce4aa31033e..648ae416329 100644
--- a/tests/providers/azure/services/defender/defender_ensure_defender_for_arm_is_on/defender_ensure_defender_for_arm_is_on_test.py
+++ b/tests/providers/azure/services/defender/defender_ensure_defender_for_arm_is_on/defender_ensure_defender_for_arm_is_on_test.py
@@ -1,9 +1,8 @@
 from unittest import mock
 from uuid import uuid4
 
-from prowler.providers.azure.services.defender.defender_service import Defender_Pricing
-
-AZURE_SUSCRIPTION = str(uuid4())
+from prowler.providers.azure.services.defender.defender_service import Pricing
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
 
 
 class Test_defender_ensure_defender_for_arm_is_on:
@@ -27,8 +26,8 @@ def test_defender_arm_pricing_tier_not_standard(self):
         resource_id = str(uuid4())
         defender_client = mock.MagicMock
         defender_client.pricings = {
-            AZURE_SUSCRIPTION: {
-                "Arm": Defender_Pricing(
+            AZURE_SUBSCRIPTION: {
+                "Arm": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Not Standard",
                     free_trial_remaining_time=0,
@@ -50,9 +49,9 @@ def test_defender_arm_pricing_tier_not_standard(self):
             assert result[0].status == "FAIL"
             assert (
                 result[0].status_extended
-                == f"Defender plan Defender for ARM from subscription {AZURE_SUSCRIPTION} is set to OFF (pricing tier not standard)."
+                == f"Defender plan Defender for ARM from subscription {AZURE_SUBSCRIPTION} is set to OFF (pricing tier not standard)."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == "Defender plan ARM"
             assert result[0].resource_id == resource_id
 
@@ -60,8 +59,8 @@ def test_defender_arm_pricing_tier_standard(self):
         resource_id = str(uuid4())
         defender_client = mock.MagicMock
         defender_client.pricings = {
-            AZURE_SUSCRIPTION: {
-                "Arm": Defender_Pricing(
+            AZURE_SUBSCRIPTION: {
+                "Arm": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Standard",
                     free_trial_remaining_time=0,
@@ -83,8 +82,8 @@ def test_defender_arm_pricing_tier_standard(self):
             assert result[0].status == "PASS"
             assert (
                 result[0].status_extended
-                == f"Defender plan Defender for ARM from subscription {AZURE_SUSCRIPTION} is set to ON (pricing tier standard)."
+                == f"Defender plan Defender for ARM from subscription {AZURE_SUBSCRIPTION} is set to ON (pricing tier standard)."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == "Defender plan ARM"
             assert result[0].resource_id == resource_id
diff --git a/tests/providers/azure/services/defender/defender_ensure_defender_for_azure_sql_databases_is_on/defender_ensure_defender_for_azure_sql_databases_is_on_test.py b/tests/providers/azure/services/defender/defender_ensure_defender_for_azure_sql_databases_is_on/defender_ensure_defender_for_azure_sql_databases_is_on_test.py
index 70de6a0a929..3e4a4a5ec61 100644
--- a/tests/providers/azure/services/defender/defender_ensure_defender_for_azure_sql_databases_is_on/defender_ensure_defender_for_azure_sql_databases_is_on_test.py
+++ b/tests/providers/azure/services/defender/defender_ensure_defender_for_azure_sql_databases_is_on/defender_ensure_defender_for_azure_sql_databases_is_on_test.py
@@ -1,9 +1,8 @@
 from unittest import mock
 from uuid import uuid4
 
-from prowler.providers.azure.services.defender.defender_service import Defender_Pricing
-
-AZURE_SUSCRIPTION = str(uuid4())
+from prowler.providers.azure.services.defender.defender_service import Pricing
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
 
 
 class Test_defender_ensure_defender_for_azure_sql_databases_is_on:
@@ -27,8 +26,8 @@ def test_defender_sql_databases_pricing_tier_not_standard(self):
         resource_id = str(uuid4())
         defender_client = mock.MagicMock
         defender_client.pricings = {
-            AZURE_SUSCRIPTION: {
-                "SqlServers": Defender_Pricing(
+            AZURE_SUBSCRIPTION: {
+                "SqlServers": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Not Standard",
                     free_trial_remaining_time=0,
@@ -50,9 +49,9 @@ def test_defender_sql_databases_pricing_tier_not_standard(self):
             assert result[0].status == "FAIL"
             assert (
                 result[0].status_extended
-                == f"Defender plan Defender for Azure SQL DB Servers from subscription {AZURE_SUSCRIPTION} is set to OFF (pricing tier not standard)."
+                == f"Defender plan Defender for Azure SQL DB Servers from subscription {AZURE_SUBSCRIPTION} is set to OFF (pricing tier not standard)."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == "Defender plan Azure SQL DB Servers"
             assert result[0].resource_id == resource_id
 
@@ -60,8 +59,8 @@ def test_defender_sql_databases_pricing_tier_standard(self):
         resource_id = str(uuid4())
         defender_client = mock.MagicMock
         defender_client.pricings = {
-            AZURE_SUSCRIPTION: {
-                "SqlServers": Defender_Pricing(
+            AZURE_SUBSCRIPTION: {
+                "SqlServers": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Standard",
                     free_trial_remaining_time=0,
@@ -83,8 +82,8 @@ def test_defender_sql_databases_pricing_tier_standard(self):
             assert result[0].status == "PASS"
             assert (
                 result[0].status_extended
-                == f"Defender plan Defender for Azure SQL DB Servers from subscription {AZURE_SUSCRIPTION} is set to ON (pricing tier standard)."
+                == f"Defender plan Defender for Azure SQL DB Servers from subscription {AZURE_SUBSCRIPTION} is set to ON (pricing tier standard)."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == "Defender plan Azure SQL DB Servers"
             assert result[0].resource_id == resource_id
diff --git a/tests/providers/azure/services/defender/defender_ensure_defender_for_containers_is_on/defender_ensure_defender_for_containers_is_on_test.py b/tests/providers/azure/services/defender/defender_ensure_defender_for_containers_is_on/defender_ensure_defender_for_containers_is_on_test.py
index 5e7779aea7b..fae2a50db3e 100644
--- a/tests/providers/azure/services/defender/defender_ensure_defender_for_containers_is_on/defender_ensure_defender_for_containers_is_on_test.py
+++ b/tests/providers/azure/services/defender/defender_ensure_defender_for_containers_is_on/defender_ensure_defender_for_containers_is_on_test.py
@@ -1,9 +1,8 @@
 from unittest import mock
 from uuid import uuid4
 
-from prowler.providers.azure.services.defender.defender_service import Defender_Pricing
-
-AZURE_SUSCRIPTION = str(uuid4())
+from prowler.providers.azure.services.defender.defender_service import Pricing
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
 
 
 class Test_defender_ensure_defender_for_containers_is_on:
@@ -27,8 +26,8 @@ def test_defender_container_registries_pricing_tier_not_standard(self):
         resource_id = str(uuid4())
         defender_client = mock.MagicMock
         defender_client.pricings = {
-            AZURE_SUSCRIPTION: {
-                "Containers": Defender_Pricing(
+            AZURE_SUBSCRIPTION: {
+                "Containers": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Not Standard",
                     free_trial_remaining_time=0,
@@ -50,9 +49,9 @@ def test_defender_container_registries_pricing_tier_not_standard(self):
             assert result[0].status == "FAIL"
             assert (
                 result[0].status_extended
-                == f"Defender plan Defender for Containers from subscription {AZURE_SUSCRIPTION} is set to OFF (pricing tier not standard)."
+                == f"Defender plan Defender for Containers from subscription {AZURE_SUBSCRIPTION} is set to OFF (pricing tier not standard)."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == "Defender plan Container Registries"
             assert result[0].resource_id == resource_id
 
@@ -60,8 +59,8 @@ def test_defender_container_registries_pricing_tier_standard(self):
         resource_id = str(uuid4())
         defender_client = mock.MagicMock
         defender_client.pricings = {
-            AZURE_SUSCRIPTION: {
-                "Containers": Defender_Pricing(
+            AZURE_SUBSCRIPTION: {
+                "Containers": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Standard",
                     free_trial_remaining_time=0,
@@ -83,8 +82,8 @@ def test_defender_container_registries_pricing_tier_standard(self):
             assert result[0].status == "PASS"
             assert (
                 result[0].status_extended
-                == f"Defender plan Defender for Containers from subscription {AZURE_SUSCRIPTION} is set to ON (pricing tier standard)."
+                == f"Defender plan Defender for Containers from subscription {AZURE_SUBSCRIPTION} is set to ON (pricing tier standard)."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == "Defender plan Container Registries"
             assert result[0].resource_id == resource_id
diff --git a/tests/providers/azure/services/defender/defender_ensure_defender_for_cosmosdb_is_on/defender_ensure_defender_for_cosmosdb_is_on_test.py b/tests/providers/azure/services/defender/defender_ensure_defender_for_cosmosdb_is_on/defender_ensure_defender_for_cosmosdb_is_on_test.py
index 596b501a61a..c32631743f6 100644
--- a/tests/providers/azure/services/defender/defender_ensure_defender_for_cosmosdb_is_on/defender_ensure_defender_for_cosmosdb_is_on_test.py
+++ b/tests/providers/azure/services/defender/defender_ensure_defender_for_cosmosdb_is_on/defender_ensure_defender_for_cosmosdb_is_on_test.py
@@ -1,9 +1,8 @@
 from unittest import mock
 from uuid import uuid4
 
-from prowler.providers.azure.services.defender.defender_service import Defender_Pricing
-
-AZURE_SUSCRIPTION = str(uuid4())
+from prowler.providers.azure.services.defender.defender_service import Pricing
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
 
 
 class Test_defender_ensure_defender_for_cosmosdb_is_on:
@@ -27,8 +26,8 @@ def test_defender_cosmosdb_pricing_tier_not_standard(self):
         resource_id = str(uuid4())
         defender_client = mock.MagicMock
         defender_client.pricings = {
-            AZURE_SUSCRIPTION: {
-                "CosmosDbs": Defender_Pricing(
+            AZURE_SUBSCRIPTION: {
+                "CosmosDbs": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Not Standard",
                     free_trial_remaining_time=0,
@@ -50,9 +49,9 @@ def test_defender_cosmosdb_pricing_tier_not_standard(self):
             assert result[0].status == "FAIL"
             assert (
                 result[0].status_extended
-                == f"Defender plan Defender for Cosmos DB from subscription {AZURE_SUSCRIPTION} is set to OFF (pricing tier not standard)."
+                == f"Defender plan Defender for Cosmos DB from subscription {AZURE_SUBSCRIPTION} is set to OFF (pricing tier not standard)."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == "Defender plan Cosmos DB"
             assert result[0].resource_id == resource_id
 
@@ -60,8 +59,8 @@ def test_defender_cosmosdb_pricing_tier_standard(self):
         resource_id = str(uuid4())
         defender_client = mock.MagicMock
         defender_client.pricings = {
-            AZURE_SUSCRIPTION: {
-                "CosmosDbs": Defender_Pricing(
+            AZURE_SUBSCRIPTION: {
+                "CosmosDbs": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Standard",
                     free_trial_remaining_time=0,
@@ -83,8 +82,8 @@ def test_defender_cosmosdb_pricing_tier_standard(self):
             assert result[0].status == "PASS"
             assert (
                 result[0].status_extended
-                == f"Defender plan Defender for Cosmos DB from subscription {AZURE_SUSCRIPTION} is set to ON (pricing tier standard)."
+                == f"Defender plan Defender for Cosmos DB from subscription {AZURE_SUBSCRIPTION} is set to ON (pricing tier standard)."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == "Defender plan Cosmos DB"
             assert result[0].resource_id == resource_id
diff --git a/tests/providers/azure/services/defender/defender_ensure_defender_for_databases_is_on/defender_ensure_defender_for_databases_is_on_test.py b/tests/providers/azure/services/defender/defender_ensure_defender_for_databases_is_on/defender_ensure_defender_for_databases_is_on_test.py
index 52ae36f7ca9..bcc0abb88af 100644
--- a/tests/providers/azure/services/defender/defender_ensure_defender_for_databases_is_on/defender_ensure_defender_for_databases_is_on_test.py
+++ b/tests/providers/azure/services/defender/defender_ensure_defender_for_databases_is_on/defender_ensure_defender_for_databases_is_on_test.py
@@ -1,9 +1,8 @@
 from unittest import mock
 from uuid import uuid4
 
-from prowler.providers.azure.services.defender.defender_service import Defender_Pricing
-
-AZURE_SUSCRIPTION = str(uuid4())
+from prowler.providers.azure.services.defender.defender_service import Pricing
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
 
 
 class Test_defender_ensure_defender_for_databases_is_on:
@@ -27,8 +26,8 @@ def test_defender_databases_sql_servers(self):
         resource_id = str(uuid4())
         defender_client = mock.MagicMock
         defender_client.pricings = {
-            AZURE_SUSCRIPTION: {
-                "SqlServers": Defender_Pricing(
+            AZURE_SUBSCRIPTION: {
+                "SqlServers": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Standard",
                     free_trial_remaining_time=0,
@@ -52,8 +51,8 @@ def test_defender_databases_sql_server_virtual_machines(self):
         resource_id = str(uuid4())
         defender_client = mock.MagicMock
         defender_client.pricings = {
-            AZURE_SUSCRIPTION: {
-                "SqlServerVirtualMachines": Defender_Pricing(
+            AZURE_SUBSCRIPTION: {
+                "SqlServerVirtualMachines": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Standard",
                     free_trial_remaining_time=0,
@@ -77,8 +76,8 @@ def test_defender_databases_open_source_relation_databases(self):
         resource_id = str(uuid4())
         defender_client = mock.MagicMock
         defender_client.pricings = {
-            AZURE_SUSCRIPTION: {
-                "OpenSourceRelationalDatabases": Defender_Pricing(
+            AZURE_SUBSCRIPTION: {
+                "OpenSourceRelationalDatabases": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Standard",
                     free_trial_remaining_time=0,
@@ -102,8 +101,8 @@ def test_defender_databases_cosmosdbs(self):
         resource_id = str(uuid4())
         defender_client = mock.MagicMock
         defender_client.pricings = {
-            AZURE_SUSCRIPTION: {
-                "CosmosDbs": Defender_Pricing(
+            AZURE_SUBSCRIPTION: {
+                "CosmosDbs": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Standard",
                     free_trial_remaining_time=0,
@@ -127,23 +126,23 @@ def test_defender_databases_all_standard(self):
         resource_id = str(uuid4())
         defender_client = mock.MagicMock
         defender_client.pricings = {
-            AZURE_SUSCRIPTION: {
-                "SqlServers": Defender_Pricing(
+            AZURE_SUBSCRIPTION: {
+                "SqlServers": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Standard",
                     free_trial_remaining_time=0,
                 ),
-                "SqlServerVirtualMachines": Defender_Pricing(
+                "SqlServerVirtualMachines": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Standard",
                     free_trial_remaining_time=0,
                 ),
-                "OpenSourceRelationalDatabases": Defender_Pricing(
+                "OpenSourceRelationalDatabases": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Standard",
                     free_trial_remaining_time=0,
                 ),
-                "CosmosDbs": Defender_Pricing(
+                "CosmosDbs": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Standard",
                     free_trial_remaining_time=0,
@@ -165,9 +164,9 @@ def test_defender_databases_all_standard(self):
             assert result[0].status == "PASS"
             assert (
                 result[0].status_extended
-                == f"Defender plan Defender for Databases from subscription {AZURE_SUSCRIPTION} is set to ON (pricing tier standard)."
+                == f"Defender plan Defender for Databases from subscription {AZURE_SUBSCRIPTION} is set to ON (pricing tier standard)."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == "Defender plan Databases"
             assert result[0].resource_id == resource_id
 
@@ -175,23 +174,23 @@ def test_defender_databases_cosmosdb_not_standard(self):
         resource_id = str(uuid4())
         defender_client = mock.MagicMock
         defender_client.pricings = {
-            AZURE_SUSCRIPTION: {
-                "SqlServers": Defender_Pricing(
+            AZURE_SUBSCRIPTION: {
+                "SqlServers": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Standard",
                     free_trial_remaining_time=0,
                 ),
-                "SqlServerVirtualMachines": Defender_Pricing(
+                "SqlServerVirtualMachines": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Standard",
                     free_trial_remaining_time=0,
                 ),
-                "OpenSourceRelationalDatabases": Defender_Pricing(
+                "OpenSourceRelationalDatabases": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Standard",
                     free_trial_remaining_time=0,
                 ),
-                "CosmosDbs": Defender_Pricing(
+                "CosmosDbs": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Not Standard",
                     free_trial_remaining_time=0,
@@ -213,8 +212,8 @@ def test_defender_databases_cosmosdb_not_standard(self):
             assert result[0].status == "FAIL"
             assert (
                 result[0].status_extended
-                == f"Defender plan Defender for Databases from subscription {AZURE_SUSCRIPTION} is set to OFF (pricing tier not standard)."
+                == f"Defender plan Defender for Databases from subscription {AZURE_SUBSCRIPTION} is set to OFF (pricing tier not standard)."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == "Defender plan Databases"
             assert result[0].resource_id == resource_id
diff --git a/tests/providers/azure/services/defender/defender_ensure_defender_for_dns_is_on/defender_ensure_defender_for_dns_is_on_test.py b/tests/providers/azure/services/defender/defender_ensure_defender_for_dns_is_on/defender_ensure_defender_for_dns_is_on_test.py
index d34e176ae26..f3335dbc9b6 100644
--- a/tests/providers/azure/services/defender/defender_ensure_defender_for_dns_is_on/defender_ensure_defender_for_dns_is_on_test.py
+++ b/tests/providers/azure/services/defender/defender_ensure_defender_for_dns_is_on/defender_ensure_defender_for_dns_is_on_test.py
@@ -1,9 +1,8 @@
 from unittest import mock
 from uuid import uuid4
 
-from prowler.providers.azure.services.defender.defender_service import Defender_Pricing
-
-AZURE_SUSCRIPTION = str(uuid4())
+from prowler.providers.azure.services.defender.defender_service import Pricing
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
 
 
 class Test_defender_ensure_defender_for_dns_is_on:
@@ -27,8 +26,8 @@ def test_defender_dns_pricing_tier_not_standard(self):
         resource_id = str(uuid4())
         defender_client = mock.MagicMock
         defender_client.pricings = {
-            AZURE_SUSCRIPTION: {
-                "Dns": Defender_Pricing(
+            AZURE_SUBSCRIPTION: {
+                "Dns": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Not Standard",
                     free_trial_remaining_time=0,
@@ -50,9 +49,9 @@ def test_defender_dns_pricing_tier_not_standard(self):
             assert result[0].status == "FAIL"
             assert (
                 result[0].status_extended
-                == f"Defender plan Defender for DNS from subscription {AZURE_SUSCRIPTION} is set to OFF (pricing tier not standard)."
+                == f"Defender plan Defender for DNS from subscription {AZURE_SUBSCRIPTION} is set to OFF (pricing tier not standard)."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == "Defender plan DNS"
             assert result[0].resource_id == resource_id
 
@@ -60,8 +59,8 @@ def test_defender_dns_pricing_tier_standard(self):
         resource_id = str(uuid4())
         defender_client = mock.MagicMock
         defender_client.pricings = {
-            AZURE_SUSCRIPTION: {
-                "Dns": Defender_Pricing(
+            AZURE_SUBSCRIPTION: {
+                "Dns": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Standard",
                     free_trial_remaining_time=0,
@@ -83,8 +82,8 @@ def test_defender_dns_pricing_tier_standard(self):
             assert result[0].status == "PASS"
             assert (
                 result[0].status_extended
-                == f"Defender plan Defender for DNS from subscription {AZURE_SUSCRIPTION} is set to ON (pricing tier standard)."
+                == f"Defender plan Defender for DNS from subscription {AZURE_SUBSCRIPTION} is set to ON (pricing tier standard)."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == "Defender plan DNS"
             assert result[0].resource_id == resource_id
diff --git a/tests/providers/azure/services/defender/defender_ensure_defender_for_keyvault_is_on/defender_ensure_defender_for_keyvault_is_on_test.py b/tests/providers/azure/services/defender/defender_ensure_defender_for_keyvault_is_on/defender_ensure_defender_for_keyvault_is_on_test.py
index e9cb4764bd8..b9d88bc5f31 100644
--- a/tests/providers/azure/services/defender/defender_ensure_defender_for_keyvault_is_on/defender_ensure_defender_for_keyvault_is_on_test.py
+++ b/tests/providers/azure/services/defender/defender_ensure_defender_for_keyvault_is_on/defender_ensure_defender_for_keyvault_is_on_test.py
@@ -1,9 +1,8 @@
 from unittest import mock
 from uuid import uuid4
 
-from prowler.providers.azure.services.defender.defender_service import Defender_Pricing
-
-AZURE_SUSCRIPTION = str(uuid4())
+from prowler.providers.azure.services.defender.defender_service import Pricing
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
 
 
 class Test_defender_ensure_defender_for_keyvault_is_on:
@@ -27,8 +26,8 @@ def test_defender_keyvaults_pricing_tier_not_standard(self):
         resource_id = str(uuid4())
         defender_client = mock.MagicMock
         defender_client.pricings = {
-            AZURE_SUSCRIPTION: {
-                "KeyVaults": Defender_Pricing(
+            AZURE_SUBSCRIPTION: {
+                "KeyVaults": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Not Standard",
                     free_trial_remaining_time=0,
@@ -50,9 +49,9 @@ def test_defender_keyvaults_pricing_tier_not_standard(self):
             assert result[0].status == "FAIL"
             assert (
                 result[0].status_extended
-                == f"Defender plan Defender for KeyVaults from subscription {AZURE_SUSCRIPTION} is set to OFF (pricing tier not standard)."
+                == f"Defender plan Defender for KeyVaults from subscription {AZURE_SUBSCRIPTION} is set to OFF (pricing tier not standard)."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == "Defender plan KeyVaults"
             assert result[0].resource_id == resource_id
 
@@ -60,8 +59,8 @@ def test_defender_keyvaults_pricing_tier_standard(self):
         resource_id = str(uuid4())
         defender_client = mock.MagicMock
         defender_client.pricings = {
-            AZURE_SUSCRIPTION: {
-                "KeyVaults": Defender_Pricing(
+            AZURE_SUBSCRIPTION: {
+                "KeyVaults": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Standard",
                     free_trial_remaining_time=0,
@@ -83,8 +82,8 @@ def test_defender_keyvaults_pricing_tier_standard(self):
             assert result[0].status == "PASS"
             assert (
                 result[0].status_extended
-                == f"Defender plan Defender for KeyVaults from subscription {AZURE_SUSCRIPTION} is set to ON (pricing tier standard)."
+                == f"Defender plan Defender for KeyVaults from subscription {AZURE_SUBSCRIPTION} is set to ON (pricing tier standard)."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == "Defender plan KeyVaults"
             assert result[0].resource_id == resource_id
diff --git a/tests/providers/azure/services/defender/defender_ensure_defender_for_os_relational_databases_is_on/defender_ensure_defender_for_os_relational_databases_is_on_test.py b/tests/providers/azure/services/defender/defender_ensure_defender_for_os_relational_databases_is_on/defender_ensure_defender_for_os_relational_databases_is_on_test.py
index f63c447b782..416ac243088 100644
--- a/tests/providers/azure/services/defender/defender_ensure_defender_for_os_relational_databases_is_on/defender_ensure_defender_for_os_relational_databases_is_on_test.py
+++ b/tests/providers/azure/services/defender/defender_ensure_defender_for_os_relational_databases_is_on/defender_ensure_defender_for_os_relational_databases_is_on_test.py
@@ -1,9 +1,8 @@
 from unittest import mock
 from uuid import uuid4
 
-from prowler.providers.azure.services.defender.defender_service import Defender_Pricing
-
-AZURE_SUSCRIPTION = str(uuid4())
+from prowler.providers.azure.services.defender.defender_service import Pricing
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
 
 
 class Test_defender_ensure_defender_for_os_relational_databases_is_on:
@@ -27,8 +26,8 @@ def test_defender_os_relational_databases_pricing_tier_not_standard(self):
         resource_id = str(uuid4())
         defender_client = mock.MagicMock
         defender_client.pricings = {
-            AZURE_SUSCRIPTION: {
-                "OpenSourceRelationalDatabases": Defender_Pricing(
+            AZURE_SUBSCRIPTION: {
+                "OpenSourceRelationalDatabases": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Not Standard",
                     free_trial_remaining_time=0,
@@ -50,9 +49,9 @@ def test_defender_os_relational_databases_pricing_tier_not_standard(self):
             assert result[0].status == "FAIL"
             assert (
                 result[0].status_extended
-                == f"Defender plan Defender for Open-Source Relational Databases from subscription {AZURE_SUSCRIPTION} is set to OFF (pricing tier not standard)."
+                == f"Defender plan Defender for Open-Source Relational Databases from subscription {AZURE_SUBSCRIPTION} is set to OFF (pricing tier not standard)."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert (
                 result[0].resource_name
                 == "Defender plan Open-Source Relational Databases"
@@ -63,8 +62,8 @@ def test_defender_os_relational_databases_pricing_tier_standard(self):
         resource_id = str(uuid4())
         defender_client = mock.MagicMock
         defender_client.pricings = {
-            AZURE_SUSCRIPTION: {
-                "OpenSourceRelationalDatabases": Defender_Pricing(
+            AZURE_SUBSCRIPTION: {
+                "OpenSourceRelationalDatabases": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Standard",
                     free_trial_remaining_time=0,
@@ -86,9 +85,9 @@ def test_defender_os_relational_databases_pricing_tier_standard(self):
             assert result[0].status == "PASS"
             assert (
                 result[0].status_extended
-                == f"Defender plan Defender for Open-Source Relational Databases from subscription {AZURE_SUSCRIPTION} is set to ON (pricing tier standard)."
+                == f"Defender plan Defender for Open-Source Relational Databases from subscription {AZURE_SUBSCRIPTION} is set to ON (pricing tier standard)."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert (
                 result[0].resource_name
                 == "Defender plan Open-Source Relational Databases"
diff --git a/tests/providers/azure/services/defender/defender_ensure_defender_for_server_is_on/defender_ensure_defender_for_server_is_on_test.py b/tests/providers/azure/services/defender/defender_ensure_defender_for_server_is_on/defender_ensure_defender_for_server_is_on_test.py
index ff5c2211e68..e23c8380ceb 100644
--- a/tests/providers/azure/services/defender/defender_ensure_defender_for_server_is_on/defender_ensure_defender_for_server_is_on_test.py
+++ b/tests/providers/azure/services/defender/defender_ensure_defender_for_server_is_on/defender_ensure_defender_for_server_is_on_test.py
@@ -1,9 +1,8 @@
 from unittest import mock
 from uuid import uuid4
 
-from prowler.providers.azure.services.defender.defender_service import Defender_Pricing
-
-AZURE_SUSCRIPTION = str(uuid4())
+from prowler.providers.azure.services.defender.defender_service import Pricing
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
 
 
 class Test_defender_ensure_defender_for_server_is_on:
@@ -27,8 +26,8 @@ def test_defender_server_pricing_tier_not_standard(self):
         resource_id = str(uuid4())
         defender_client = mock.MagicMock
         defender_client.pricings = {
-            AZURE_SUSCRIPTION: {
-                "VirtualMachines": Defender_Pricing(
+            AZURE_SUBSCRIPTION: {
+                "VirtualMachines": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Not Standard",
                     free_trial_remaining_time=0,
@@ -50,9 +49,9 @@ def test_defender_server_pricing_tier_not_standard(self):
             assert result[0].status == "FAIL"
             assert (
                 result[0].status_extended
-                == f"Defender plan Defender for Servers from subscription {AZURE_SUSCRIPTION} is set to OFF (pricing tier not standard)."
+                == f"Defender plan Defender for Servers from subscription {AZURE_SUBSCRIPTION} is set to OFF (pricing tier not standard)."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == "Defender plan Servers"
             assert result[0].resource_id == resource_id
 
@@ -60,8 +59,8 @@ def test_defender_server_pricing_tier_standard(self):
         resource_id = str(uuid4())
         defender_client = mock.MagicMock
         defender_client.pricings = {
-            AZURE_SUSCRIPTION: {
-                "VirtualMachines": Defender_Pricing(
+            AZURE_SUBSCRIPTION: {
+                "VirtualMachines": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Standard",
                     free_trial_remaining_time=0,
@@ -83,8 +82,8 @@ def test_defender_server_pricing_tier_standard(self):
             assert result[0].status == "PASS"
             assert (
                 result[0].status_extended
-                == f"Defender plan Defender for Servers from subscription {AZURE_SUSCRIPTION} is set to ON (pricing tier standard)."
+                == f"Defender plan Defender for Servers from subscription {AZURE_SUBSCRIPTION} is set to ON (pricing tier standard)."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == "Defender plan Servers"
             assert result[0].resource_id == resource_id
diff --git a/tests/providers/azure/services/defender/defender_ensure_defender_for_sql_servers_is_on/defender_ensure_defender_for_sql_servers_is_on_test.py b/tests/providers/azure/services/defender/defender_ensure_defender_for_sql_servers_is_on/defender_ensure_defender_for_sql_servers_is_on_test.py
index d08a93f44c4..7e37b8695fc 100644
--- a/tests/providers/azure/services/defender/defender_ensure_defender_for_sql_servers_is_on/defender_ensure_defender_for_sql_servers_is_on_test.py
+++ b/tests/providers/azure/services/defender/defender_ensure_defender_for_sql_servers_is_on/defender_ensure_defender_for_sql_servers_is_on_test.py
@@ -1,9 +1,8 @@
 from unittest import mock
 from uuid import uuid4
 
-from prowler.providers.azure.services.defender.defender_service import Defender_Pricing
-
-AZURE_SUSCRIPTION = str(uuid4())
+from prowler.providers.azure.services.defender.defender_service import Pricing
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
 
 
 class Test_defender_ensure_defender_for_sql_servers_is_on:
@@ -27,8 +26,8 @@ def test_defender_server_pricing_tier_not_standard(self):
         resource_id = str(uuid4())
         defender_client = mock.MagicMock
         defender_client.pricings = {
-            AZURE_SUSCRIPTION: {
-                "SqlServerVirtualMachines": Defender_Pricing(
+            AZURE_SUBSCRIPTION: {
+                "SqlServerVirtualMachines": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Not Standard",
                     free_trial_remaining_time=0,
@@ -50,9 +49,9 @@ def test_defender_server_pricing_tier_not_standard(self):
             assert result[0].status == "FAIL"
             assert (
                 result[0].status_extended
-                == f"Defender plan Defender for SQL Server VMs from subscription {AZURE_SUSCRIPTION} is set to OFF (pricing tier not standard)."
+                == f"Defender plan Defender for SQL Server VMs from subscription {AZURE_SUBSCRIPTION} is set to OFF (pricing tier not standard)."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == "Defender plan SQL Server VMs"
             assert result[0].resource_id == resource_id
 
@@ -60,8 +59,8 @@ def test_defender_server_pricing_tier_standard(self):
         resource_id = str(uuid4())
         defender_client = mock.MagicMock
         defender_client.pricings = {
-            AZURE_SUSCRIPTION: {
-                "SqlServerVirtualMachines": Defender_Pricing(
+            AZURE_SUBSCRIPTION: {
+                "SqlServerVirtualMachines": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Standard",
                     free_trial_remaining_time=0,
@@ -83,8 +82,8 @@ def test_defender_server_pricing_tier_standard(self):
             assert result[0].status == "PASS"
             assert (
                 result[0].status_extended
-                == f"Defender plan Defender for SQL Server VMs from subscription {AZURE_SUSCRIPTION} is set to ON (pricing tier standard)."
+                == f"Defender plan Defender for SQL Server VMs from subscription {AZURE_SUBSCRIPTION} is set to ON (pricing tier standard)."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == "Defender plan SQL Server VMs"
             assert result[0].resource_id == resource_id
diff --git a/tests/providers/azure/services/defender/defender_ensure_defender_for_storage_is_on/defender_ensure_defender_for_storage_is_on_test.py b/tests/providers/azure/services/defender/defender_ensure_defender_for_storage_is_on/defender_ensure_defender_for_storage_is_on_test.py
index 0cae2e389d8..92895271f44 100644
--- a/tests/providers/azure/services/defender/defender_ensure_defender_for_storage_is_on/defender_ensure_defender_for_storage_is_on_test.py
+++ b/tests/providers/azure/services/defender/defender_ensure_defender_for_storage_is_on/defender_ensure_defender_for_storage_is_on_test.py
@@ -1,9 +1,8 @@
 from unittest import mock
 from uuid import uuid4
 
-from prowler.providers.azure.services.defender.defender_service import Defender_Pricing
-
-AZURE_SUSCRIPTION = str(uuid4())
+from prowler.providers.azure.services.defender.defender_service import Pricing
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
 
 
 class Test_defender_ensure_defender_for_storage_is_on:
@@ -27,8 +26,8 @@ def test_defender_server_pricing_tier_not_standard(self):
         resource_id = str(uuid4())
         defender_client = mock.MagicMock
         defender_client.pricings = {
-            AZURE_SUSCRIPTION: {
-                "StorageAccounts": Defender_Pricing(
+            AZURE_SUBSCRIPTION: {
+                "StorageAccounts": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Not Standard",
                     free_trial_remaining_time=0,
@@ -50,9 +49,9 @@ def test_defender_server_pricing_tier_not_standard(self):
             assert result[0].status == "FAIL"
             assert (
                 result[0].status_extended
-                == f"Defender plan Defender for Storage Accounts from subscription {AZURE_SUSCRIPTION} is set to OFF (pricing tier not standard)."
+                == f"Defender plan Defender for Storage Accounts from subscription {AZURE_SUBSCRIPTION} is set to OFF (pricing tier not standard)."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == "Defender plan Storage Accounts"
             assert result[0].resource_id == resource_id
 
@@ -60,8 +59,8 @@ def test_defender_server_pricing_tier_standard(self):
         resource_id = str(uuid4())
         defender_client = mock.MagicMock
         defender_client.pricings = {
-            AZURE_SUSCRIPTION: {
-                "StorageAccounts": Defender_Pricing(
+            AZURE_SUBSCRIPTION: {
+                "StorageAccounts": Pricing(
                     resource_id=resource_id,
                     pricing_tier="Standard",
                     free_trial_remaining_time=0,
@@ -83,8 +82,8 @@ def test_defender_server_pricing_tier_standard(self):
             assert result[0].status == "PASS"
             assert (
                 result[0].status_extended
-                == f"Defender plan Defender for Storage Accounts from subscription {AZURE_SUSCRIPTION} is set to ON (pricing tier standard)."
+                == f"Defender plan Defender for Storage Accounts from subscription {AZURE_SUBSCRIPTION} is set to ON (pricing tier standard)."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == "Defender plan Storage Accounts"
             assert result[0].resource_id == resource_id
diff --git a/tests/providers/azure/services/defender/defender_ensure_iot_hub_defender_is_on/defender_ensure_iot_hub_defender_is_on_test.py b/tests/providers/azure/services/defender/defender_ensure_iot_hub_defender_is_on/defender_ensure_iot_hub_defender_is_on_test.py
new file mode 100644
index 00000000000..68d96b51347
--- /dev/null
+++ b/tests/providers/azure/services/defender/defender_ensure_iot_hub_defender_is_on/defender_ensure_iot_hub_defender_is_on_test.py
@@ -0,0 +1,153 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.defender.defender_service import (
+    IoTSecuritySolution,
+)
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_defender_ensure_iot_hub_defender_is_on:
+    def test_defender_no_subscriptions(self):
+        defender_client = mock.MagicMock
+        defender_client.iot_security_solutions = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_ensure_iot_hub_defender_is_on.defender_ensure_iot_hub_defender_is_on.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_ensure_iot_hub_defender_is_on.defender_ensure_iot_hub_defender_is_on import (
+                defender_ensure_iot_hub_defender_is_on,
+            )
+
+            check = defender_ensure_iot_hub_defender_is_on()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_defender_no_iot_hub_solutions(self):
+        defender_client = mock.MagicMock
+        defender_client.iot_security_solutions = {AZURE_SUBSCRIPTION: {}}
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_ensure_iot_hub_defender_is_on.defender_ensure_iot_hub_defender_is_on.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_ensure_iot_hub_defender_is_on.defender_ensure_iot_hub_defender_is_on import (
+                defender_ensure_iot_hub_defender_is_on,
+            )
+
+            check = defender_ensure_iot_hub_defender_is_on()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"No IoT Security Solutions found in the subscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].resource_name == "IoT Hub Defender"
+            assert result[0].resource_id == "IoT Hub Defender"
+
+    def test_defender_iot_hub_solution_disabled(self):
+        resource_id = str(uuid4())
+        defender_client = mock.MagicMock
+        defender_client.iot_security_solutions = {
+            AZURE_SUBSCRIPTION: {
+                "iot_sec_solution": IoTSecuritySolution(
+                    resource_id=resource_id, status="Disabled"
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_ensure_iot_hub_defender_is_on.defender_ensure_iot_hub_defender_is_on.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_ensure_iot_hub_defender_is_on.defender_ensure_iot_hub_defender_is_on import (
+                defender_ensure_iot_hub_defender_is_on,
+            )
+
+            check = defender_ensure_iot_hub_defender_is_on()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"The security solution iot_sec_solution is disabled in susbscription {AZURE_SUBSCRIPTION}"
+            )
+            assert result[0].resource_name == "iot_sec_solution"
+            assert result[0].resource_id == resource_id
+
+    def test_defender_iot_hub_solution_enabled(self):
+        resource_id = str(uuid4())
+        defender_client = mock.MagicMock
+        defender_client.iot_security_solutions = {
+            AZURE_SUBSCRIPTION: {
+                "iot_sec_solution": IoTSecuritySolution(
+                    resource_id=resource_id, status="Enabled"
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_ensure_iot_hub_defender_is_on.defender_ensure_iot_hub_defender_is_on.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_ensure_iot_hub_defender_is_on.defender_ensure_iot_hub_defender_is_on import (
+                defender_ensure_iot_hub_defender_is_on,
+            )
+
+            check = defender_ensure_iot_hub_defender_is_on()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"The security solution iot_sec_solution is enabled in susbscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].resource_name == "iot_sec_solution"
+            assert result[0].resource_id == resource_id
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+
+    def test_defender_multiple_iot_hub_solution_enabled_and_disabled(self):
+        resource_id_enabled = str(uuid4())
+        resource_id_disabled = str(uuid4())
+        defender_client = mock.MagicMock
+        defender_client.iot_security_solutions = {
+            AZURE_SUBSCRIPTION: {
+                "iot_sec_solution_enabled": IoTSecuritySolution(
+                    resource_id=resource_id_enabled, status="Enabled"
+                ),
+                "iot_sec_solution_disabled": IoTSecuritySolution(
+                    resource_id=resource_id_disabled, status="Disabled"
+                ),
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_ensure_iot_hub_defender_is_on.defender_ensure_iot_hub_defender_is_on.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_ensure_iot_hub_defender_is_on.defender_ensure_iot_hub_defender_is_on import (
+                defender_ensure_iot_hub_defender_is_on,
+            )
+
+            check = defender_ensure_iot_hub_defender_is_on()
+            result = check.execute()
+            assert len(result) == 2
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"The security solution iot_sec_solution_enabled is enabled in susbscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].resource_name == "iot_sec_solution_enabled"
+            assert result[0].resource_id == resource_id_enabled
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+
+            assert result[1].status == "FAIL"
+            assert (
+                result[1].status_extended
+                == f"The security solution iot_sec_solution_disabled is disabled in susbscription {AZURE_SUBSCRIPTION}"
+            )
+            assert result[1].resource_name == "iot_sec_solution_disabled"
+            assert result[1].resource_id == resource_id_disabled
+            assert result[1].subscription == AZURE_SUBSCRIPTION
diff --git a/tests/providers/azure/services/defender/defender_ensure_mcas_is_enabled/defender_ensure_mcas_is_enabled_test.py b/tests/providers/azure/services/defender/defender_ensure_mcas_is_enabled/defender_ensure_mcas_is_enabled_test.py
new file mode 100644
index 00000000000..860de799a19
--- /dev/null
+++ b/tests/providers/azure/services/defender/defender_ensure_mcas_is_enabled/defender_ensure_mcas_is_enabled_test.py
@@ -0,0 +1,115 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.defender.defender_service import Setting
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_defender_ensure_mcas_is_enabled:
+    def test_defender_no_settings(self):
+        defender_client = mock.MagicMock
+        defender_client.settings = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_ensure_mcas_is_enabled.defender_ensure_mcas_is_enabled.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_ensure_mcas_is_enabled.defender_ensure_mcas_is_enabled import (
+                defender_ensure_mcas_is_enabled,
+            )
+
+            check = defender_ensure_mcas_is_enabled()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_defender_mcas_disabled(self):
+        resource_id = str(uuid4())
+        defender_client = mock.MagicMock
+        defender_client.settings = {
+            AZURE_SUBSCRIPTION: {
+                "MCAS": Setting(
+                    resource_id=resource_id,
+                    resource_type="Microsoft.Security/locations/settings",
+                    kind="DataExportSettings",
+                    enabled=False,
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_ensure_mcas_is_enabled.defender_ensure_mcas_is_enabled.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_ensure_mcas_is_enabled.defender_ensure_mcas_is_enabled import (
+                defender_ensure_mcas_is_enabled,
+            )
+
+            check = defender_ensure_mcas_is_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Microsoft Defender for Cloud Apps is disabeld for subscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "MCAS"
+            assert result[0].resource_id == resource_id
+
+    def test_defender_mcas_enabled(self):
+        resource_id = str(uuid4())
+        defender_client = mock.MagicMock
+        defender_client.settings = {
+            AZURE_SUBSCRIPTION: {
+                "MCAS": Setting(
+                    resource_id=resource_id,
+                    resource_type="Microsoft.Security/locations/settings",
+                    kind="DataExportSettings",
+                    enabled=True,
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_ensure_mcas_is_enabled.defender_ensure_mcas_is_enabled.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_ensure_mcas_is_enabled.defender_ensure_mcas_is_enabled import (
+                defender_ensure_mcas_is_enabled,
+            )
+
+            check = defender_ensure_mcas_is_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Microsoft Defender for Cloud Apps is enabled for subscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "MCAS"
+            assert result[0].resource_id == resource_id
+
+    def test_defender_mcas_no_settings(self):
+        defender_client = mock.MagicMock
+        defender_client.settings = {AZURE_SUBSCRIPTION: {}}
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_ensure_mcas_is_enabled.defender_ensure_mcas_is_enabled.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_ensure_mcas_is_enabled.defender_ensure_mcas_is_enabled import (
+                defender_ensure_mcas_is_enabled,
+            )
+
+            check = defender_ensure_mcas_is_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Microsoft Defender for Cloud Apps not exists for subscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "MCAS"
+            assert result[0].resource_id == "MCAS"
diff --git a/tests/providers/azure/services/defender/defender_ensure_notify_alerts_severity_is_high/defender_ensure_notify_alerts_severity_is_high_test.py b/tests/providers/azure/services/defender/defender_ensure_notify_alerts_severity_is_high/defender_ensure_notify_alerts_severity_is_high_test.py
new file mode 100644
index 00000000000..48b1f1bd084
--- /dev/null
+++ b/tests/providers/azure/services/defender/defender_ensure_notify_alerts_severity_is_high/defender_ensure_notify_alerts_severity_is_high_test.py
@@ -0,0 +1,136 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.defender.defender_service import SecurityContacts
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_defender_ensure_notify_alerts_severity_is_high:
+    def test_defender_no_subscriptions(self):
+        defender_client = mock.MagicMock
+        defender_client.security_contacts = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_ensure_notify_alerts_severity_is_high.defender_ensure_notify_alerts_severity_is_high.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_ensure_notify_alerts_severity_is_high.defender_ensure_notify_alerts_severity_is_high import (
+                defender_ensure_notify_alerts_severity_is_high,
+            )
+
+            check = defender_ensure_notify_alerts_severity_is_high()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_defender_severity_alerts_low(self):
+        resource_id = str(uuid4())
+        defender_client = mock.MagicMock
+        defender_client.security_contacts = {
+            AZURE_SUBSCRIPTION: {
+                "default": SecurityContacts(
+                    resource_id=resource_id,
+                    emails="",
+                    phone="",
+                    alert_notifications_minimal_severity="Low",
+                    alert_notifications_state="On",
+                    notified_roles=["Contributor"],
+                    notified_roles_state="On",
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_ensure_notify_alerts_severity_is_high.defender_ensure_notify_alerts_severity_is_high.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_ensure_notify_alerts_severity_is_high.defender_ensure_notify_alerts_severity_is_high import (
+                defender_ensure_notify_alerts_severity_is_high,
+            )
+
+            check = defender_ensure_notify_alerts_severity_is_high()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Notifiy alerts are not enabled for severity high in susbscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "default"
+            assert result[0].resource_id == resource_id
+
+    def test_defender_severity_alerts_high(self):
+        resource_id = str(uuid4())
+        defender_client = mock.MagicMock
+        defender_client.security_contacts = {
+            AZURE_SUBSCRIPTION: {
+                "default": SecurityContacts(
+                    resource_id=resource_id,
+                    emails="",
+                    phone="",
+                    alert_notifications_minimal_severity="High",
+                    alert_notifications_state="On",
+                    notified_roles=["Contributor"],
+                    notified_roles_state="On",
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_ensure_notify_alerts_severity_is_high.defender_ensure_notify_alerts_severity_is_high.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_ensure_notify_alerts_severity_is_high.defender_ensure_notify_alerts_severity_is_high import (
+                defender_ensure_notify_alerts_severity_is_high,
+            )
+
+            check = defender_ensure_notify_alerts_severity_is_high()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Notifiy alerts are enabled for severity high in susbscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "default"
+            assert result[0].resource_id == resource_id
+
+    def test_defender_default_security_contact_not_found(self):
+        defender_client = mock.MagicMock
+        defender_client.security_contacts = {
+            AZURE_SUBSCRIPTION: {
+                "default": SecurityContacts(
+                    resource_id=f"/subscriptions/{AZURE_SUBSCRIPTION}/providers/Microsoft.Security/securityContacts/default",
+                    emails="",
+                    phone="",
+                    alert_notifications_minimal_severity="",
+                    alert_notifications_state="",
+                    notified_roles=[""],
+                    notified_roles_state="",
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_ensure_notify_alerts_severity_is_high.defender_ensure_notify_alerts_severity_is_high.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_ensure_notify_alerts_severity_is_high.defender_ensure_notify_alerts_severity_is_high import (
+                defender_ensure_notify_alerts_severity_is_high,
+            )
+
+            check = defender_ensure_notify_alerts_severity_is_high()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Notifiy alerts are not enabled for severity high in susbscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "default"
+            assert (
+                result[0].resource_id
+                == f"/subscriptions/{AZURE_SUBSCRIPTION}/providers/Microsoft.Security/securityContacts/default"
+            )
diff --git a/tests/providers/azure/services/defender/defender_ensure_notify_emails_to_owners/defender_ensure_notify_emails_to_owners_test.py b/tests/providers/azure/services/defender/defender_ensure_notify_emails_to_owners/defender_ensure_notify_emails_to_owners_test.py
new file mode 100644
index 00000000000..4df36a115f1
--- /dev/null
+++ b/tests/providers/azure/services/defender/defender_ensure_notify_emails_to_owners/defender_ensure_notify_emails_to_owners_test.py
@@ -0,0 +1,173 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.defender.defender_service import SecurityContacts
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_defender_ensure_notify_emails_to_owners:
+    def test_defender_no_subscriptions(self):
+        defender_client = mock.MagicMock
+        defender_client.security_contacts = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_ensure_notify_emails_to_owners.defender_ensure_notify_emails_to_owners.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_ensure_notify_emails_to_owners.defender_ensure_notify_emails_to_owners import (
+                defender_ensure_notify_emails_to_owners,
+            )
+
+            check = defender_ensure_notify_emails_to_owners()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_defender_no_notify_emails_to_owners(self):
+        resource_id = str(uuid4())
+        defender_client = mock.MagicMock
+        defender_client.security_contacts = {
+            AZURE_SUBSCRIPTION: {
+                "default": SecurityContacts(
+                    resource_id=resource_id,
+                    emails="",
+                    phone="",
+                    alert_notifications_minimal_severity="High",
+                    alert_notifications_state="On",
+                    notified_roles=["Contributor"],
+                    notified_roles_state="On",
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_ensure_notify_emails_to_owners.defender_ensure_notify_emails_to_owners.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_ensure_notify_emails_to_owners.defender_ensure_notify_emails_to_owners import (
+                defender_ensure_notify_emails_to_owners,
+            )
+
+            check = defender_ensure_notify_emails_to_owners()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"The Owner role is not notified for subscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "default"
+            assert result[0].resource_id == resource_id
+
+    def test_defender_notify_emails_to_owners_off(self):
+        resource_id = str(uuid4())
+        defender_client = mock.MagicMock
+        defender_client.security_contacts = {
+            AZURE_SUBSCRIPTION: {
+                "default": SecurityContacts(
+                    resource_id=resource_id,
+                    emails="",
+                    phone="",
+                    alert_notifications_minimal_severity="High",
+                    alert_notifications_state="On",
+                    notified_roles=["Owner", "Contributor"],
+                    notified_roles_state="Off",
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_ensure_notify_emails_to_owners.defender_ensure_notify_emails_to_owners.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_ensure_notify_emails_to_owners.defender_ensure_notify_emails_to_owners import (
+                defender_ensure_notify_emails_to_owners,
+            )
+
+            check = defender_ensure_notify_emails_to_owners()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"The Owner role is not notified for subscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "default"
+            assert result[0].resource_id == resource_id
+
+    def test_defender_notify_emails_to_owners(self):
+        resource_id = str(uuid4())
+        defender_client = mock.MagicMock
+        defender_client.security_contacts = {
+            AZURE_SUBSCRIPTION: {
+                "default": SecurityContacts(
+                    resource_id=resource_id,
+                    emails="test@test.es",
+                    phone="",
+                    alert_notifications_minimal_severity="High",
+                    alert_notifications_state="On",
+                    notified_roles=["Owner", "Contributor"],
+                    notified_roles_state="On",
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_ensure_notify_emails_to_owners.defender_ensure_notify_emails_to_owners.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_ensure_notify_emails_to_owners.defender_ensure_notify_emails_to_owners import (
+                defender_ensure_notify_emails_to_owners,
+            )
+
+            check = defender_ensure_notify_emails_to_owners()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"The Owner role is notified for subscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "default"
+            assert result[0].resource_id == resource_id
+
+    def test_defender_default_security_contact_not_found(self):
+        defender_client = mock.MagicMock
+        defender_client.security_contacts = {
+            AZURE_SUBSCRIPTION: {
+                "default": SecurityContacts(
+                    resource_id=f"/subscriptions/{AZURE_SUBSCRIPTION}/providers/Microsoft.Security/securityContacts/default",
+                    emails="",
+                    phone="",
+                    alert_notifications_minimal_severity="",
+                    alert_notifications_state="",
+                    notified_roles=[""],
+                    notified_roles_state="",
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_ensure_notify_emails_to_owners.defender_ensure_notify_emails_to_owners.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_ensure_notify_emails_to_owners.defender_ensure_notify_emails_to_owners import (
+                defender_ensure_notify_emails_to_owners,
+            )
+
+            check = defender_ensure_notify_emails_to_owners()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"The Owner role is not notified for subscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "default"
+            assert (
+                result[0].resource_id
+                == f"/subscriptions/{AZURE_SUBSCRIPTION}/providers/Microsoft.Security/securityContacts/default"
+            )
diff --git a/tests/providers/azure/services/defender/defender_ensure_system_updates_are_applied/defender_ensure_system_updates_are_applied_test.py b/tests/providers/azure/services/defender/defender_ensure_system_updates_are_applied/defender_ensure_system_updates_are_applied_test.py
new file mode 100644
index 00000000000..176c2634a5e
--- /dev/null
+++ b/tests/providers/azure/services/defender/defender_ensure_system_updates_are_applied/defender_ensure_system_updates_are_applied_test.py
@@ -0,0 +1,199 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.defender.defender_service import Assesment
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_defender_ensure_system_updates_are_applied:
+    def test_defender_no_app_services(self):
+        defender_client = mock.MagicMock
+        defender_client.assessments = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_ensure_system_updates_are_applied.defender_ensure_system_updates_are_applied.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_ensure_system_updates_are_applied.defender_ensure_system_updates_are_applied import (
+                defender_ensure_system_updates_are_applied,
+            )
+
+            check = defender_ensure_system_updates_are_applied()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_defender_machines_no_log_analytics_installed(self):
+        resource_id = str(uuid4())
+        defender_client = mock.MagicMock
+        defender_client.assessments = {
+            AZURE_SUBSCRIPTION: {
+                "Log Analytics agent should be installed on virtual machines": Assesment(
+                    resource_id=resource_id,
+                    resource_name="vm1",
+                    status="Unhealthy",
+                ),
+                "Machines should be configured to periodically check for missing system updates": Assesment(
+                    resource_id=resource_id,
+                    resource_name="vm1",
+                    status="Healthy",
+                ),
+                "System updates should be installed on your machines": Assesment(
+                    resource_id=resource_id,
+                    resource_name="vm1",
+                    status="Healthy",
+                ),
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_ensure_system_updates_are_applied.defender_ensure_system_updates_are_applied.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_ensure_system_updates_are_applied.defender_ensure_system_updates_are_applied import (
+                defender_ensure_system_updates_are_applied,
+            )
+
+            check = defender_ensure_system_updates_are_applied()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"System updates are not applied for all the VMs in the subscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "vm1"
+            assert result[0].resource_id == resource_id
+
+    def test_defender_machines_no_configured_to_periodically_check_for_system_updates(
+        self,
+    ):
+        resource_id = str(uuid4())
+        defender_client = mock.MagicMock
+        defender_client.assessments = {
+            AZURE_SUBSCRIPTION: {
+                "Log Analytics agent should be installed on virtual machines": Assesment(
+                    resource_id=resource_id,
+                    resource_name="vm1",
+                    status="Healthy",
+                ),
+                "Machines should be configured to periodically check for missing system updates": Assesment(
+                    resource_id=resource_id,
+                    resource_name="vm1",
+                    status="Unhealthy",
+                ),
+                "System updates should be installed on your machines": Assesment(
+                    resource_id=resource_id,
+                    resource_name="vm1",
+                    status="Healthy",
+                ),
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_ensure_system_updates_are_applied.defender_ensure_system_updates_are_applied.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_ensure_system_updates_are_applied.defender_ensure_system_updates_are_applied import (
+                defender_ensure_system_updates_are_applied,
+            )
+
+            check = defender_ensure_system_updates_are_applied()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"System updates are not applied for all the VMs in the subscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "vm1"
+            assert result[0].resource_id == resource_id
+
+    def test_defender_machines_no_system_updates_installed(self):
+        resource_id = str(uuid4())
+        defender_client = mock.MagicMock
+        defender_client.assessments = {
+            AZURE_SUBSCRIPTION: {
+                "Log Analytics agent should be installed on virtual machines": Assesment(
+                    resource_id=resource_id,
+                    resource_name="vm1",
+                    status="Healthy",
+                ),
+                "Machines should be configured to periodically check for missing system updates": Assesment(
+                    resource_id=resource_id,
+                    resource_name="vm1",
+                    status="Healthy",
+                ),
+                "System updates should be installed on your machines": Assesment(
+                    resource_id=resource_id,
+                    resource_name="vm1",
+                    status="Unhealthy",
+                ),
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_ensure_system_updates_are_applied.defender_ensure_system_updates_are_applied.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_ensure_system_updates_are_applied.defender_ensure_system_updates_are_applied import (
+                defender_ensure_system_updates_are_applied,
+            )
+
+            check = defender_ensure_system_updates_are_applied()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"System updates are not applied for all the VMs in the subscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "vm1"
+            assert result[0].resource_id == resource_id
+
+    def test_defender_machines_configured_to_periodically_check_for_system_updates_and_system_updates_installed(
+        self,
+    ):
+        resource_id = str(uuid4())
+        defender_client = mock.MagicMock
+        defender_client.assessments = {
+            AZURE_SUBSCRIPTION: {
+                "Log Analytics agent should be installed on virtual machines": Assesment(
+                    resource_id=resource_id,
+                    resource_name="vm1",
+                    status="Healthy",
+                ),
+                "Machines should be configured to periodically check for missing system updates": Assesment(
+                    resource_id=resource_id,
+                    resource_name="vm1",
+                    status="Healthy",
+                ),
+                "System updates should be installed on your machines": Assesment(
+                    resource_id=resource_id,
+                    resource_name="vm1",
+                    status="Healthy",
+                ),
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_ensure_system_updates_are_applied.defender_ensure_system_updates_are_applied.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_ensure_system_updates_are_applied.defender_ensure_system_updates_are_applied import (
+                defender_ensure_system_updates_are_applied,
+            )
+
+            check = defender_ensure_system_updates_are_applied()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"System updates are applied for all the VMs in the subscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "vm1"
+            assert result[0].resource_id == resource_id
diff --git a/tests/providers/azure/services/defender/defender_ensure_wdatp_is_enabled/defender_ensure_wdatp_is_enabled_test.py b/tests/providers/azure/services/defender/defender_ensure_wdatp_is_enabled/defender_ensure_wdatp_is_enabled_test.py
new file mode 100644
index 00000000000..9d5a91d008b
--- /dev/null
+++ b/tests/providers/azure/services/defender/defender_ensure_wdatp_is_enabled/defender_ensure_wdatp_is_enabled_test.py
@@ -0,0 +1,115 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.defender.defender_service import Setting
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_defender_ensure_wdatp_is_enabled:
+    def test_defender_no_settings(self):
+        defender_client = mock.MagicMock
+        defender_client.settings = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_ensure_wdatp_is_enabled.defender_ensure_wdatp_is_enabled.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_ensure_wdatp_is_enabled.defender_ensure_wdatp_is_enabled import (
+                defender_ensure_wdatp_is_enabled,
+            )
+
+            check = defender_ensure_wdatp_is_enabled()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_defender_wdatp_disabled(self):
+        resource_id = str(uuid4())
+        defender_client = mock.MagicMock
+        defender_client.settings = {
+            AZURE_SUBSCRIPTION: {
+                "WDATP": Setting(
+                    resource_id=resource_id,
+                    resource_type="Microsoft.Security/locations/settings",
+                    kind="DataExportSettings",
+                    enabled=False,
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_ensure_wdatp_is_enabled.defender_ensure_wdatp_is_enabled.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_ensure_wdatp_is_enabled.defender_ensure_wdatp_is_enabled import (
+                defender_ensure_wdatp_is_enabled,
+            )
+
+            check = defender_ensure_wdatp_is_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Microsoft Defender for Endpoint integration is disabeld for subscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "WDATP"
+            assert result[0].resource_id == resource_id
+
+    def test_defender_wdatp_enabled(self):
+        resource_id = str(uuid4())
+        defender_client = mock.MagicMock
+        defender_client.settings = {
+            AZURE_SUBSCRIPTION: {
+                "WDATP": Setting(
+                    resource_id=resource_id,
+                    resource_type="Microsoft.Security/locations/settings",
+                    kind="DataExportSettings",
+                    enabled=True,
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_ensure_wdatp_is_enabled.defender_ensure_wdatp_is_enabled.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_ensure_wdatp_is_enabled.defender_ensure_wdatp_is_enabled import (
+                defender_ensure_wdatp_is_enabled,
+            )
+
+            check = defender_ensure_wdatp_is_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Microsoft Defender for Endpoint integration is enabled for subscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "WDATP"
+            assert result[0].resource_id == resource_id
+
+    def test_defender_wdatp_no_settings(self):
+        defender_client = mock.MagicMock
+        defender_client.settings = {AZURE_SUBSCRIPTION: {}}
+
+        with mock.patch(
+            "prowler.providers.azure.services.defender.defender_ensure_wdatp_is_enabled.defender_ensure_wdatp_is_enabled.defender_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.defender.defender_ensure_wdatp_is_enabled.defender_ensure_wdatp_is_enabled import (
+                defender_ensure_wdatp_is_enabled,
+            )
+
+            check = defender_ensure_wdatp_is_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Microsoft Defender for Endpoint integration not exists for subscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "WDATP"
+            assert result[0].resource_id == "WDATP"
diff --git a/tests/providers/azure/services/defender/defender_service_test.py b/tests/providers/azure/services/defender/defender_service_test.py
new file mode 100644
index 00000000000..ba8d5757102
--- /dev/null
+++ b/tests/providers/azure/services/defender/defender_service_test.py
@@ -0,0 +1,255 @@
+from datetime import timedelta
+from unittest.mock import patch
+
+from prowler.providers.azure.services.defender.defender_service import (
+    Assesment,
+    AutoProvisioningSetting,
+    Defender,
+    IoTSecuritySolution,
+    Pricing,
+    SecurityContacts,
+    Setting,
+)
+from tests.providers.azure.azure_fixtures import (
+    AZURE_SUBSCRIPTION,
+    set_mocked_azure_audit_info,
+)
+
+
+def mock_defender_get_pricings(_):
+    return {
+        AZURE_SUBSCRIPTION: {
+            "Standard": Pricing(
+                resource_id="resource_id",
+                pricing_tier="pricing_tier",
+                free_trial_remaining_time=timedelta(days=1),
+            )
+        }
+    }
+
+
+def mock_defender_get_auto_provisioning_settings(_):
+    return {
+        AZURE_SUBSCRIPTION: {
+            "default": AutoProvisioningSetting(
+                resource_id="/subscriptions/resource_id",
+                resource_name="default",
+                resource_type="Microsoft.Security/autoProvisioningSettings",
+                auto_provision="On",
+            )
+        }
+    }
+
+
+def mock_defender_get_assessments(_):
+    return {
+        AZURE_SUBSCRIPTION: {
+            "default": Assesment(
+                resource_id="/subscriptions/resource_id",
+                resource_name="default",
+                status="Healthy",
+            )
+        }
+    }
+
+
+def mock_defender_get_security_contacts(_):
+    return {
+        AZURE_SUBSCRIPTION: {
+            "default": SecurityContacts(
+                resource_id="/subscriptions/resource_id",
+                emails="user@user.com, test@test.es",
+                phone="666666666",
+                alert_notifications_minimal_severity="High",
+                alert_notifications_state="On",
+                notified_roles=["Owner", "Contributor"],
+                notified_roles_state="On",
+            )
+        }
+    }
+
+
+def mock_defender_get_settings(_):
+    return {
+        AZURE_SUBSCRIPTION: {
+            "MCAS": Setting(
+                resource_id="/subscriptions/resource_id",
+                resource_type="Microsoft.Security/locations/settings",
+                kind="DataExportSettings",
+                enabled=True,
+            )
+        }
+    }
+
+
+def mock_defender_get_iot_security_solutions(_):
+    return {
+        AZURE_SUBSCRIPTION: {
+            "iot_sec_solution": IoTSecuritySolution(
+                resource_id="/subscriptions/resource_id",
+                status="Enabled",
+            )
+        }
+    }
+
+
+@patch(
+    "prowler.providers.azure.services.defender.defender_service.Defender.__get_pricings__",
+    new=mock_defender_get_pricings,
+)
+@patch(
+    "prowler.providers.azure.services.defender.defender_service.Defender.__get_auto_provisioning_settings__",
+    new=mock_defender_get_auto_provisioning_settings,
+)
+@patch(
+    "prowler.providers.azure.services.defender.defender_service.Defender.__get_assessments__",
+    new=mock_defender_get_assessments,
+)
+@patch(
+    "prowler.providers.azure.services.defender.defender_service.Defender.__get_settings__",
+    new=mock_defender_get_settings,
+)
+@patch(
+    "prowler.providers.azure.services.defender.defender_service.Defender.__get_security_contacts__",
+    new=mock_defender_get_security_contacts,
+)
+@patch(
+    "prowler.providers.azure.services.defender.defender_service.Defender.__get_iot_security_solutions__",
+    new=mock_defender_get_iot_security_solutions,
+)
+class Test_Defender_Service:
+    def test__get_client__(self):
+        defender = Defender(set_mocked_azure_audit_info())
+        assert (
+            defender.clients[AZURE_SUBSCRIPTION].__class__.__name__ == "SecurityCenter"
+        )
+
+    def test__get_subscriptions__(self):
+        defender = Defender(set_mocked_azure_audit_info())
+        defender = Defender(set_mocked_azure_audit_info())
+        assert defender.subscriptions.__class__.__name__ == "dict"
+
+    def test__get_pricings__(self):
+        defender = Defender(set_mocked_azure_audit_info())
+        assert len(defender.pricings) == 1
+        assert (
+            defender.pricings[AZURE_SUBSCRIPTION]["Standard"].resource_id
+            == "resource_id"
+        )
+        assert (
+            defender.pricings[AZURE_SUBSCRIPTION]["Standard"].pricing_tier
+            == "pricing_tier"
+        )
+        assert defender.pricings[AZURE_SUBSCRIPTION][
+            "Standard"
+        ].free_trial_remaining_time == timedelta(days=1)
+
+    def test__get_auto_provisioning_settings__(self):
+        defender = Defender(set_mocked_azure_audit_info())
+        assert len(defender.auto_provisioning_settings) == 1
+        assert (
+            defender.auto_provisioning_settings[AZURE_SUBSCRIPTION][
+                "default"
+            ].resource_id
+            == "/subscriptions/resource_id"
+        )
+        assert (
+            defender.auto_provisioning_settings[AZURE_SUBSCRIPTION][
+                "default"
+            ].resource_name
+            == "default"
+        )
+        assert (
+            defender.auto_provisioning_settings[AZURE_SUBSCRIPTION][
+                "default"
+            ].resource_type
+            == "Microsoft.Security/autoProvisioningSettings"
+        )
+        assert (
+            defender.auto_provisioning_settings[AZURE_SUBSCRIPTION][
+                "default"
+            ].auto_provision
+            == "On"
+        )
+
+    def test__get_assessments__(self):
+        defender = Defender(set_mocked_azure_audit_info())
+        assert len(defender.assessments) == 1
+        assert (
+            defender.assessments[AZURE_SUBSCRIPTION]["default"].resource_id
+            == "/subscriptions/resource_id"
+        )
+        assert (
+            defender.assessments[AZURE_SUBSCRIPTION]["default"].resource_name
+            == "default"
+        )
+        assert defender.assessments[AZURE_SUBSCRIPTION]["default"].status == "Healthy"
+
+    def test__get_settings__(self):
+        defender = Defender(set_mocked_azure_audit_info())
+        assert len(defender.settings) == 1
+        assert (
+            defender.settings[AZURE_SUBSCRIPTION]["MCAS"].resource_id
+            == "/subscriptions/resource_id"
+        )
+        assert (
+            defender.settings[AZURE_SUBSCRIPTION]["MCAS"].resource_type
+            == "Microsoft.Security/locations/settings"
+        )
+        assert (
+            defender.settings[AZURE_SUBSCRIPTION]["MCAS"].kind == "DataExportSettings"
+        )
+        assert defender.settings[AZURE_SUBSCRIPTION]["MCAS"].enabled
+
+    def test__get_security_contacts__(self):
+        defender = Defender(set_mocked_azure_audit_info())
+        assert len(defender.security_contacts) == 1
+        assert (
+            defender.security_contacts[AZURE_SUBSCRIPTION]["default"].resource_id
+            == "/subscriptions/resource_id"
+        )
+        assert (
+            defender.security_contacts[AZURE_SUBSCRIPTION]["default"].emails
+            == "user@user.com, test@test.es"
+        )
+        assert (
+            defender.security_contacts[AZURE_SUBSCRIPTION]["default"].phone
+            == "666666666"
+        )
+        assert (
+            defender.security_contacts[AZURE_SUBSCRIPTION][
+                "default"
+            ].alert_notifications_minimal_severity
+            == "High"
+        )
+        assert (
+            defender.security_contacts[AZURE_SUBSCRIPTION][
+                "default"
+            ].alert_notifications_state
+            == "On"
+        )
+        assert defender.security_contacts[AZURE_SUBSCRIPTION][
+            "default"
+        ].notified_roles == ["Owner", "Contributor"]
+        assert (
+            defender.security_contacts[AZURE_SUBSCRIPTION][
+                "default"
+            ].notified_roles_state
+            == "On"
+        )
+
+    def test__get_iot_security_solutions__(self):
+        defender = Defender(set_mocked_azure_audit_info())
+        assert len(defender.iot_security_solutions) == 1
+        assert (
+            defender.iot_security_solutions[AZURE_SUBSCRIPTION][
+                "iot_sec_solution"
+            ].resource_id
+            == "/subscriptions/resource_id"
+        )
+        assert (
+            defender.iot_security_solutions[AZURE_SUBSCRIPTION][
+                "iot_sec_solution"
+            ].status
+            == "Enabled"
+        )
diff --git a/tests/providers/azure/services/iam/iam_custom_role_has_permissions_to_administer_resource_locks/iam_custom_role_has_permissions_to_administer_resource_locks_test.py b/tests/providers/azure/services/iam/iam_custom_role_has_permissions_to_administer_resource_locks/iam_custom_role_has_permissions_to_administer_resource_locks_test.py
new file mode 100644
index 00000000000..e407087c8dd
--- /dev/null
+++ b/tests/providers/azure/services/iam/iam_custom_role_has_permissions_to_administer_resource_locks/iam_custom_role_has_permissions_to_administer_resource_locks_test.py
@@ -0,0 +1,112 @@
+from unittest import mock
+from uuid import uuid4
+
+from azure.mgmt.authorization.v2022_04_01.models import Permission
+
+from prowler.providers.azure.services.iam.iam_service import Role
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_iam_custom_role_has_permissions_to_administer_resource_locks:
+    def test_iam_no_roles(self):
+        defender_client = mock.MagicMock
+        defender_client.custom_roles = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.iam.iam_custom_role_has_permissions_to_administer_resource_locks.iam_custom_role_has_permissions_to_administer_resource_locks.iam_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.iam.iam_custom_role_has_permissions_to_administer_resource_locks.iam_custom_role_has_permissions_to_administer_resource_locks import (
+                iam_custom_role_has_permissions_to_administer_resource_locks,
+            )
+
+            check = iam_custom_role_has_permissions_to_administer_resource_locks()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_iam_custom_owner_role_created_with_lock_administration_permissions(
+        self,
+    ):
+        defender_client = mock.MagicMock
+        role_name = "test-role"
+        defender_client.custom_roles = {
+            AZURE_SUBSCRIPTION: [
+                Role(
+                    id=str(uuid4()),
+                    name=role_name,
+                    type="CustomRole",
+                    assignable_scopes=["/.*", "/test"],
+                    permissions=[
+                        Permission(
+                            actions=[
+                                "Microsoft.Authorization/locks/*",
+                                "microsoft.aadiam/azureADMetrics/read",
+                            ]
+                        )
+                    ],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.iam.iam_custom_role_has_permissions_to_administer_resource_locks.iam_custom_role_has_permissions_to_administer_resource_locks.iam_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.iam.iam_custom_role_has_permissions_to_administer_resource_locks.iam_custom_role_has_permissions_to_administer_resource_locks import (
+                iam_custom_role_has_permissions_to_administer_resource_locks,
+            )
+
+            check = iam_custom_role_has_permissions_to_administer_resource_locks()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Role {role_name} from subscription {AZURE_SUBSCRIPTION} has permission to administer resource locks."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert (
+                result[0].resource_id
+                == defender_client.custom_roles[AZURE_SUBSCRIPTION][0].id
+            )
+            assert result[0].resource_name == role_name
+
+    def test_iam_custom_owner_role_created_with_no_lock_administration_permissions(
+        self,
+    ):
+        defender_client = mock.MagicMock
+        role_name = "test-role"
+        defender_client.custom_roles = {
+            AZURE_SUBSCRIPTION: [
+                Role(
+                    id=str(uuid4()),
+                    name=role_name,
+                    type="CustomRole",
+                    assignable_scopes=["/*"],
+                    permissions=[Permission(actions=["*"])],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.iam.iam_custom_role_has_permissions_to_administer_resource_locks.iam_custom_role_has_permissions_to_administer_resource_locks.iam_client",
+            new=defender_client,
+        ):
+            from prowler.providers.azure.services.iam.iam_custom_role_has_permissions_to_administer_resource_locks.iam_custom_role_has_permissions_to_administer_resource_locks import (
+                iam_custom_role_has_permissions_to_administer_resource_locks,
+            )
+
+            check = iam_custom_role_has_permissions_to_administer_resource_locks()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Role {role_name} from subscription {AZURE_SUBSCRIPTION} has no permission to administer resource locks."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert (
+                result[0].resource_id
+                == defender_client.custom_roles[AZURE_SUBSCRIPTION][0].id
+            )
+            assert result[0].resource_name == role_name
diff --git a/tests/providers/azure/services/iam/iam_subscription_roles_owner_custom_not_created/iam_subscription_roles_owner_custom_not_created_test.py b/tests/providers/azure/services/iam/iam_subscription_roles_owner_custom_not_created/iam_subscription_roles_owner_custom_not_created_test.py
index 238fcb13e32..a008d3f52a0 100644
--- a/tests/providers/azure/services/iam/iam_subscription_roles_owner_custom_not_created/iam_subscription_roles_owner_custom_not_created_test.py
+++ b/tests/providers/azure/services/iam/iam_subscription_roles_owner_custom_not_created/iam_subscription_roles_owner_custom_not_created_test.py
@@ -4,14 +4,13 @@
 from azure.mgmt.authorization.v2022_04_01.models import Permission
 
 from prowler.providers.azure.services.iam.iam_service import Role
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
 
-AZURE_SUSCRIPTION = str(uuid4())
 
-
-class Test_defender_ensure_defender_for_storage_is_on:
+class Test_iam_subscription_roles_owner_custom_not_created:
     def test_iam_no_roles(self):
         defender_client = mock.MagicMock
-        defender_client.roles = {}
+        defender_client.custom_roles = {}
 
         with mock.patch(
             "prowler.providers.azure.services.iam.iam_subscription_roles_owner_custom_not_created.iam_subscription_roles_owner_custom_not_created.iam_client",
@@ -28,12 +27,12 @@ def test_iam_no_roles(self):
     def test_iam_custom_owner_role_created_with_all(self):
         defender_client = mock.MagicMock
         role_name = "test-role"
-        defender_client.roles = {
-            AZURE_SUSCRIPTION: [
+        defender_client.custom_roles = {
+            AZURE_SUBSCRIPTION: [
                 Role(
                     id=str(uuid4()),
                     name=role_name,
-                    type="type-role",
+                    type="CustomRole",
                     assignable_scopes=["/*"],
                     permissions=[Permission(actions="*")],
                 )
@@ -54,14 +53,20 @@ def test_iam_custom_owner_role_created_with_all(self):
             assert result[0].status == "FAIL"
             assert (
                 result[0].status_extended
-                == f"Role {role_name} from subscription {AZURE_SUSCRIPTION} is a custom owner role."
+                == f"Role {role_name} from subscription {AZURE_SUBSCRIPTION} is a custom owner role."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert (
+                result[0].resource_id
+                == defender_client.custom_roles[AZURE_SUBSCRIPTION][0].id
             )
+            assert result[0].resource_name == role_name
 
     def test_iam_custom_owner_role_created_with_no_permissions(self):
         defender_client = mock.MagicMock
         role_name = "test-role"
-        defender_client.roles = {
-            AZURE_SUSCRIPTION: [
+        defender_client.custom_roles = {
+            AZURE_SUBSCRIPTION: [
                 Role(
                     id=str(uuid4()),
                     name=role_name,
@@ -86,5 +91,11 @@ def test_iam_custom_owner_role_created_with_no_permissions(self):
             assert result[0].status == "PASS"
             assert (
                 result[0].status_extended
-                == f"Role {role_name} from subscription {AZURE_SUSCRIPTION} is not a custom owner role."
+                == f"Role {role_name} from subscription {AZURE_SUBSCRIPTION} is not a custom owner role."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert (
+                result[0].resource_id
+                == defender_client.custom_roles[AZURE_SUBSCRIPTION][0].id
             )
+            assert result[0].resource_name == role_name
diff --git a/tests/providers/azure/services/keyvault/keyvault_key_expiration_set_in_non_rbac/keyvault_key_expiration_set_in_non_rbac_test.py b/tests/providers/azure/services/keyvault/keyvault_key_expiration_set_in_non_rbac/keyvault_key_expiration_set_in_non_rbac_test.py
new file mode 100644
index 00000000000..bf47f7b824b
--- /dev/null
+++ b/tests/providers/azure/services/keyvault/keyvault_key_expiration_set_in_non_rbac/keyvault_key_expiration_set_in_non_rbac_test.py
@@ -0,0 +1,151 @@
+from unittest import mock
+from uuid import uuid4
+
+from azure.mgmt.keyvault.v2023_07_01.models import KeyAttributes, VaultProperties
+
+from prowler.providers.azure.services.keyvault.keyvault_service import Key, KeyVaultInfo
+
+AZURE_SUBSCRIPTION = str(uuid4())
+
+
+class Test_keyvault_key_expiration_set_in_non_rbac:
+    def test_no_key_vaults(self):
+        keyvault_client = mock.MagicMock
+        keyvault_client.key_vaults = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_key_expiration_set_in_non_rbac.keyvault_key_expiration_set_in_non_rbac.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_key_expiration_set_in_non_rbac.keyvault_key_expiration_set_in_non_rbac import (
+                keyvault_key_expiration_set_in_non_rbac,
+            )
+
+            check = keyvault_key_expiration_set_in_non_rbac()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_no_keys(self):
+        keyvault_client = mock.MagicMock
+        keyvault_client.key_vaults = {
+            AZURE_SUBSCRIPTION: [
+                KeyVaultInfo(
+                    id="id",
+                    name="name",
+                    location="location",
+                    resource_group="resource_group",
+                    properties=VaultProperties(
+                        tenant_id="tenantid", sku="sku", enable_rbac_authorization=False
+                    ),
+                    keys=[],
+                    secrets=[],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_key_expiration_set_in_non_rbac.keyvault_key_expiration_set_in_non_rbac.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_key_expiration_set_in_non_rbac.keyvault_key_expiration_set_in_non_rbac import (
+                keyvault_key_expiration_set_in_non_rbac,
+            )
+
+            check = keyvault_key_expiration_set_in_non_rbac()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_key_vaults_invalid_keys(self):
+        keyvault_client = mock.MagicMock
+        keyvault_name = "Keyvault Name"
+        keyvault_id = str(uuid4())
+        key_name = "Key Name"
+        key = Key(
+            id="id",
+            name=key_name,
+            enabled=True,
+            location="location",
+            attributes=KeyAttributes(expires=None, enabled=True),
+        )
+        keyvault_client.key_vaults = {
+            AZURE_SUBSCRIPTION: [
+                KeyVaultInfo(
+                    id=keyvault_id,
+                    name=keyvault_name,
+                    location="location",
+                    resource_group="resource_group",
+                    properties=VaultProperties(
+                        tenant_id="tenantid", sku="sku", enable_rbac_authorization=False
+                    ),
+                    keys=[key],
+                    secrets=[],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_key_expiration_set_in_non_rbac.keyvault_key_expiration_set_in_non_rbac.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_key_expiration_set_in_non_rbac.keyvault_key_expiration_set_in_non_rbac import (
+                keyvault_key_expiration_set_in_non_rbac,
+            )
+
+            check = keyvault_key_expiration_set_in_non_rbac()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Keyvault {keyvault_name} from subscription {AZURE_SUBSCRIPTION} has the key {key_name} without expiration date set."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == keyvault_name
+            assert result[0].resource_id == keyvault_id
+
+    def test_key_vaults_valid_keys(self):
+        keyvault_client = mock.MagicMock
+        keyvault_name = "Keyvault Name"
+        keyvault_id = str(uuid4())
+        key = Key(
+            id="id",
+            name="name",
+            enabled=True,
+            location="location",
+            attributes=KeyAttributes(expires=49394, enabled=True),
+        )
+        keyvault_client.key_vaults = {
+            AZURE_SUBSCRIPTION: [
+                KeyVaultInfo(
+                    id=keyvault_id,
+                    name=keyvault_name,
+                    location="location",
+                    resource_group="resource_group",
+                    properties=VaultProperties(
+                        tenant_id="tenantid", sku="sku", enable_rbac_authorization=False
+                    ),
+                    keys=[key],
+                    secrets=[],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_key_expiration_set_in_non_rbac.keyvault_key_expiration_set_in_non_rbac.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_key_expiration_set_in_non_rbac.keyvault_key_expiration_set_in_non_rbac import (
+                keyvault_key_expiration_set_in_non_rbac,
+            )
+
+            check = keyvault_key_expiration_set_in_non_rbac()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Keyvault {keyvault_name} from subscription {AZURE_SUBSCRIPTION} has all the keys with expiration date set."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == keyvault_name
+            assert result[0].resource_id == keyvault_id
diff --git a/tests/providers/azure/services/keyvault/keyvault_key_rotation_enabled/keyvault_key_rotation_enabled_test.py b/tests/providers/azure/services/keyvault/keyvault_key_rotation_enabled/keyvault_key_rotation_enabled_test.py
new file mode 100644
index 00000000000..77ab9c6ccbd
--- /dev/null
+++ b/tests/providers/azure/services/keyvault/keyvault_key_rotation_enabled/keyvault_key_rotation_enabled_test.py
@@ -0,0 +1,163 @@
+from unittest import mock
+from uuid import uuid4
+
+from azure.keyvault.keys import KeyRotationLifetimeAction, KeyRotationPolicy
+from azure.mgmt.keyvault.v2023_07_01.models import KeyAttributes, VaultProperties
+
+from prowler.providers.azure.services.keyvault.keyvault_service import Key, KeyVaultInfo
+
+AZURE_SUBSCRIPTION = str(uuid4())
+
+
+class Test_keyvault_key_rotation_enabled:
+    def test_no_key_vaults(self):
+        keyvault_client = mock.MagicMock
+        keyvault_client.key_vaults = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_key_rotation_enabled.keyvault_key_rotation_enabled.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_key_rotation_enabled.keyvault_key_rotation_enabled import (
+                keyvault_key_rotation_enabled,
+            )
+
+            check = keyvault_key_rotation_enabled()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_no_keys(self):
+        keyvault_client = mock.MagicMock
+        keyvault_client.key_vaults = {
+            AZURE_SUBSCRIPTION: [
+                KeyVaultInfo(
+                    id="id",
+                    name="name",
+                    location="location",
+                    resource_group="resource_group",
+                    properties=VaultProperties(
+                        tenant_id="tenantid", sku="sku", enable_rbac_authorization=False
+                    ),
+                    keys=[],
+                    secrets=[],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_key_rotation_enabled.keyvault_key_rotation_enabled.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_key_rotation_enabled.keyvault_key_rotation_enabled import (
+                keyvault_key_rotation_enabled,
+            )
+
+            check = keyvault_key_rotation_enabled()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_key_without_rotation_policy(self):
+        keyvault_client = mock.MagicMock
+        keyvault_name = "keyvault_name"
+        key_name = "key_name"
+        keyvault_client.key_vaults = {
+            AZURE_SUBSCRIPTION: [
+                KeyVaultInfo(
+                    id="id",
+                    name=keyvault_name,
+                    location="location",
+                    resource_group="resource_group",
+                    properties=VaultProperties(
+                        tenant_id="tenantid", sku="sku", enable_rbac_authorization=False
+                    ),
+                    keys=[
+                        Key(
+                            id="id",
+                            name=key_name,
+                            enabled=True,
+                            location="location",
+                            attributes=KeyAttributes(expires=None, enabled=True),
+                            rotation_policy=None,
+                        )
+                    ],
+                    secrets=[],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_key_rotation_enabled.keyvault_key_rotation_enabled.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_key_rotation_enabled.keyvault_key_rotation_enabled import (
+                keyvault_key_rotation_enabled,
+            )
+
+            check = keyvault_key_rotation_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Keyvault {keyvault_name} from subscription {AZURE_SUBSCRIPTION} has the key {key_name} without rotation policy set."
+            )
+            assert result[0].resource_name == keyvault_name
+            assert result[0].resource_id == "id"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+
+    def test_key_with_rotation_policy(self):
+        keyvault_client = mock.MagicMock
+        keyvault_name = "keyvault_name"
+        key_name = "key_name"
+        keyvault_client.key_vaults = {
+            AZURE_SUBSCRIPTION: [
+                KeyVaultInfo(
+                    id="id",
+                    name=keyvault_name,
+                    location="location",
+                    resource_group="resource_group",
+                    properties=VaultProperties(
+                        tenant_id="tenantid", sku="sku", enable_rbac_authorization=False
+                    ),
+                    keys=[
+                        Key(
+                            id="id",
+                            name=key_name,
+                            enabled=True,
+                            location="location",
+                            attributes=KeyAttributes(expires=None, enabled=True),
+                            rotation_policy=KeyRotationPolicy(
+                                lifetime_actions=[
+                                    KeyRotationLifetimeAction(
+                                        action="Rotate",
+                                        lifetime_action_type="Rotate",
+                                        lifetime_percentage=80,
+                                    )
+                                ]
+                            ),
+                        )
+                    ],
+                    secrets=[],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_key_rotation_enabled.keyvault_key_rotation_enabled.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_key_rotation_enabled.keyvault_key_rotation_enabled import (
+                keyvault_key_rotation_enabled,
+            )
+
+            check = keyvault_key_rotation_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Keyvault {keyvault_name} from subscription {AZURE_SUBSCRIPTION} has the key {key_name} with rotation policy set."
+            )
+            assert result[0].resource_name == keyvault_name
+            assert result[0].resource_id == "id"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
diff --git a/tests/providers/azure/services/keyvault/keyvault_non_rbac_secret_expiration_set/keyvault_non_rbac_secret_expiration_set_test.py b/tests/providers/azure/services/keyvault/keyvault_non_rbac_secret_expiration_set/keyvault_non_rbac_secret_expiration_set_test.py
new file mode 100644
index 00000000000..d13084cd22b
--- /dev/null
+++ b/tests/providers/azure/services/keyvault/keyvault_non_rbac_secret_expiration_set/keyvault_non_rbac_secret_expiration_set_test.py
@@ -0,0 +1,210 @@
+from unittest import mock
+from uuid import uuid4
+
+from azure.mgmt.keyvault.v2023_07_01.models import SecretAttributes, VaultProperties
+
+from prowler.providers.azure.services.keyvault.keyvault_service import (
+    KeyVaultInfo,
+    Secret,
+)
+
+AZURE_SUBSCRIPTION = str(uuid4())
+
+
+class Test_keyvault_non_rbac_secret_expiration_set:
+    def test_no_key_vaults(self):
+        keyvault_client = mock.MagicMock
+        keyvault_client.key_vaults = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_non_rbac_secret_expiration_set.keyvault_non_rbac_secret_expiration_set.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_non_rbac_secret_expiration_set.keyvault_non_rbac_secret_expiration_set import (
+                keyvault_non_rbac_secret_expiration_set,
+            )
+
+            check = keyvault_non_rbac_secret_expiration_set()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_no_secrets(self):
+        keyvault_client = mock.MagicMock
+        keyvault_client.key_vaults = {
+            AZURE_SUBSCRIPTION: [
+                KeyVaultInfo(
+                    id="id",
+                    name="name",
+                    location="location",
+                    resource_group="resource_group",
+                    properties=VaultProperties(
+                        tenant_id="tenantid", sku="sku", enable_rbac_authorization=False
+                    ),
+                    keys=[],
+                    secrets=[],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_non_rbac_secret_expiration_set.keyvault_non_rbac_secret_expiration_set.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_non_rbac_secret_expiration_set.keyvault_non_rbac_secret_expiration_set import (
+                keyvault_non_rbac_secret_expiration_set,
+            )
+
+            check = keyvault_non_rbac_secret_expiration_set()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_key_vaults_invalid_secrets(self):
+        keyvault_client = mock.MagicMock
+        keyvault_name = "Keyvault Name"
+        keyvault_id = str(uuid4())
+        secret_name = "Secret"
+        secret = Secret(
+            id="id",
+            name=secret_name,
+            enabled=True,
+            location="location",
+            attributes=SecretAttributes(expires=None, enabled=True),
+        )
+        keyvault_client.key_vaults = {
+            AZURE_SUBSCRIPTION: [
+                KeyVaultInfo(
+                    id=keyvault_id,
+                    name=keyvault_name,
+                    location="location",
+                    resource_group="resource_group",
+                    properties=VaultProperties(
+                        tenant_id="tenantid", sku="sku", enable_rbac_authorization=False
+                    ),
+                    keys=[],
+                    secrets=[secret],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_non_rbac_secret_expiration_set.keyvault_non_rbac_secret_expiration_set.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_non_rbac_secret_expiration_set.keyvault_non_rbac_secret_expiration_set import (
+                keyvault_non_rbac_secret_expiration_set,
+            )
+
+            check = keyvault_non_rbac_secret_expiration_set()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Keyvault {keyvault_name} from subscription {AZURE_SUBSCRIPTION} has the secret {secret_name} without expiration date set."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == keyvault_name
+            assert result[0].resource_id == keyvault_id
+
+    def test_key_vaults_invalid_multiple_secrets(self):
+        keyvault_client = mock.MagicMock
+        keyvault_name = "Keyvault Name"
+        keyvault_id = str(uuid4())
+        secret1_name = "Secret1"
+        secret2_name = "Secret2"
+        secret1 = Secret(
+            id="id",
+            name=secret1_name,
+            enabled=True,
+            location="location",
+            attributes=SecretAttributes(expires=None),
+        )
+        secret2 = Secret(
+            id="id",
+            name=secret2_name,
+            enabled=True,
+            location="location",
+            attributes=SecretAttributes(expires=84934),
+        )
+        keyvault_client.key_vaults = {
+            AZURE_SUBSCRIPTION: [
+                KeyVaultInfo(
+                    id=keyvault_id,
+                    name=keyvault_name,
+                    location="location",
+                    resource_group="resource_group",
+                    properties=VaultProperties(
+                        tenant_id="tenantid", sku="sku", enable_rbac_authorization=False
+                    ),
+                    keys=[],
+                    secrets=[secret1, secret2],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_non_rbac_secret_expiration_set.keyvault_non_rbac_secret_expiration_set.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_non_rbac_secret_expiration_set.keyvault_non_rbac_secret_expiration_set import (
+                keyvault_non_rbac_secret_expiration_set,
+            )
+
+            check = keyvault_non_rbac_secret_expiration_set()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Keyvault {keyvault_name} from subscription {AZURE_SUBSCRIPTION} has the secret {secret1_name} without expiration date set."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == keyvault_name
+            assert result[0].resource_id == keyvault_id
+
+    def test_key_vaults_valid_keys(self):
+        keyvault_client = mock.MagicMock
+        keyvault_name = "Keyvault Name"
+        keyvault_id = str(uuid4())
+        secret = Secret(
+            id="id",
+            name="name",
+            enabled=False,
+            location="location",
+            attributes=SecretAttributes(expires=None),
+        )
+        keyvault_client.key_vaults = {
+            AZURE_SUBSCRIPTION: [
+                KeyVaultInfo(
+                    id=keyvault_id,
+                    name=keyvault_name,
+                    location="location",
+                    resource_group="resource_group",
+                    properties=VaultProperties(
+                        tenant_id="tenantid", sku="sku", enable_rbac_authorization=False
+                    ),
+                    keys=[],
+                    secrets=[secret],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_non_rbac_secret_expiration_set.keyvault_non_rbac_secret_expiration_set.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_non_rbac_secret_expiration_set.keyvault_non_rbac_secret_expiration_set import (
+                keyvault_non_rbac_secret_expiration_set,
+            )
+
+            check = keyvault_non_rbac_secret_expiration_set()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Keyvault {keyvault_name} from subscription {AZURE_SUBSCRIPTION} has all the secrets with expiration date set."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == keyvault_name
+            assert result[0].resource_id == keyvault_id
diff --git a/tests/providers/azure/services/keyvault/keyvault_private_endpoints/keyvault_private_endpoints_test.py b/tests/providers/azure/services/keyvault/keyvault_private_endpoints/keyvault_private_endpoints_test.py
new file mode 100644
index 00000000000..fe74b7360ef
--- /dev/null
+++ b/tests/providers/azure/services/keyvault/keyvault_private_endpoints/keyvault_private_endpoints_test.py
@@ -0,0 +1,121 @@
+from unittest import mock
+from uuid import uuid4
+
+from azure.mgmt.keyvault.v2023_07_01.models import (
+    PrivateEndpointConnectionItem,
+    VaultProperties,
+)
+
+from prowler.providers.azure.services.keyvault.keyvault_service import KeyVaultInfo
+
+AZURE_SUBSCRIPTION = str(uuid4())
+
+
+class Test_keyvault_private_endpoints:
+    def test_no_key_vaults(self):
+        keyvault_client = mock.MagicMock
+        keyvault_client.key_vaults = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_private_endpoints.keyvault_private_endpoints.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_private_endpoints.keyvault_private_endpoints import (
+                keyvault_private_endpoints,
+            )
+
+            check = keyvault_private_endpoints()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_key_vaults_no_private_endpoints(self):
+        keyvault_client = mock.MagicMock
+        keyvault_name = "Keyvault Name"
+        keyvault_id = str(uuid4())
+        keyvault_client.key_vaults = {
+            AZURE_SUBSCRIPTION: [
+                KeyVaultInfo(
+                    id=keyvault_id,
+                    name=keyvault_name,
+                    location="location",
+                    resource_group="resource_group",
+                    properties=VaultProperties(
+                        tenant_id="tenantid",
+                        sku="sku",
+                        enable_rbac_authorization=False,
+                        private_endpoint_connections=None,
+                    ),
+                    keys=[],
+                    secrets=[],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_private_endpoints.keyvault_private_endpoints.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_private_endpoints.keyvault_private_endpoints import (
+                keyvault_private_endpoints,
+            )
+
+            check = keyvault_private_endpoints()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Keyvault {keyvault_name} from subscription {AZURE_SUBSCRIPTION} is not using private endpoints."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == keyvault_name
+            assert result[0].resource_id == keyvault_id
+
+    def test_key_vaults_using_private_endpoints(self):
+        keyvault_client = mock.MagicMock
+        keyvault_name = "Keyvault Name"
+        keyvault_id = str(uuid4())
+        private_endpoint = PrivateEndpointConnectionItem(
+            id="id",
+        )
+        keyvault_client.key_vaults = {
+            AZURE_SUBSCRIPTION: [
+                KeyVaultInfo(
+                    id=keyvault_id,
+                    name=keyvault_name,
+                    location="location",
+                    resource_group="resource_group",
+                    properties=VaultProperties(
+                        tenant_id="tenantid",
+                        sku="sku",
+                        enable_rbac_authorization=True,
+                    ),
+                    keys=[],
+                    secrets=[],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_private_endpoints.keyvault_private_endpoints.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_private_endpoints.keyvault_private_endpoints import (
+                keyvault_private_endpoints,
+            )
+
+            keyvault_client.key_vaults[AZURE_SUBSCRIPTION][
+                0
+            ].properties.private_endpoint_connections = [private_endpoint]
+
+            check = keyvault_private_endpoints()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Keyvault {keyvault_name} from subscription {AZURE_SUBSCRIPTION} is using private endpoints."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == keyvault_name
+            assert result[0].resource_id == keyvault_id
diff --git a/tests/providers/azure/services/keyvault/keyvault_rbac_enabled/keyvault_rbac_enabled_test.py b/tests/providers/azure/services/keyvault/keyvault_rbac_enabled/keyvault_rbac_enabled_test.py
new file mode 100644
index 00000000000..ad2817c55ee
--- /dev/null
+++ b/tests/providers/azure/services/keyvault/keyvault_rbac_enabled/keyvault_rbac_enabled_test.py
@@ -0,0 +1,110 @@
+from unittest import mock
+from uuid import uuid4
+
+from azure.mgmt.keyvault.v2023_07_01.models import VaultProperties
+
+from prowler.providers.azure.services.keyvault.keyvault_service import KeyVaultInfo
+
+AZURE_SUBSCRIPTION = str(uuid4())
+
+
+class Test_keyvault_rbac_enabled:
+    def test_no_key_vaults(self):
+        keyvault_client = mock.MagicMock
+        keyvault_client.key_vaults = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_rbac_enabled.keyvault_rbac_enabled.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_rbac_enabled.keyvault_rbac_enabled import (
+                keyvault_rbac_enabled,
+            )
+
+            check = keyvault_rbac_enabled()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_key_vaults_no_rbac(self):
+        keyvault_client = mock.MagicMock
+        keyvault_name = "Keyvault Name"
+        keyvault_id = str(uuid4())
+        keyvault_client.key_vaults = {
+            AZURE_SUBSCRIPTION: [
+                KeyVaultInfo(
+                    id=keyvault_id,
+                    name=keyvault_name,
+                    location="location",
+                    resource_group="resource_group",
+                    properties=VaultProperties(
+                        tenant_id="tenantid",
+                        sku="sku",
+                        enable_rbac_authorization=False,
+                    ),
+                    keys=[],
+                    secrets=[],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_rbac_enabled.keyvault_rbac_enabled.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_rbac_enabled.keyvault_rbac_enabled import (
+                keyvault_rbac_enabled,
+            )
+
+            check = keyvault_rbac_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Keyvault {keyvault_name} from subscription {AZURE_SUBSCRIPTION} is not using RBAC for access control."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == keyvault_name
+            assert result[0].resource_id == keyvault_id
+
+    def test_key_vaults_rbac(self):
+        keyvault_client = mock.MagicMock
+        keyvault_name = "Keyvault Name"
+        keyvault_id = str(uuid4())
+        keyvault_client.key_vaults = {
+            AZURE_SUBSCRIPTION: [
+                KeyVaultInfo(
+                    id=keyvault_id,
+                    name=keyvault_name,
+                    location="location",
+                    resource_group="resource_group",
+                    properties=VaultProperties(
+                        tenant_id="tenantid",
+                        sku="sku",
+                        enable_rbac_authorization=True,
+                    ),
+                    keys=[],
+                    secrets=[],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_rbac_enabled.keyvault_rbac_enabled.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_rbac_enabled.keyvault_rbac_enabled import (
+                keyvault_rbac_enabled,
+            )
+
+            check = keyvault_rbac_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Keyvault {keyvault_name} from subscription {AZURE_SUBSCRIPTION} is using RBAC for access control."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == keyvault_name
+            assert result[0].resource_id == keyvault_id
diff --git a/tests/providers/azure/services/keyvault/keyvault_rbac_key_expiration_set/keyvault_rbac_key_expiration_set_test.py b/tests/providers/azure/services/keyvault/keyvault_rbac_key_expiration_set/keyvault_rbac_key_expiration_set_test.py
new file mode 100644
index 00000000000..7fc9c593403
--- /dev/null
+++ b/tests/providers/azure/services/keyvault/keyvault_rbac_key_expiration_set/keyvault_rbac_key_expiration_set_test.py
@@ -0,0 +1,151 @@
+from unittest import mock
+from uuid import uuid4
+
+from azure.mgmt.keyvault.v2023_07_01.models import KeyAttributes, VaultProperties
+
+from prowler.providers.azure.services.keyvault.keyvault_service import Key, KeyVaultInfo
+
+AZURE_SUBSCRIPTION = str(uuid4())
+
+
+class Test_keyvault_rbac_key_expiration_set:
+    def test_no_key_vaults(self):
+        keyvault_client = mock.MagicMock
+        keyvault_client.key_vaults = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_rbac_key_expiration_set.keyvault_rbac_key_expiration_set.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_rbac_key_expiration_set.keyvault_rbac_key_expiration_set import (
+                keyvault_rbac_key_expiration_set,
+            )
+
+            check = keyvault_rbac_key_expiration_set()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_no_keys(self):
+        keyvault_client = mock.MagicMock
+        keyvault_client.key_vaults = {
+            AZURE_SUBSCRIPTION: [
+                KeyVaultInfo(
+                    id="id",
+                    name="name",
+                    location="location",
+                    resource_group="resource_group",
+                    properties=VaultProperties(
+                        tenant_id="tenantid", sku="sku", enable_rbac_authorization=True
+                    ),
+                    keys=[],
+                    secrets=[],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_rbac_key_expiration_set.keyvault_rbac_key_expiration_set.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_rbac_key_expiration_set.keyvault_rbac_key_expiration_set import (
+                keyvault_rbac_key_expiration_set,
+            )
+
+            check = keyvault_rbac_key_expiration_set()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_key_vaults_invalid_keys(self):
+        keyvault_client = mock.MagicMock
+        keyvault_name = "Keyvault Name"
+        keyvault_id = str(uuid4())
+        key_name = "Key Name"
+        key = Key(
+            id="id",
+            name=key_name,
+            enabled=True,
+            location="location",
+            attributes=KeyAttributes(expires=None, enabled=True),
+        )
+        keyvault_client.key_vaults = {
+            AZURE_SUBSCRIPTION: [
+                KeyVaultInfo(
+                    id=keyvault_id,
+                    name=keyvault_name,
+                    location="location",
+                    resource_group="resource_group",
+                    properties=VaultProperties(
+                        tenant_id="tenantid", sku="sku", enable_rbac_authorization=True
+                    ),
+                    keys=[key],
+                    secrets=[],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_rbac_key_expiration_set.keyvault_rbac_key_expiration_set.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_rbac_key_expiration_set.keyvault_rbac_key_expiration_set import (
+                keyvault_rbac_key_expiration_set,
+            )
+
+            check = keyvault_rbac_key_expiration_set()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Keyvault {keyvault_name} from subscription {AZURE_SUBSCRIPTION} has the key {key_name} without expiration date set."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == keyvault_name
+            assert result[0].resource_id == keyvault_id
+
+    def test_key_vaults_valid_keys(self):
+        keyvault_client = mock.MagicMock
+        keyvault_name = "Keyvault Name"
+        keyvault_id = str(uuid4())
+        key = Key(
+            id="id",
+            name="name",
+            enabled=True,
+            location="location",
+            attributes=KeyAttributes(expires=49394, enabled=True),
+        )
+        keyvault_client.key_vaults = {
+            AZURE_SUBSCRIPTION: [
+                KeyVaultInfo(
+                    id=keyvault_id,
+                    name=keyvault_name,
+                    location="location",
+                    resource_group="resource_group",
+                    properties=VaultProperties(
+                        tenant_id="tenantid", sku="sku", enable_rbac_authorization=True
+                    ),
+                    keys=[key],
+                    secrets=[],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_rbac_key_expiration_set.keyvault_rbac_key_expiration_set.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_rbac_key_expiration_set.keyvault_rbac_key_expiration_set import (
+                keyvault_rbac_key_expiration_set,
+            )
+
+            check = keyvault_rbac_key_expiration_set()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Keyvault {keyvault_name} from subscription {AZURE_SUBSCRIPTION} has all the keys with expiration date set."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == keyvault_name
+            assert result[0].resource_id == keyvault_id
diff --git a/tests/providers/azure/services/keyvault/keyvault_rbac_secret_expiration_set/keyvault_rbac_secret_expiration_set_test.py b/tests/providers/azure/services/keyvault/keyvault_rbac_secret_expiration_set/keyvault_rbac_secret_expiration_set_test.py
new file mode 100644
index 00000000000..4a98b0e6001
--- /dev/null
+++ b/tests/providers/azure/services/keyvault/keyvault_rbac_secret_expiration_set/keyvault_rbac_secret_expiration_set_test.py
@@ -0,0 +1,210 @@
+from unittest import mock
+from uuid import uuid4
+
+from azure.mgmt.keyvault.v2023_07_01.models import SecretAttributes, VaultProperties
+
+from prowler.providers.azure.services.keyvault.keyvault_service import (
+    KeyVaultInfo,
+    Secret,
+)
+
+AZURE_SUBSCRIPTION = str(uuid4())
+
+
+class Test_keyvault_rbac_secret_expiration_set:
+    def test_no_key_vaults(self):
+        keyvault_client = mock.MagicMock
+        keyvault_client.key_vaults = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_rbac_secret_expiration_set.keyvault_rbac_secret_expiration_set.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_rbac_secret_expiration_set.keyvault_rbac_secret_expiration_set import (
+                keyvault_rbac_secret_expiration_set,
+            )
+
+            check = keyvault_rbac_secret_expiration_set()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_no_secrets(self):
+        keyvault_client = mock.MagicMock
+        keyvault_client.key_vaults = {
+            AZURE_SUBSCRIPTION: [
+                KeyVaultInfo(
+                    id="id",
+                    name="name",
+                    location="location",
+                    resource_group="resource_group",
+                    properties=VaultProperties(
+                        tenant_id="tenantid", sku="sku", enable_rbac_authorization=True
+                    ),
+                    keys=[],
+                    secrets=[],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_rbac_secret_expiration_set.keyvault_rbac_secret_expiration_set.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_rbac_secret_expiration_set.keyvault_rbac_secret_expiration_set import (
+                keyvault_rbac_secret_expiration_set,
+            )
+
+            check = keyvault_rbac_secret_expiration_set()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_key_vaults_invalid_secrets(self):
+        keyvault_client = mock.MagicMock
+        keyvault_name = "Keyvault Name"
+        keyvault_id = str(uuid4())
+        secret_name = "Secret"
+        secret = Secret(
+            id="id",
+            name=secret_name,
+            enabled=True,
+            location="location",
+            attributes=SecretAttributes(expires=None),
+        )
+        keyvault_client.key_vaults = {
+            AZURE_SUBSCRIPTION: [
+                KeyVaultInfo(
+                    id=keyvault_id,
+                    name=keyvault_name,
+                    location="location",
+                    resource_group="resource_group",
+                    properties=VaultProperties(
+                        tenant_id="tenantid", sku="sku", enable_rbac_authorization=True
+                    ),
+                    keys=[],
+                    secrets=[secret],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_rbac_secret_expiration_set.keyvault_rbac_secret_expiration_set.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_rbac_secret_expiration_set.keyvault_rbac_secret_expiration_set import (
+                keyvault_rbac_secret_expiration_set,
+            )
+
+            check = keyvault_rbac_secret_expiration_set()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Keyvault {keyvault_name} from subscription {AZURE_SUBSCRIPTION} has the secret {secret_name} without expiration date set."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == keyvault_name
+            assert result[0].resource_id == keyvault_id
+
+    def test_key_vaults_invalid_multiple_secrets(self):
+        keyvault_client = mock.MagicMock
+        keyvault_name = "Keyvault Name"
+        keyvault_id = str(uuid4())
+        secret1_name = "Secret1"
+        secret2_name = "Secret2"
+        secret1 = Secret(
+            id="id",
+            name=secret1_name,
+            enabled=True,
+            location="location",
+            attributes=SecretAttributes(expires=None),
+        )
+        secret2 = Secret(
+            id="id",
+            name=secret2_name,
+            enabled=True,
+            location="location",
+            attributes=SecretAttributes(expires=84934),
+        )
+        keyvault_client.key_vaults = {
+            AZURE_SUBSCRIPTION: [
+                KeyVaultInfo(
+                    id=keyvault_id,
+                    name=keyvault_name,
+                    location="location",
+                    resource_group="resource_group",
+                    properties=VaultProperties(
+                        tenant_id="tenantid", sku="sku", enable_rbac_authorization=True
+                    ),
+                    keys=[],
+                    secrets=[secret1, secret2],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_rbac_secret_expiration_set.keyvault_rbac_secret_expiration_set.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_rbac_secret_expiration_set.keyvault_rbac_secret_expiration_set import (
+                keyvault_rbac_secret_expiration_set,
+            )
+
+            check = keyvault_rbac_secret_expiration_set()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Keyvault {keyvault_name} from subscription {AZURE_SUBSCRIPTION} has the secret {secret1_name} without expiration date set."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == keyvault_name
+            assert result[0].resource_id == keyvault_id
+
+    def test_key_vaults_valid_keys(self):
+        keyvault_client = mock.MagicMock
+        keyvault_name = "Keyvault Name"
+        keyvault_id = str(uuid4())
+        secret = Secret(
+            id="id",
+            name="name",
+            enabled=False,
+            location="location",
+            attributes=SecretAttributes(expires=None),
+        )
+        keyvault_client.key_vaults = {
+            AZURE_SUBSCRIPTION: [
+                KeyVaultInfo(
+                    id=keyvault_id,
+                    name=keyvault_name,
+                    location="location",
+                    resource_group="resource_group",
+                    properties=VaultProperties(
+                        tenant_id="tenantid", sku="sku", enable_rbac_authorization=True
+                    ),
+                    keys=[],
+                    secrets=[secret],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_rbac_secret_expiration_set.keyvault_rbac_secret_expiration_set.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_rbac_secret_expiration_set.keyvault_rbac_secret_expiration_set import (
+                keyvault_rbac_secret_expiration_set,
+            )
+
+            check = keyvault_rbac_secret_expiration_set()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Keyvault {keyvault_name} from subscription {AZURE_SUBSCRIPTION} has all the secrets with expiration date set."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == keyvault_name
+            assert result[0].resource_id == keyvault_id
diff --git a/tests/providers/azure/services/keyvault/keyvault_recoverable/keyvault_recoverable_test.py b/tests/providers/azure/services/keyvault/keyvault_recoverable/keyvault_recoverable_test.py
new file mode 100644
index 00000000000..3f210d7eb92
--- /dev/null
+++ b/tests/providers/azure/services/keyvault/keyvault_recoverable/keyvault_recoverable_test.py
@@ -0,0 +1,182 @@
+from unittest import mock
+from uuid import uuid4
+
+from azure.mgmt.keyvault.v2023_07_01.models import SecretAttributes, VaultProperties
+
+from prowler.providers.azure.services.keyvault.keyvault_service import (
+    KeyVaultInfo,
+    Secret,
+)
+
+AZURE_SUBSCRIPTION = str(uuid4())
+
+
+class Test_keyvault_recoverable:
+    def test_no_key_vaults(self):
+        keyvault_client = mock.MagicMock
+        keyvault_client.key_vaults = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_recoverable.keyvault_recoverable.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_recoverable.keyvault_recoverable import (
+                keyvault_recoverable,
+            )
+
+            check = keyvault_recoverable()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_key_vaults_no_purge(self):
+        keyvault_client = mock.MagicMock
+        keyvault_name = "Keyvault Name"
+        keyvault_id = str(uuid4())
+        keyvault_client.key_vaults = {
+            AZURE_SUBSCRIPTION: [
+                KeyVaultInfo(
+                    id=keyvault_id,
+                    name=keyvault_name,
+                    location="location",
+                    resource_group="resource_group",
+                    properties=VaultProperties(
+                        tenant_id="tenantid",
+                        sku="sku",
+                        enable_rbac_authorization=True,
+                        enable_soft_delete=True,
+                        enable_purge_protection=False,
+                    ),
+                    keys=[],
+                    secrets=[],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_recoverable.keyvault_recoverable.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_recoverable.keyvault_recoverable import (
+                keyvault_recoverable,
+            )
+
+            check = keyvault_recoverable()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Keyvault {keyvault_name} from subscription {AZURE_SUBSCRIPTION} is not recoverable."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == keyvault_name
+            assert result[0].resource_id == keyvault_id
+
+    def test_key_vaults_no_soft_delete(self):
+        keyvault_client = mock.MagicMock
+        keyvault_name = "Keyvault Name"
+        keyvault_id = str(uuid4())
+        secret1 = Secret(
+            id="id",
+            name="name",
+            enabled=True,
+            location="location",
+            attributes=SecretAttributes(expires=None, enabled=True),
+        )
+        secret2 = Secret(
+            id="id",
+            name="name",
+            enabled=True,
+            location="location",
+            attributes=SecretAttributes(expires=84934, enabled=True),
+        )
+        keyvault_client.key_vaults = {
+            AZURE_SUBSCRIPTION: [
+                KeyVaultInfo(
+                    id=keyvault_id,
+                    name=keyvault_name,
+                    location="location",
+                    resource_group="resource_group",
+                    properties=VaultProperties(
+                        tenant_id="tenantid",
+                        sku="sku",
+                        enable_rbac_authorization=True,
+                        enable_soft_delete=True,
+                        enable_purge_protection=False,
+                    ),
+                    keys=[],
+                    secrets=[secret1, secret2],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_recoverable.keyvault_recoverable.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_recoverable.keyvault_recoverable import (
+                keyvault_recoverable,
+            )
+
+            check = keyvault_recoverable()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Keyvault {keyvault_name} from subscription {AZURE_SUBSCRIPTION} is not recoverable."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == keyvault_name
+            assert result[0].resource_id == keyvault_id
+
+    def test_key_vaults_valid_configuration(self):
+        keyvault_client = mock.MagicMock
+        keyvault_name = "Keyvault Name"
+        keyvault_id = str(uuid4())
+        secret = Secret(
+            id="id",
+            name="name",
+            enabled=True,
+            location="location",
+            attributes=SecretAttributes(expires=None, enabled=False),
+        )
+        keyvault_client.key_vaults = {
+            AZURE_SUBSCRIPTION: [
+                KeyVaultInfo(
+                    id=keyvault_id,
+                    name=keyvault_name,
+                    location="location",
+                    resource_group="resource_group",
+                    properties=VaultProperties(
+                        tenant_id="tenantid",
+                        sku="sku",
+                        enable_rbac_authorization=True,
+                        enable_soft_delete=True,
+                        enable_purge_protection=True,
+                    ),
+                    keys=[],
+                    secrets=[secret],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.keyvault.keyvault_recoverable.keyvault_recoverable.keyvault_client",
+            new=keyvault_client,
+        ):
+            from prowler.providers.azure.services.keyvault.keyvault_recoverable.keyvault_recoverable import (
+                keyvault_recoverable,
+            )
+
+            check = keyvault_recoverable()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Keyvault {keyvault_name} from subscription {AZURE_SUBSCRIPTION} is recoverable."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == keyvault_name
+            assert result[0].resource_id == keyvault_id
diff --git a/tests/providers/azure/services/keyvault/keyvault_service_test.py b/tests/providers/azure/services/keyvault/keyvault_service_test.py
new file mode 100644
index 00000000000..768d43aa7f9
--- /dev/null
+++ b/tests/providers/azure/services/keyvault/keyvault_service_test.py
@@ -0,0 +1,99 @@
+from unittest.mock import patch
+
+from prowler.providers.azure.services.keyvault.keyvault_service import (
+    Key,
+    KeyVault,
+    KeyVaultInfo,
+    Secret,
+)
+from tests.providers.azure.azure_fixtures import (
+    AZURE_SUBSCRIPTION,
+    set_mocked_azure_audit_info,
+)
+
+
+def mock_keyvault_get_key_vaults(_, __):
+    keyvault_info = KeyVaultInfo(
+        id="id",
+        name="name",
+        location="location",
+        resource_group="resource_group",
+        properties=None,
+        keys=[
+            Key(
+                id="id",
+                name="name",
+                enabled=True,
+                location="location",
+                attributes=None,
+                rotation_policy=None,
+            )
+        ],
+        secrets=[
+            Secret(
+                id="id",
+                name="name",
+                enabled=True,
+                location="location",
+                attributes=None,
+            )
+        ],
+    )
+    return {AZURE_SUBSCRIPTION: [keyvault_info]}
+
+
+@patch(
+    "prowler.providers.azure.services.keyvault.keyvault_service.KeyVault.__get_key_vaults__",
+    new=mock_keyvault_get_key_vaults,
+)
+class Test_keyvault_service:
+    def test__get_client__(self):
+        keyvault = KeyVault(set_mocked_azure_audit_info())
+        assert (
+            keyvault.clients[AZURE_SUBSCRIPTION].__class__.__name__
+            == "KeyVaultManagementClient"
+        )
+
+    def test__get_key_vaults__(self):
+        keyvault = KeyVault(set_mocked_azure_audit_info())
+        assert (
+            keyvault.key_vaults[AZURE_SUBSCRIPTION][0].__class__.__name__
+            == "KeyVaultInfo"
+        )
+        assert keyvault.key_vaults[AZURE_SUBSCRIPTION][0].id == "id"
+        assert keyvault.key_vaults[AZURE_SUBSCRIPTION][0].name == "name"
+        assert keyvault.key_vaults[AZURE_SUBSCRIPTION][0].location == "location"
+        assert (
+            keyvault.key_vaults[AZURE_SUBSCRIPTION][0].resource_group
+            == "resource_group"
+        )
+        assert keyvault.key_vaults[AZURE_SUBSCRIPTION][0].properties is None
+
+    def test__get_keys__(self):
+        keyvault = KeyVault(set_mocked_azure_audit_info())
+        assert (
+            keyvault.key_vaults[AZURE_SUBSCRIPTION][0].keys[0].__class__.__name__
+            == "Key"
+        )
+        assert keyvault.key_vaults[AZURE_SUBSCRIPTION][0].keys[0].id == "id"
+        assert keyvault.key_vaults[AZURE_SUBSCRIPTION][0].keys[0].name == "name"
+        assert keyvault.key_vaults[AZURE_SUBSCRIPTION][0].keys[0].enabled is True
+        assert keyvault.key_vaults[AZURE_SUBSCRIPTION][0].keys[0].location == "location"
+        assert keyvault.key_vaults[AZURE_SUBSCRIPTION][0].keys[0].attributes is None
+        assert (
+            keyvault.key_vaults[AZURE_SUBSCRIPTION][0].keys[0].rotation_policy is None
+        )
+
+    def test__get_secrets__(self):
+        keyvault = KeyVault(set_mocked_azure_audit_info())
+        assert (
+            keyvault.key_vaults[AZURE_SUBSCRIPTION][0].secrets[0].__class__.__name__
+            == "Secret"
+        )
+        assert keyvault.key_vaults[AZURE_SUBSCRIPTION][0].secrets[0].id == "id"
+        assert keyvault.key_vaults[AZURE_SUBSCRIPTION][0].secrets[0].name == "name"
+        assert keyvault.key_vaults[AZURE_SUBSCRIPTION][0].secrets[0].enabled is True
+        assert (
+            keyvault.key_vaults[AZURE_SUBSCRIPTION][0].secrets[0].location == "location"
+        )
+        assert keyvault.key_vaults[AZURE_SUBSCRIPTION][0].secrets[0].attributes is None
diff --git a/tests/providers/azure/services/monitor/monitor_diagnostic_setting_with_appropriate_categories/monitor_diagnostic_setting_with_appropriate_categories_test.py b/tests/providers/azure/services/monitor/monitor_diagnostic_setting_with_appropriate_categories/monitor_diagnostic_setting_with_appropriate_categories_test.py
new file mode 100644
index 00000000000..047e8cd20e4
--- /dev/null
+++ b/tests/providers/azure/services/monitor/monitor_diagnostic_setting_with_appropriate_categories/monitor_diagnostic_setting_with_appropriate_categories_test.py
@@ -0,0 +1,103 @@
+from unittest import mock
+
+from prowler.providers.azure.services.monitor.monitor_service import DiagnosticSetting
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_monitor_diagnostic_setting_with_appropriate_categories:
+    def test_monitor_diagnostic_setting_with_appropriate_categories_no_subscriptions(
+        self,
+    ):
+        monitor_client = mock.MagicMock
+        monitor_client.diagnostics_settings = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.monitor.monitor_diagnostic_setting_with_appropriate_categories.monitor_diagnostic_setting_with_appropriate_categories.monitor_client",
+            new=monitor_client,
+        ):
+
+            from prowler.providers.azure.services.monitor.monitor_diagnostic_setting_with_appropriate_categories.monitor_diagnostic_setting_with_appropriate_categories import (
+                monitor_diagnostic_setting_with_appropriate_categories,
+            )
+
+            check = monitor_diagnostic_setting_with_appropriate_categories()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_no_diagnostic_settings(self):
+        monitor_client = mock.MagicMock
+        monitor_client.diagnostics_settings = {AZURE_SUBSCRIPTION: []}
+        with mock.patch(
+            "prowler.providers.azure.services.monitor.monitor_diagnostic_setting_with_appropriate_categories.monitor_diagnostic_setting_with_appropriate_categories.monitor_client",
+            new=monitor_client,
+        ):
+            from prowler.providers.azure.services.monitor.monitor_diagnostic_setting_with_appropriate_categories.monitor_diagnostic_setting_with_appropriate_categories import (
+                monitor_diagnostic_setting_with_appropriate_categories,
+            )
+
+            check = monitor_diagnostic_setting_with_appropriate_categories()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].status == "FAIL"
+            assert result[0].resource_id == "Monitor"
+            assert result[0].resource_name == "Monitor"
+            assert (
+                result[0].status_extended
+                == f"There are no diagnostic settings capturing appropiate categories in subscription {AZURE_SUBSCRIPTION}."
+            )
+
+    def test_diagnostic_settings_configured(self):
+        monitor_client = mock.MagicMock
+        monitor_client.diagnostics_settings = {
+            AZURE_SUBSCRIPTION: [
+                DiagnosticSetting(
+                    id="id",
+                    logs=[
+                        mock.MagicMock(category="Administrative", enabled=True),
+                        mock.MagicMock(category="Security", enabled=True),
+                        mock.MagicMock(category="ServiceHealth", enabled=False),
+                        mock.MagicMock(category="Alert", enabled=True),
+                        mock.MagicMock(category="Recommendation", enabled=False),
+                        mock.MagicMock(category="Policy", enabled=True),
+                        mock.MagicMock(category="Autoscale", enabled=False),
+                        mock.MagicMock(category="ResourceHealth", enabled=False),
+                    ],
+                    storage_account_id="/subscriptions/1234a5-123a-123a-123a-1234567890ab/resourceGroups/rg/providers/Microsoft.Storage/storageAccounts/storageaccountname",
+                ),
+                DiagnosticSetting(
+                    id="id2",
+                    logs=[
+                        mock.MagicMock(category="Administrative", enabled=False),
+                        mock.MagicMock(category="Security", enabled=True),
+                        mock.MagicMock(category="ServiceHealth", enabled=False),
+                        mock.MagicMock(category="Alert", enabled=True),
+                        mock.MagicMock(category="Recommendation", enabled=False),
+                        mock.MagicMock(category="Policy", enabled=True),
+                        mock.MagicMock(category="Autoscale", enabled=False),
+                        mock.MagicMock(category="ResourceHealth", enabled=False),
+                    ],
+                    storage_account_id="/subscriptions/1224a5-123a-123a-123a-1234567890ab/resourceGroups/rg/providers/Microsoft.Storage/storageAccounts/storageaccountname",
+                ),
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.monitor.monitor_diagnostic_setting_with_appropriate_categories.monitor_diagnostic_setting_with_appropriate_categories.monitor_client",
+            new=monitor_client,
+        ):
+            from prowler.providers.azure.services.monitor.monitor_diagnostic_setting_with_appropriate_categories.monitor_diagnostic_setting_with_appropriate_categories import (
+                monitor_diagnostic_setting_with_appropriate_categories,
+            )
+
+            check = monitor_diagnostic_setting_with_appropriate_categories()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].status == "PASS"
+            assert result[0].resource_id == "Monitor"
+            assert result[0].resource_name == "Monitor"
+            assert (
+                result[0].status_extended
+                == f"There is at least one diagnostic setting capturing appropiate categories in subscription {AZURE_SUBSCRIPTION}."
+            )
diff --git a/tests/providers/azure/services/monitor/monitor_service_test.py b/tests/providers/azure/services/monitor/monitor_service_test.py
new file mode 100644
index 00000000000..ee935ca1442
--- /dev/null
+++ b/tests/providers/azure/services/monitor/monitor_service_test.py
@@ -0,0 +1,102 @@
+from unittest import mock
+from unittest.mock import patch
+
+from prowler.providers.azure.services.monitor.monitor_service import (
+    DiagnosticSetting,
+    Monitor,
+)
+from tests.providers.azure.azure_fixtures import (
+    AZURE_SUBSCRIPTION,
+    set_mocked_azure_audit_info,
+)
+
+
+def mock_monitor_get_diagnostics_settings(_):
+    return {
+        AZURE_SUBSCRIPTION: [
+            DiagnosticSetting(
+                id="id",
+                logs=[
+                    mock.MagicMock(category="Administrative", enabled=True),
+                    mock.MagicMock(category="Security", enabled=True),
+                    mock.MagicMock(category="ServiceHealth", enabled=False),
+                    mock.MagicMock(category="Alert", enabled=True),
+                    mock.MagicMock(category="Recommendation", enabled=False),
+                    mock.MagicMock(category="Policy", enabled=True),
+                    mock.MagicMock(category="Autoscale", enabled=False),
+                    mock.MagicMock(category="ResourceHealth", enabled=False),
+                ],
+                storage_account_id="/subscriptions/1234a5-123a-123a-123a-1234567890ab/resourceGroups/rg/providers/Microsoft.Storage/storageAccounts/storageaccountname",
+            )
+        ]
+    }
+
+
+@patch(
+    "prowler.providers.azure.services.monitor.monitor_service.Monitor.__get_diagnostics_settings__",
+    new=mock_monitor_get_diagnostics_settings,
+)
+class Test_Monitor_Service:
+    def test__get_client__(self):
+        monitor = Monitor(set_mocked_azure_audit_info())
+        assert (
+            monitor.clients[AZURE_SUBSCRIPTION].__class__.__name__
+            == "MonitorManagementClient"
+        )
+
+    def test__get_subscriptions__(self):
+        monitor = Monitor(set_mocked_azure_audit_info())
+        assert monitor.subscriptions.__class__.__name__ == "dict"
+
+    def test__get_diagnostics_settings(self):
+        monitor = Monitor(set_mocked_azure_audit_info())
+        assert len(monitor.diagnostics_settings) == 1
+        assert monitor.diagnostics_settings[AZURE_SUBSCRIPTION][0].id == "id"
+        assert (
+            monitor.diagnostics_settings[AZURE_SUBSCRIPTION][0].logs[0].enabled is True
+        )
+        assert (
+            monitor.diagnostics_settings[AZURE_SUBSCRIPTION][0].logs[0].category
+            == "Administrative"
+        )
+        assert (
+            monitor.diagnostics_settings[AZURE_SUBSCRIPTION][0].logs[1].enabled is True
+        )
+        assert (
+            monitor.diagnostics_settings[AZURE_SUBSCRIPTION][0].logs[1].category
+            == "Security"
+        )
+        assert (
+            monitor.diagnostics_settings[AZURE_SUBSCRIPTION][0].logs[2].category
+            == "ServiceHealth"
+        )
+        assert (
+            monitor.diagnostics_settings[AZURE_SUBSCRIPTION][0].logs[3].enabled is True
+        )
+        assert (
+            monitor.diagnostics_settings[AZURE_SUBSCRIPTION][0].logs[3].category
+            == "Alert"
+        )
+        assert (
+            monitor.diagnostics_settings[AZURE_SUBSCRIPTION][0].logs[4].category
+            == "Recommendation"
+        )
+        assert (
+            monitor.diagnostics_settings[AZURE_SUBSCRIPTION][0].logs[5].enabled is True
+        )
+        assert (
+            monitor.diagnostics_settings[AZURE_SUBSCRIPTION][0].logs[5].category
+            == "Policy"
+        )
+        assert (
+            monitor.diagnostics_settings[AZURE_SUBSCRIPTION][0].logs[6].category
+            == "Autoscale"
+        )
+        assert (
+            monitor.diagnostics_settings[AZURE_SUBSCRIPTION][0].logs[7].category
+            == "ResourceHealth"
+        )
+        assert (
+            monitor.diagnostics_settings[AZURE_SUBSCRIPTION][0].storage_account_id
+            == "/subscriptions/1234a5-123a-123a-123a-1234567890ab/resourceGroups/rg/providers/Microsoft.Storage/storageAccounts/storageaccountname"
+        )
diff --git a/tests/providers/azure/services/mysql/mysql_flexible_server_audit_log_connection_activated/mysql_flexible_server_audit_log_connection_activated_test.py b/tests/providers/azure/services/mysql/mysql_flexible_server_audit_log_connection_activated/mysql_flexible_server_audit_log_connection_activated_test.py
new file mode 100644
index 00000000000..91b3096f3a1
--- /dev/null
+++ b/tests/providers/azure/services/mysql/mysql_flexible_server_audit_log_connection_activated/mysql_flexible_server_audit_log_connection_activated_test.py
@@ -0,0 +1,171 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.mysql.mysql_service import (
+    Configuration,
+    FlexibleServer,
+)
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_mysql_flexible_server_audit_log_connection_activated:
+    def test_mysql_no_subscriptions(self):
+        mysql_client = mock.MagicMock
+        mysql_client.flexible_servers = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.mysql.mysql_flexible_server_audit_log_connection_activated.mysql_flexible_server_audit_log_connection_activated.mysql_client",
+            new=mysql_client,
+        ):
+            from prowler.providers.azure.services.mysql.mysql_flexible_server_audit_log_connection_activated.mysql_flexible_server_audit_log_connection_activated import (
+                mysql_flexible_server_audit_log_connection_activated,
+            )
+
+            check = mysql_flexible_server_audit_log_connection_activated()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_mysql_no_servers(self):
+        mysql_client = mock.MagicMock
+        mysql_client.flexible_servers = {AZURE_SUBSCRIPTION: {}}
+
+        with mock.patch(
+            "prowler.providers.azure.services.mysql.mysql_flexible_server_audit_log_connection_activated.mysql_flexible_server_audit_log_connection_activated.mysql_client",
+            new=mysql_client,
+        ):
+            from prowler.providers.azure.services.mysql.mysql_flexible_server_audit_log_connection_activated.mysql_flexible_server_audit_log_connection_activated import (
+                mysql_flexible_server_audit_log_connection_activated,
+            )
+
+            check = mysql_flexible_server_audit_log_connection_activated()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_mysql_audit_log_connection_not_connection(self):
+        server_name = str(uuid4())
+        mysql_client = mock.MagicMock
+        mysql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: {
+                server_name: FlexibleServer(
+                    resource_id="/subscriptions/resource_id",
+                    location="location",
+                    version="version",
+                    configurations={
+                        "audit_log_events": Configuration(
+                            resource_id=f"/subscriptions/{server_name}/configurations/audit_log_events",
+                            description="description",
+                            value="ADMIN,DDL",
+                        )
+                    },
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.mysql.mysql_flexible_server_audit_log_connection_activated.mysql_flexible_server_audit_log_connection_activated.mysql_client",
+            new=mysql_client,
+        ):
+            from prowler.providers.azure.services.mysql.mysql_flexible_server_audit_log_connection_activated.mysql_flexible_server_audit_log_connection_activated import (
+                mysql_flexible_server_audit_log_connection_activated,
+            )
+
+            check = mysql_flexible_server_audit_log_connection_activated()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == server_name
+            assert (
+                result[0].resource_id
+                == f"/subscriptions/{server_name}/configurations/audit_log_events"
+            )
+            assert (
+                result[0].status_extended
+                == f"Audit log is disabled for server {server_name} in subscription {AZURE_SUBSCRIPTION}."
+            )
+
+    def test_mysql_audit_log_connection_activated(self):
+        server_name = str(uuid4())
+        mysql_client = mock.MagicMock
+        mysql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: {
+                server_name: FlexibleServer(
+                    resource_id="/subscriptions/resource_id",
+                    location="location",
+                    version="version",
+                    configurations={
+                        "audit_log_events": Configuration(
+                            resource_id=f"/subscriptions/{server_name}/configurations/audit_log_events",
+                            description="description",
+                            value="CONNECTION",
+                        )
+                    },
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.mysql.mysql_flexible_server_audit_log_connection_activated.mysql_flexible_server_audit_log_connection_activated.mysql_client",
+            new=mysql_client,
+        ):
+            from prowler.providers.azure.services.mysql.mysql_flexible_server_audit_log_connection_activated.mysql_flexible_server_audit_log_connection_activated import (
+                mysql_flexible_server_audit_log_connection_activated,
+            )
+
+            check = mysql_flexible_server_audit_log_connection_activated()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == server_name
+            assert (
+                result[0].resource_id
+                == f"/subscriptions/{server_name}/configurations/audit_log_events"
+            )
+            assert (
+                result[0].status_extended
+                == f"Audit log is enabled for server {server_name} in subscription {AZURE_SUBSCRIPTION}."
+            )
+
+    def test_mysql_audit_log_connection_activated_with_other_options(self):
+        server_name = str(uuid4())
+        mysql_client = mock.MagicMock
+        mysql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: {
+                server_name: FlexibleServer(
+                    resource_id="/subscriptions/resource_id",
+                    location="location",
+                    version="version",
+                    configurations={
+                        "audit_log_events": Configuration(
+                            resource_id=f"/subscriptions/{server_name}/configurations/audit_log_events",
+                            description="description",
+                            value="ADMIN,GENERAL,CONNECTION,DDL",
+                        )
+                    },
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.mysql.mysql_flexible_server_audit_log_connection_activated.mysql_flexible_server_audit_log_connection_activated.mysql_client",
+            new=mysql_client,
+        ):
+            from prowler.providers.azure.services.mysql.mysql_flexible_server_audit_log_connection_activated.mysql_flexible_server_audit_log_connection_activated import (
+                mysql_flexible_server_audit_log_connection_activated,
+            )
+
+            check = mysql_flexible_server_audit_log_connection_activated()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == server_name
+            assert (
+                result[0].resource_id
+                == f"/subscriptions/{server_name}/configurations/audit_log_events"
+            )
+            assert (
+                result[0].status_extended
+                == f"Audit log is enabled for server {server_name} in subscription {AZURE_SUBSCRIPTION}."
+            )
diff --git a/tests/providers/azure/services/mysql/mysql_flexible_server_audit_log_enabled/mysql_flexible_server_audit_log_enabled_test.py b/tests/providers/azure/services/mysql/mysql_flexible_server_audit_log_enabled/mysql_flexible_server_audit_log_enabled_test.py
new file mode 100644
index 00000000000..7ae19929328
--- /dev/null
+++ b/tests/providers/azure/services/mysql/mysql_flexible_server_audit_log_enabled/mysql_flexible_server_audit_log_enabled_test.py
@@ -0,0 +1,128 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.mysql.mysql_service import (
+    Configuration,
+    FlexibleServer,
+)
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_mysql_flexible_server_audit_log_enabled:
+    def test_mysql_no_subscriptions(self):
+        mysql_client = mock.MagicMock
+        mysql_client.flexible_servers = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.mysql.mysql_flexible_server_audit_log_enabled.mysql_flexible_server_audit_log_enabled.mysql_client",
+            new=mysql_client,
+        ):
+            from prowler.providers.azure.services.mysql.mysql_flexible_server_audit_log_enabled.mysql_flexible_server_audit_log_enabled import (
+                mysql_flexible_server_audit_log_enabled,
+            )
+
+            check = mysql_flexible_server_audit_log_enabled()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_mysql_no_servers(self):
+        mysql_client = mock.MagicMock
+        mysql_client.flexible_servers = {AZURE_SUBSCRIPTION: {}}
+
+        with mock.patch(
+            "prowler.providers.azure.services.mysql.mysql_flexible_server_audit_log_enabled.mysql_flexible_server_audit_log_enabled.mysql_client",
+            new=mysql_client,
+        ):
+            from prowler.providers.azure.services.mysql.mysql_flexible_server_audit_log_enabled.mysql_flexible_server_audit_log_enabled import (
+                mysql_flexible_server_audit_log_enabled,
+            )
+
+            check = mysql_flexible_server_audit_log_enabled()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_mysql_audit_log_disabled(self):
+        server_name = str(uuid4())
+        mysql_client = mock.MagicMock
+        mysql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: {
+                server_name: FlexibleServer(
+                    resource_id="/subscriptions/resource_id",
+                    location="location",
+                    version="version",
+                    configurations={
+                        "audit_log_enabled": Configuration(
+                            resource_id=f"/subscriptions/{server_name}/configurations/audit_log_enabled",
+                            description="description",
+                            value="OFF",
+                        )
+                    },
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.mysql.mysql_flexible_server_audit_log_enabled.mysql_flexible_server_audit_log_enabled.mysql_client",
+            new=mysql_client,
+        ):
+            from prowler.providers.azure.services.mysql.mysql_flexible_server_audit_log_enabled.mysql_flexible_server_audit_log_enabled import (
+                mysql_flexible_server_audit_log_enabled,
+            )
+
+            check = mysql_flexible_server_audit_log_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == server_name
+            assert (
+                result[0].resource_id
+                == f"/subscriptions/{server_name}/configurations/audit_log_enabled"
+            )
+            assert (
+                result[0].status_extended
+                == f"Audit log is disabled for server {server_name} in subscription {AZURE_SUBSCRIPTION}."
+            )
+
+    def test_mysql_audit_log_enabled(self):
+        server_name = str(uuid4())
+        mysql_client = mock.MagicMock
+        mysql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: {
+                server_name: FlexibleServer(
+                    resource_id="/subscriptions/resource_id",
+                    location="location",
+                    version="version",
+                    configurations={
+                        "audit_log_enabled": Configuration(
+                            resource_id=f"/subscriptions/{server_name}/configurations/audit_log_enabled",
+                            description="description",
+                            value="ON",
+                        )
+                    },
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.mysql.mysql_flexible_server_audit_log_enabled.mysql_flexible_server_audit_log_enabled.mysql_client",
+            new=mysql_client,
+        ):
+            from prowler.providers.azure.services.mysql.mysql_flexible_server_audit_log_enabled.mysql_flexible_server_audit_log_enabled import (
+                mysql_flexible_server_audit_log_enabled,
+            )
+
+            check = mysql_flexible_server_audit_log_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == server_name
+            assert (
+                result[0].resource_id
+                == f"/subscriptions/{server_name}/configurations/audit_log_enabled"
+            )
+            assert (
+                result[0].status_extended
+                == f"Audit log is enabled for server {server_name} in subscription {AZURE_SUBSCRIPTION}."
+            )
diff --git a/tests/providers/azure/services/mysql/mysql_flexible_server_minimum_tls_version_12/mysql_flexible_server_minimum_tls_version_12_test.py b/tests/providers/azure/services/mysql/mysql_flexible_server_minimum_tls_version_12/mysql_flexible_server_minimum_tls_version_12_test.py
new file mode 100644
index 00000000000..1e195957732
--- /dev/null
+++ b/tests/providers/azure/services/mysql/mysql_flexible_server_minimum_tls_version_12/mysql_flexible_server_minimum_tls_version_12_test.py
@@ -0,0 +1,243 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.mysql.mysql_service import (
+    Configuration,
+    FlexibleServer,
+)
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_mysql_flexible_server_minimum_tls_version_12:
+    def test_mysql_no_subscriptions(self):
+        mysql_client = mock.MagicMock
+        mysql_client.flexible_servers = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.mysql.mysql_flexible_server_minimum_tls_version_12.mysql_flexible_server_minimum_tls_version_12.mysql_client",
+            new=mysql_client,
+        ):
+            from prowler.providers.azure.services.mysql.mysql_flexible_server_minimum_tls_version_12.mysql_flexible_server_minimum_tls_version_12 import (
+                mysql_flexible_server_minimum_tls_version_12,
+            )
+
+            check = mysql_flexible_server_minimum_tls_version_12()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_mysql_no_servers(self):
+        mysql_client = mock.MagicMock
+        mysql_client.flexible_servers = {AZURE_SUBSCRIPTION: {}}
+
+        with mock.patch(
+            "prowler.providers.azure.services.mysql.mysql_flexible_server_minimum_tls_version_12.mysql_flexible_server_minimum_tls_version_12.mysql_client",
+            new=mysql_client,
+        ):
+            from prowler.providers.azure.services.mysql.mysql_flexible_server_minimum_tls_version_12.mysql_flexible_server_minimum_tls_version_12 import (
+                mysql_flexible_server_minimum_tls_version_12,
+            )
+
+            check = mysql_flexible_server_minimum_tls_version_12()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_mysql_no_tls_configuration(self):
+        server_name = str(uuid4())
+        mysql_client = mock.MagicMock
+        mysql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: {
+                server_name: FlexibleServer(
+                    resource_id="/subscriptions/resource_id",
+                    location="location",
+                    version="version",
+                    configurations={},
+                )
+            }
+        }
+        with mock.patch(
+            "prowler.providers.azure.services.mysql.mysql_flexible_server_minimum_tls_version_12.mysql_flexible_server_minimum_tls_version_12.mysql_client",
+            new=mysql_client,
+        ):
+            from prowler.providers.azure.services.mysql.mysql_flexible_server_minimum_tls_version_12.mysql_flexible_server_minimum_tls_version_12 import (
+                mysql_flexible_server_minimum_tls_version_12,
+            )
+
+            check = mysql_flexible_server_minimum_tls_version_12()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == server_name
+            assert result[0].resource_id == server_name
+            assert (
+                result[0].status_extended
+                == f"TLS version is not configured in server {server_name} in subscription {AZURE_SUBSCRIPTION}."
+            )
+
+    def test_mysql_flexible_server_minimum_tls_version_12(self):
+        server_name = str(uuid4())
+        mysql_client = mock.MagicMock
+        mysql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: {
+                server_name: FlexibleServer(
+                    resource_id="/subscriptions/resource_id",
+                    location="location",
+                    version="version",
+                    configurations={
+                        "tls_version": Configuration(
+                            resource_id=f"/subscriptions/{server_name}/configurations/tls_version",
+                            description="description",
+                            value="TLSv1.2",
+                        )
+                    },
+                )
+            }
+        }
+        with mock.patch(
+            "prowler.providers.azure.services.mysql.mysql_flexible_server_minimum_tls_version_12.mysql_flexible_server_minimum_tls_version_12.mysql_client",
+            new=mysql_client,
+        ):
+            from prowler.providers.azure.services.mysql.mysql_flexible_server_minimum_tls_version_12.mysql_flexible_server_minimum_tls_version_12 import (
+                mysql_flexible_server_minimum_tls_version_12,
+            )
+
+            check = mysql_flexible_server_minimum_tls_version_12()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == server_name
+            assert (
+                result[0].resource_id
+                == f"/subscriptions/{server_name}/configurations/tls_version"
+            )
+            assert (
+                result[0].status_extended
+                == f"TLS version is TLSv1.2 in server {server_name} in subscription {AZURE_SUBSCRIPTION}. This version of TLS is considered secure."
+            )
+
+    def test_mysql_tls_version_is_1_3(self):
+        server_name = str(uuid4())
+        mysql_client = mock.MagicMock
+        mysql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: {
+                server_name: FlexibleServer(
+                    resource_id="/subscriptions/resource_id",
+                    location="location",
+                    version="version",
+                    configurations={
+                        "tls_version": Configuration(
+                            resource_id=f"/subscriptions/{server_name}/configurations/tls_version",
+                            description="description",
+                            value="TLSv1.3",
+                        )
+                    },
+                )
+            }
+        }
+        with mock.patch(
+            "prowler.providers.azure.services.mysql.mysql_flexible_server_minimum_tls_version_12.mysql_flexible_server_minimum_tls_version_12.mysql_client",
+            new=mysql_client,
+        ):
+            from prowler.providers.azure.services.mysql.mysql_flexible_server_minimum_tls_version_12.mysql_flexible_server_minimum_tls_version_12 import (
+                mysql_flexible_server_minimum_tls_version_12,
+            )
+
+            check = mysql_flexible_server_minimum_tls_version_12()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == server_name
+            assert (
+                result[0].resource_id
+                == f"/subscriptions/{server_name}/configurations/tls_version"
+            )
+            assert (
+                result[0].status_extended
+                == f"TLS version is TLSv1.3 in server {server_name} in subscription {AZURE_SUBSCRIPTION}. This version of TLS is considered secure."
+            )
+
+    def test_mysql_tls_version_is_not_1_2(self):
+        server_name = str(uuid4())
+        mysql_client = mock.MagicMock
+        mysql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: {
+                server_name: FlexibleServer(
+                    resource_id="/subscriptions/resource_id",
+                    location="location",
+                    version="version",
+                    configurations={
+                        "tls_version": Configuration(
+                            resource_id=f"/subscriptions/{server_name}/configurations/tls_version",
+                            description="description",
+                            value="TLSv1.1",
+                        )
+                    },
+                )
+            }
+        }
+        with mock.patch(
+            "prowler.providers.azure.services.mysql.mysql_flexible_server_minimum_tls_version_12.mysql_flexible_server_minimum_tls_version_12.mysql_client",
+            new=mysql_client,
+        ):
+            from prowler.providers.azure.services.mysql.mysql_flexible_server_minimum_tls_version_12.mysql_flexible_server_minimum_tls_version_12 import (
+                mysql_flexible_server_minimum_tls_version_12,
+            )
+
+            check = mysql_flexible_server_minimum_tls_version_12()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == server_name
+            assert (
+                result[0].resource_id
+                == f"/subscriptions/{server_name}/configurations/tls_version"
+            )
+            assert (
+                result[0].status_extended
+                == f"TLS version is TLSv1.1 in server {server_name} in subscription {AZURE_SUBSCRIPTION}. There is at leat one version of TLS that is considered insecure."
+            )
+
+    def test_mysql_tls_version_is_1_1_and_1_3(self):
+        server_name = str(uuid4())
+        mysql_client = mock.MagicMock
+        mysql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: {
+                server_name: FlexibleServer(
+                    resource_id="/subscriptions/resource_id",
+                    location="location",
+                    version="version",
+                    configurations={
+                        "tls_version": Configuration(
+                            resource_id=f"/subscriptions/{server_name}/configurations/tls_version",
+                            description="description",
+                            value="TLSv1.1,TLSv1.3",
+                        )
+                    },
+                )
+            }
+        }
+        with mock.patch(
+            "prowler.providers.azure.services.mysql.mysql_flexible_server_minimum_tls_version_12.mysql_flexible_server_minimum_tls_version_12.mysql_client",
+            new=mysql_client,
+        ):
+            from prowler.providers.azure.services.mysql.mysql_flexible_server_minimum_tls_version_12.mysql_flexible_server_minimum_tls_version_12 import (
+                mysql_flexible_server_minimum_tls_version_12,
+            )
+
+            check = mysql_flexible_server_minimum_tls_version_12()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == server_name
+            assert (
+                result[0].resource_id
+                == f"/subscriptions/{server_name}/configurations/tls_version"
+            )
+            assert (
+                result[0].status_extended
+                == f"TLS version is TLSv1.1,TLSv1.3 in server {server_name} in subscription {AZURE_SUBSCRIPTION}. There is at leat one version of TLS that is considered insecure."
+            )
diff --git a/tests/providers/azure/services/mysql/mysql_flexible_server_ssl_connection_enabled/mysql_flexible_server_ssl_connection_enabled_test.py b/tests/providers/azure/services/mysql/mysql_flexible_server_ssl_connection_enabled/mysql_flexible_server_ssl_connection_enabled_test.py
new file mode 100644
index 00000000000..b91a95d14c4
--- /dev/null
+++ b/tests/providers/azure/services/mysql/mysql_flexible_server_ssl_connection_enabled/mysql_flexible_server_ssl_connection_enabled_test.py
@@ -0,0 +1,229 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.mysql.mysql_service import (
+    Configuration,
+    FlexibleServer,
+)
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_mysql_flexible_server_ssl_connection_enabled:
+    def test_mysql_no_subscriptions(self):
+        mysql_client = mock.MagicMock
+        mysql_client.flexible_servers = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.mysql.mysql_flexible_server_ssl_connection_enabled.mysql_flexible_server_ssl_connection_enabled.mysql_client",
+            new=mysql_client,
+        ):
+            from prowler.providers.azure.services.mysql.mysql_flexible_server_ssl_connection_enabled.mysql_flexible_server_ssl_connection_enabled import (
+                mysql_flexible_server_ssl_connection_enabled,
+            )
+
+            check = mysql_flexible_server_ssl_connection_enabled()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_mysql_no_servers(self):
+        mysql_client = mock.MagicMock
+        mysql_client.flexible_servers = {AZURE_SUBSCRIPTION: {}}
+
+        with mock.patch(
+            "prowler.providers.azure.services.mysql.mysql_flexible_server_ssl_connection_enabled.mysql_flexible_server_ssl_connection_enabled.mysql_client",
+            new=mysql_client,
+        ):
+            from prowler.providers.azure.services.mysql.mysql_flexible_server_ssl_connection_enabled.mysql_flexible_server_ssl_connection_enabled import (
+                mysql_flexible_server_ssl_connection_enabled,
+            )
+
+            check = mysql_flexible_server_ssl_connection_enabled()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_mysql_connection_enabled(self):
+        server_name = str(uuid4())
+        mysql_client = mock.MagicMock
+        mysql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: {
+                server_name: FlexibleServer(
+                    resource_id="/subscriptions/resource_id",
+                    location="location",
+                    version="version",
+                    configurations={
+                        "require_secure_transport": Configuration(
+                            resource_id=f"/subscriptions/{server_name}/configurations/require_secure_transport",
+                            description="description",
+                            value="ON",
+                        )
+                    },
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.mysql.mysql_flexible_server_ssl_connection_enabled.mysql_flexible_server_ssl_connection_enabled.mysql_client",
+            new=mysql_client,
+        ):
+            from prowler.providers.azure.services.mysql.mysql_flexible_server_ssl_connection_enabled.mysql_flexible_server_ssl_connection_enabled import (
+                mysql_flexible_server_ssl_connection_enabled,
+            )
+
+            check = mysql_flexible_server_ssl_connection_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == server_name
+            assert (
+                result[0].resource_id
+                == f"/subscriptions/{server_name}/configurations/require_secure_transport"
+            )
+            assert (
+                result[0].status_extended
+                == f"SSL connection is enabled for server {server_name} in subscription {AZURE_SUBSCRIPTION}."
+            )
+
+    def test_mysql_ssl_connection_disabled(self):
+        server_name = str(uuid4())
+        mysql_client = mock.MagicMock
+        mysql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: {
+                server_name: FlexibleServer(
+                    resource_id="/subscriptions/resource_id",
+                    location="location",
+                    version="version",
+                    configurations={
+                        "require_secure_transport": Configuration(
+                            resource_id=f"/subscriptions/{server_name}/configurations/require_secure_transport",
+                            description="description",
+                            value="OFF",
+                        )
+                    },
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.mysql.mysql_flexible_server_ssl_connection_enabled.mysql_flexible_server_ssl_connection_enabled.mysql_client",
+            new=mysql_client,
+        ):
+            from prowler.providers.azure.services.mysql.mysql_flexible_server_ssl_connection_enabled.mysql_flexible_server_ssl_connection_enabled import (
+                mysql_flexible_server_ssl_connection_enabled,
+            )
+
+            check = mysql_flexible_server_ssl_connection_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == server_name
+            assert (
+                result[0].resource_id
+                == f"/subscriptions/{server_name}/configurations/require_secure_transport"
+            )
+            assert (
+                result[0].status_extended
+                == f"SSL connection is disabled for server {server_name} in subscription {AZURE_SUBSCRIPTION}."
+            )
+
+    def test_mysql_ssl_connection_no_configuration(self):
+        server_name = str(uuid4())
+        mysql_client = mock.MagicMock
+        mysql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: {
+                server_name: FlexibleServer(
+                    resource_id="/subscriptions/resource_id",
+                    location="location",
+                    version="version",
+                    configurations={},
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.mysql.mysql_flexible_server_ssl_connection_enabled.mysql_flexible_server_ssl_connection_enabled.mysql_client",
+            new=mysql_client,
+        ):
+            from prowler.providers.azure.services.mysql.mysql_flexible_server_ssl_connection_enabled.mysql_flexible_server_ssl_connection_enabled import (
+                mysql_flexible_server_ssl_connection_enabled,
+            )
+
+            check = mysql_flexible_server_ssl_connection_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == server_name
+            assert result[0].resource_id == server_name
+            assert (
+                result[0].status_extended
+                == f"SSL connection is disabled for server {server_name} in subscription {AZURE_SUBSCRIPTION}."
+            )
+
+    def test_mysql_ssl_connection_enabled_and_disabled(self):
+        server_name_1 = str(uuid4())
+        server_name_2 = str(uuid4())
+        mysql_client = mock.MagicMock
+        mysql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: {
+                server_name_1: FlexibleServer(
+                    resource_id="/subscriptions/resource_id",
+                    location="location",
+                    version="version",
+                    configurations={
+                        "require_secure_transport": Configuration(
+                            resource_id=f"/subscriptions/{server_name_1}/configurations/require_secure_transport",
+                            description="description",
+                            value="ON",
+                        )
+                    },
+                ),
+                server_name_2: FlexibleServer(
+                    resource_id="/subscriptions/resource_id",
+                    location="location",
+                    version="version",
+                    configurations={
+                        "require_secure_transport": Configuration(
+                            resource_id=f"/subscriptions/{server_name_2}/configurations/require_secure_transport",
+                            description="description",
+                            value="OFF",
+                        )
+                    },
+                ),
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.mysql.mysql_flexible_server_ssl_connection_enabled.mysql_flexible_server_ssl_connection_enabled.mysql_client",
+            new=mysql_client,
+        ):
+            from prowler.providers.azure.services.mysql.mysql_flexible_server_ssl_connection_enabled.mysql_flexible_server_ssl_connection_enabled import (
+                mysql_flexible_server_ssl_connection_enabled,
+            )
+
+            check = mysql_flexible_server_ssl_connection_enabled()
+            result = check.execute()
+            assert len(result) == 2
+            assert result[0].status == "PASS"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == server_name_1
+            assert (
+                result[0].resource_id
+                == f"/subscriptions/{server_name_1}/configurations/require_secure_transport"
+            )
+            assert (
+                result[0].status_extended
+                == f"SSL connection is enabled for server {server_name_1} in subscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[1].status == "FAIL"
+            assert result[1].subscription == AZURE_SUBSCRIPTION
+            assert result[1].resource_name == server_name_2
+            assert (
+                result[1].resource_id
+                == f"/subscriptions/{server_name_2}/configurations/require_secure_transport"
+            )
+            assert (
+                result[1].status_extended
+                == f"SSL connection is disabled for server {server_name_2} in subscription {AZURE_SUBSCRIPTION}."
+            )
diff --git a/tests/providers/azure/services/mysql/mysql_service_test.py b/tests/providers/azure/services/mysql/mysql_service_test.py
new file mode 100644
index 00000000000..e5c98830670
--- /dev/null
+++ b/tests/providers/azure/services/mysql/mysql_service_test.py
@@ -0,0 +1,101 @@
+from unittest.mock import patch
+
+from prowler.providers.azure.services.mysql.mysql_service import (
+    Configuration,
+    FlexibleServer,
+    MySQL,
+)
+from tests.providers.azure.azure_fixtures import (
+    AZURE_SUBSCRIPTION,
+    set_mocked_azure_audit_info,
+)
+
+
+def mock_mysql_get_servers(_):
+    return {
+        AZURE_SUBSCRIPTION: {
+            "test": FlexibleServer(
+                resource_id="/subscriptions/resource_id",
+                location="location",
+                version="version",
+                configurations={
+                    "test": Configuration(
+                        resource_id="/subscriptions/test/resource_id",
+                        description="description",
+                        value="value",
+                    )
+                },
+            )
+        }
+    }
+
+
+def mock_mysql_get_configurations(_):
+    return {
+        "test": Configuration(
+            resource_id="/subscriptions/resource_id",
+            description="description",
+            value="value",
+        )
+    }
+
+
+@patch(
+    "prowler.providers.azure.services.mysql.mysql_service.MySQL.__get_flexible_servers__",
+    new=mock_mysql_get_servers,
+)
+@patch(
+    "prowler.providers.azure.services.mysql.mysql_service.MySQL.__get_configurations__",
+    new=mock_mysql_get_configurations,
+)
+class Test_MySQL_Service:
+    def test__get_client__(self):
+        mysql = MySQL(set_mocked_azure_audit_info())
+        assert (
+            mysql.clients[AZURE_SUBSCRIPTION].__class__.__name__
+            == "MySQLManagementClient"
+        )
+
+    def test__get_subscriptions__(self):
+        mysql = MySQL(set_mocked_azure_audit_info())
+        assert mysql.subscriptions.__class__.__name__ == "dict"
+
+    def test__get_flexible_servers__(self):
+        mysql = MySQL(set_mocked_azure_audit_info())
+        assert len(mysql.flexible_servers) == 1
+        assert (
+            mysql.flexible_servers[AZURE_SUBSCRIPTION]["test"].resource_id
+            == "/subscriptions/resource_id"
+        )
+        assert mysql.flexible_servers[AZURE_SUBSCRIPTION]["test"].location == "location"
+        assert mysql.flexible_servers[AZURE_SUBSCRIPTION]["test"].version == "version"
+        assert (
+            len(mysql.flexible_servers[AZURE_SUBSCRIPTION]["test"].configurations) == 1
+        )
+        assert (
+            mysql.flexible_servers[AZURE_SUBSCRIPTION]["test"]
+            .configurations["test"]
+            .resource_id
+            == "/subscriptions/test/resource_id"
+        )
+        assert (
+            mysql.flexible_servers[AZURE_SUBSCRIPTION]["test"]
+            .configurations["test"]
+            .description
+            == "description"
+        )
+        assert (
+            mysql.flexible_servers[AZURE_SUBSCRIPTION]["test"]
+            .configurations["test"]
+            .value
+            == "value"
+        )
+
+    def test__get_configurations__(self):
+        mysql = MySQL(set_mocked_azure_audit_info())
+        configurations = mysql.__get_configurations__()
+
+        assert len(configurations) == 1
+        assert configurations["test"].resource_id == "/subscriptions/resource_id"
+        assert configurations["test"].description == "description"
+        assert configurations["test"].value == "value"
diff --git a/tests/providers/azure/services/network/network_bastion_host_exists/network_bastion_host_exists_test.py b/tests/providers/azure/services/network/network_bastion_host_exists/network_bastion_host_exists_test.py
new file mode 100644
index 00000000000..bf4fce59d8d
--- /dev/null
+++ b/tests/providers/azure/services/network/network_bastion_host_exists/network_bastion_host_exists_test.py
@@ -0,0 +1,72 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.network.network_service import BastionHost
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_network_bastion_host_exists:
+    def test_no_bastion_hosts(self):
+        network_client = mock.MagicMock
+        network_client.bastion_hosts = {AZURE_SUBSCRIPTION: []}
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ):
+            from prowler.providers.azure.services.network.network_bastion_host_exists.network_bastion_host_exists import (
+                network_bastion_host_exists,
+            )
+
+            check = network_bastion_host_exists()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Bastion Host from subscription {AZURE_SUBSCRIPTION} does not exist"
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "Bastion Host"
+            assert result[0].resource_id == "N/A"
+
+    def test_network_bastion_host_exists(self):
+        network_client = mock.MagicMock
+        bastion_host_name = "Bastion Host Name"
+        bastion_host_id = str(uuid4())
+
+        network_client.bastion_hosts = {
+            AZURE_SUBSCRIPTION: [
+                BastionHost(
+                    id=bastion_host_id,
+                    name=bastion_host_name,
+                    location="location",
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ):
+            from prowler.providers.azure.services.network.network_bastion_host_exists.network_bastion_host_exists import (
+                network_bastion_host_exists,
+            )
+
+            check = network_bastion_host_exists()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Bastion Host from subscription {AZURE_SUBSCRIPTION} available are: {bastion_host_name}"
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "Bastion Host"
+            assert result[0].resource_id == bastion_host_id
diff --git a/tests/providers/azure/services/network/network_flow_log_more_than_90_days/network_flow_log_more_than_90_days_test.py b/tests/providers/azure/services/network/network_flow_log_more_than_90_days/network_flow_log_more_than_90_days_test.py
new file mode 100644
index 00000000000..d2f79c97843
--- /dev/null
+++ b/tests/providers/azure/services/network/network_flow_log_more_than_90_days/network_flow_log_more_than_90_days_test.py
@@ -0,0 +1,199 @@
+from unittest import mock
+from uuid import uuid4
+
+from azure.mgmt.network.models._models import FlowLog, RetentionPolicyParameters
+
+from prowler.providers.azure.services.network.network_service import NetworkWatcher
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_network_flow_log_more_than_90_days:
+    def test_no_network_watchers(self):
+        network_client = mock.MagicMock
+        network_client.network_watchers = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ):
+            from prowler.providers.azure.services.network.network_flow_log_more_than_90_days.network_flow_log_more_than_90_days import (
+                network_flow_log_more_than_90_days,
+            )
+
+            check = network_flow_log_more_than_90_days()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_network_network_watchers_no_flow_logs(self):
+        network_client = mock.MagicMock
+        network_watcher_name = "Network Watcher Name"
+        network_watcher_id = str(uuid4())
+
+        network_client.network_watchers = {
+            AZURE_SUBSCRIPTION: [
+                NetworkWatcher(
+                    id=network_watcher_id,
+                    name=network_watcher_name,
+                    location="location",
+                    flow_logs=[],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ):
+            from prowler.providers.azure.services.network.network_flow_log_more_than_90_days.network_flow_log_more_than_90_days import (
+                network_flow_log_more_than_90_days,
+            )
+
+            check = network_flow_log_more_than_90_days()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Network Watcher {network_watcher_name} from subscription {AZURE_SUBSCRIPTION} has no flow logs"
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == network_watcher_name
+            assert result[0].resource_id == network_watcher_id
+
+    def test_network_network_watchers_flow_logs_disabled(self):
+        network_client = mock.MagicMock
+        network_watcher_name = "Network Watcher Name"
+        network_watcher_id = str(uuid4())
+
+        network_client.network_watchers = {
+            AZURE_SUBSCRIPTION: [
+                NetworkWatcher(
+                    id=network_watcher_id,
+                    name=network_watcher_name,
+                    location="location",
+                    flow_logs=[
+                        FlowLog(
+                            enabled=False,
+                            retention_policy=RetentionPolicyParameters(days=90),
+                        )
+                    ],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ):
+            from prowler.providers.azure.services.network.network_flow_log_more_than_90_days.network_flow_log_more_than_90_days import (
+                network_flow_log_more_than_90_days,
+            )
+
+            check = network_flow_log_more_than_90_days()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Network Watcher {network_watcher_name} from subscription {AZURE_SUBSCRIPTION} has flow logs disabled"
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == network_watcher_name
+            assert result[0].resource_id == network_watcher_id
+
+    def test_network_network_watchers_flow_logs_retention_days_80(self):
+        network_client = mock.MagicMock
+        network_watcher_name = "Network Watcher Name"
+        network_watcher_id = str(uuid4())
+
+        network_client.network_watchers = {
+            AZURE_SUBSCRIPTION: [
+                NetworkWatcher(
+                    id=network_watcher_id,
+                    name=network_watcher_name,
+                    location="location",
+                    flow_logs=[
+                        FlowLog(
+                            enabled=True,
+                            retention_policy=RetentionPolicyParameters(days=80),
+                        )
+                    ],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ):
+            from prowler.providers.azure.services.network.network_flow_log_more_than_90_days.network_flow_log_more_than_90_days import (
+                network_flow_log_more_than_90_days,
+            )
+
+            check = network_flow_log_more_than_90_days()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Network Watcher {network_watcher_name} from subscription {AZURE_SUBSCRIPTION} flow logs retention policy is less than 90 days"
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == network_watcher_name
+            assert result[0].resource_id == network_watcher_id
+
+    def test_network_network_watchers_flow_logs_well_configured(self):
+        network_client = mock.MagicMock
+        network_watcher_name = "Network Watcher Name"
+        network_watcher_id = str(uuid4())
+
+        network_client.network_watchers = {
+            AZURE_SUBSCRIPTION: [
+                NetworkWatcher(
+                    id=network_watcher_id,
+                    name=network_watcher_name,
+                    location="location",
+                    flow_logs=[
+                        FlowLog(
+                            enabled=True,
+                            retention_policy=RetentionPolicyParameters(days=90),
+                        )
+                    ],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ):
+            from prowler.providers.azure.services.network.network_flow_log_more_than_90_days.network_flow_log_more_than_90_days import (
+                network_flow_log_more_than_90_days,
+            )
+
+            check = network_flow_log_more_than_90_days()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Network Watcher {network_watcher_name} from subscription {AZURE_SUBSCRIPTION} has flow logs enabled for more than 90 days"
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == network_watcher_name
+            assert result[0].resource_id == network_watcher_id
diff --git a/tests/providers/azure/services/network/network_http_internet_access_restricted/network_http_internet_access_restricted_test.py b/tests/providers/azure/services/network/network_http_internet_access_restricted/network_http_internet_access_restricted_test.py
new file mode 100644
index 00000000000..6f19e37619e
--- /dev/null
+++ b/tests/providers/azure/services/network/network_http_internet_access_restricted/network_http_internet_access_restricted_test.py
@@ -0,0 +1,208 @@
+from unittest import mock
+from uuid import uuid4
+
+from azure.mgmt.network.models._models import SecurityRule
+
+from prowler.providers.azure.services.network.network_service import SecurityGroup
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_network_http_internet_access_restricted:
+    def test_no_security_groups(self):
+        network_client = mock.MagicMock
+        network_client.security_groups = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ):
+            from prowler.providers.azure.services.network.network_http_internet_access_restricted.network_http_internet_access_restricted import (
+                network_http_internet_access_restricted,
+            )
+
+            check = network_http_internet_access_restricted()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_network_security_groups_no_security_rules(self):
+        network_client = mock.MagicMock
+        security_group_name = "Security Group Name"
+        security_group_id = str(uuid4())
+
+        network_client.security_groups = {
+            AZURE_SUBSCRIPTION: [
+                SecurityGroup(
+                    id=security_group_id,
+                    name=security_group_name,
+                    location="location",
+                    security_rules=[],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ):
+            from prowler.providers.azure.services.network.network_http_internet_access_restricted.network_http_internet_access_restricted import (
+                network_http_internet_access_restricted,
+            )
+
+            check = network_http_internet_access_restricted()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Security Group {security_group_name} from subscription {AZURE_SUBSCRIPTION} has HTTP internet access restricted."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == security_group_name
+            assert result[0].resource_id == security_group_id
+
+    def test_network_security_groups_invalid_security_rules(self):
+        network_client = mock.MagicMock
+        security_group_name = "Security Group Name"
+        security_group_id = str(uuid4())
+
+        network_client.security_groups = {
+            AZURE_SUBSCRIPTION: [
+                SecurityGroup(
+                    id=security_group_id,
+                    name=security_group_name,
+                    location="location",
+                    security_rules=[
+                        SecurityRule(
+                            destination_port_range="80",
+                            protocol="TCP",
+                            source_address_prefix="Internet",
+                            access="Allow",
+                            direction="Inbound",
+                        )
+                    ],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ):
+            from prowler.providers.azure.services.network.network_http_internet_access_restricted.network_http_internet_access_restricted import (
+                network_http_internet_access_restricted,
+            )
+
+            check = network_http_internet_access_restricted()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Security Group {security_group_name} from subscription {AZURE_SUBSCRIPTION} has HTTP internet access allowed."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == security_group_name
+            assert result[0].resource_id == security_group_id
+
+    def test_network_security_groups_invalid_security_rules_range(self):
+        network_client = mock.MagicMock
+        security_group_name = "Security Group Name"
+        security_group_id = str(uuid4())
+
+        network_client.security_groups = {
+            AZURE_SUBSCRIPTION: [
+                SecurityGroup(
+                    id=security_group_id,
+                    name=security_group_name,
+                    location="location",
+                    security_rules=[
+                        SecurityRule(
+                            destination_port_range="20-100",
+                            protocol="TCP",
+                            source_address_prefix="Internet",
+                            access="Allow",
+                            direction="Inbound",
+                        )
+                    ],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ):
+            from prowler.providers.azure.services.network.network_http_internet_access_restricted.network_http_internet_access_restricted import (
+                network_http_internet_access_restricted,
+            )
+
+            check = network_http_internet_access_restricted()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Security Group {security_group_name} from subscription {AZURE_SUBSCRIPTION} has HTTP internet access allowed."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == security_group_name
+            assert result[0].resource_id == security_group_id
+
+    def test_network_security_groups_valid_security_rules(self):
+        network_client = mock.MagicMock
+        security_group_name = "Security Group Name"
+        security_group_id = str(uuid4())
+
+        network_client.security_groups = {
+            AZURE_SUBSCRIPTION: [
+                SecurityGroup(
+                    id=security_group_id,
+                    name=security_group_name,
+                    location="location",
+                    security_rules=[
+                        SecurityRule(
+                            destination_port_range="23",
+                            protocol="TCP",
+                            source_address_prefix="Internet",
+                            access="Allow",
+                            direction="Inbound",
+                        )
+                    ],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ):
+            from prowler.providers.azure.services.network.network_http_internet_access_restricted.network_http_internet_access_restricted import (
+                network_http_internet_access_restricted,
+            )
+
+            check = network_http_internet_access_restricted()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Security Group {security_group_name} from subscription {AZURE_SUBSCRIPTION} has HTTP internet access restricted."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == security_group_name
+            assert result[0].resource_id == security_group_id
diff --git a/tests/providers/azure/services/network/network_public_ip_shodan/network_public_ip_shodan_test.py b/tests/providers/azure/services/network/network_public_ip_shodan/network_public_ip_shodan_test.py
new file mode 100644
index 00000000000..128aba54217
--- /dev/null
+++ b/tests/providers/azure/services/network/network_public_ip_shodan/network_public_ip_shodan_test.py
@@ -0,0 +1,78 @@
+from unittest import mock
+
+from prowler.providers.azure.services.network.network_service import PublicIp
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_network_public_ip_shodan:
+    def test_no_public_ip_addresses(self):
+        network_client = mock.MagicMock
+        network_client.public_ip_addresses = {}
+        network_client.audit_info = mock.MagicMock
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ):
+            from prowler.providers.azure.services.network.network_public_ip_shodan.network_public_ip_shodan import (
+                network_public_ip_shodan,
+            )
+
+            network_client.audit_config = {"shodan_api_key": "api_key"}
+
+            check = network_public_ip_shodan()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_network_ip_in_shodan(self):
+        network_client = mock.MagicMock
+        public_ip_id = "id"
+        public_ip_name = "name"
+        ip_address = "ip_address"
+        shodan_info = {
+            "ports": [80, 443],
+            "isp": "Microsoft Corporation",
+            "country_name": "country_name",
+        }
+        network_client.audit_info = mock.MagicMock
+
+        network_client.public_ip_addresses = {
+            AZURE_SUBSCRIPTION: [
+                PublicIp(
+                    id=public_ip_id,
+                    name=public_ip_name,
+                    location=None,
+                    ip_address=ip_address,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ), mock.patch(
+            "prowler.providers.azure.services.network.network_public_ip_shodan.network_public_ip_shodan.shodan.Shodan.host",
+            return_value=shodan_info,
+        ):
+            from prowler.providers.azure.services.network.network_public_ip_shodan.network_public_ip_shodan import (
+                network_public_ip_shodan,
+            )
+
+            network_client.audit_config = {"shodan_api_key": "api_key"}
+            check = network_public_ip_shodan()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Public IP {ip_address} listed in Shodan with open ports {str(shodan_info['ports'])} and ISP {shodan_info['isp']} in {shodan_info['country_name']}. More info at https://www.shodan.io/host/{ip_address}."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == public_ip_name
+            assert result[0].resource_id == public_ip_id
diff --git a/tests/providers/azure/services/network/network_rdp_internet_access_restricted/network_rdp_internet_access_restricted_test.py b/tests/providers/azure/services/network/network_rdp_internet_access_restricted/network_rdp_internet_access_restricted_test.py
new file mode 100644
index 00000000000..e44342792b1
--- /dev/null
+++ b/tests/providers/azure/services/network/network_rdp_internet_access_restricted/network_rdp_internet_access_restricted_test.py
@@ -0,0 +1,161 @@
+from unittest import mock
+from uuid import uuid4
+
+from azure.mgmt.network.models._models import SecurityRule
+
+from prowler.providers.azure.services.network.network_service import SecurityGroup
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_network_rdp_internet_access_restricted:
+    def test_no_security_groups(self):
+        network_client = mock.MagicMock
+        network_client.security_groups = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ):
+            from prowler.providers.azure.services.network.network_rdp_internet_access_restricted.network_rdp_internet_access_restricted import (
+                network_rdp_internet_access_restricted,
+            )
+
+            check = network_rdp_internet_access_restricted()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_network_security_groups_no_security_rules(self):
+        network_client = mock.MagicMock
+        security_group_name = "Security Group Name"
+        security_group_id = str(uuid4())
+
+        network_client.security_groups = {
+            AZURE_SUBSCRIPTION: [
+                SecurityGroup(
+                    id=security_group_id,
+                    name=security_group_name,
+                    location="location",
+                    security_rules=[],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ):
+            from prowler.providers.azure.services.network.network_rdp_internet_access_restricted.network_rdp_internet_access_restricted import (
+                network_rdp_internet_access_restricted,
+            )
+
+            check = network_rdp_internet_access_restricted()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Security Group {security_group_name} from subscription {AZURE_SUBSCRIPTION} has RDP internet access restricted."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == security_group_name
+            assert result[0].resource_id == security_group_id
+
+    def test_network_security_groups_valid_security_rules(self):
+        network_client = mock.MagicMock
+        security_group_name = "Security Group Name"
+        security_group_id = str(uuid4())
+
+        network_client.security_groups = {
+            AZURE_SUBSCRIPTION: [
+                SecurityGroup(
+                    id=security_group_id,
+                    name=security_group_name,
+                    location="location",
+                    security_rules=[
+                        SecurityRule(
+                            destination_port_range="3388",
+                            protocol="TCP",
+                            source_address_prefix="Internet",
+                            access="Allow",
+                            direction="Inbound",
+                        )
+                    ],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ):
+            from prowler.providers.azure.services.network.network_rdp_internet_access_restricted.network_rdp_internet_access_restricted import (
+                network_rdp_internet_access_restricted,
+            )
+
+            check = network_rdp_internet_access_restricted()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Security Group {security_group_name} from subscription {AZURE_SUBSCRIPTION} has RDP internet access restricted."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == security_group_name
+            assert result[0].resource_id == security_group_id
+
+    def test_network_security_groups_invalid_security_rules_range(self):
+        network_client = mock.MagicMock
+        security_group_name = "Security Group Name"
+        security_group_id = str(uuid4())
+
+        network_client.security_groups = {
+            AZURE_SUBSCRIPTION: [
+                SecurityGroup(
+                    id=security_group_id,
+                    name=security_group_name,
+                    location="location",
+                    security_rules=[
+                        SecurityRule(
+                            destination_port_range="33-6000",
+                            protocol="TCP",
+                            source_address_prefix="Internet",
+                            access="Allow",
+                            direction="Inbound",
+                        )
+                    ],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ):
+            from prowler.providers.azure.services.network.network_rdp_internet_access_restricted.network_rdp_internet_access_restricted import (
+                network_rdp_internet_access_restricted,
+            )
+
+            check = network_rdp_internet_access_restricted()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Security Group {security_group_name} from subscription {AZURE_SUBSCRIPTION} has RDP internet access allowed."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == security_group_name
+            assert result[0].resource_id == security_group_id
diff --git a/tests/providers/azure/services/network/network_service_test.py b/tests/providers/azure/services/network/network_service_test.py
new file mode 100644
index 00000000000..6d6fb176804
--- /dev/null
+++ b/tests/providers/azure/services/network/network_service_test.py
@@ -0,0 +1,161 @@
+from unittest.mock import patch
+
+from azure.mgmt.network.models import FlowLog
+
+from prowler.providers.azure.services.network.network_service import (
+    BastionHost,
+    Network,
+    NetworkWatcher,
+    PublicIp,
+    SecurityGroup,
+)
+from tests.providers.azure.azure_fixtures import (
+    AZURE_SUBSCRIPTION,
+    set_mocked_azure_audit_info,
+)
+
+
+def mock_network_get_security_groups(_):
+    return {
+        AZURE_SUBSCRIPTION: [
+            SecurityGroup(
+                id="id",
+                name="name",
+                location="location",
+                security_rules=[],
+            )
+        ]
+    }
+
+
+def mock_network_get_bastion_hosts(_):
+    return {
+        AZURE_SUBSCRIPTION: [
+            BastionHost(
+                id="id",
+                name="name",
+                location="location",
+            )
+        ]
+    }
+
+
+def mock_network_get_network_watchers(_):
+    return {
+        AZURE_SUBSCRIPTION: [
+            NetworkWatcher(
+                id="id",
+                name="name",
+                location="location",
+                flow_logs=[FlowLog(enabled=True, retention_policy=90)],
+            )
+        ]
+    }
+
+
+def mock_network_get_public_ip_addresses(_):
+    return {
+        AZURE_SUBSCRIPTION: [
+            PublicIp(
+                id="id",
+                name="name",
+                location="location",
+                ip_address="ip_address",
+            )
+        ]
+    }
+
+
+@patch(
+    "prowler.providers.azure.services.network.network_service.Network.__get_security_groups__",
+    new=mock_network_get_security_groups,
+)
+@patch(
+    "prowler.providers.azure.services.network.network_service.Network.__get_bastion_hosts__",
+    new=mock_network_get_bastion_hosts,
+)
+@patch(
+    "prowler.providers.azure.services.network.network_service.Network.__get_network_watchers__",
+    new=mock_network_get_network_watchers,
+)
+@patch(
+    "prowler.providers.azure.services.network.network_service.Network.__get_public_ip_addresses__",
+    new=mock_network_get_public_ip_addresses,
+)
+class Test_Network_Service:
+    def test__get_client__(self):
+        network = Network(set_mocked_azure_audit_info())
+        assert (
+            network.clients[AZURE_SUBSCRIPTION].__class__.__name__
+            == "NetworkManagementClient"
+        )
+
+    def test__get_security_groups__(self):
+        network = Network(set_mocked_azure_audit_info())
+        assert (
+            network.security_groups[AZURE_SUBSCRIPTION][0].__class__.__name__
+            == "SecurityGroup"
+        )
+        assert network.security_groups[AZURE_SUBSCRIPTION][0].id == "id"
+        assert network.security_groups[AZURE_SUBSCRIPTION][0].name == "name"
+        assert network.security_groups[AZURE_SUBSCRIPTION][0].location == "location"
+        assert network.security_groups[AZURE_SUBSCRIPTION][0].security_rules == []
+
+    def test__get_network_watchers__(self):
+        network = Network(set_mocked_azure_audit_info())
+        assert (
+            network.network_watchers[AZURE_SUBSCRIPTION][0].__class__.__name__
+            == "NetworkWatcher"
+        )
+        assert network.network_watchers[AZURE_SUBSCRIPTION][0].id == "id"
+        assert network.network_watchers[AZURE_SUBSCRIPTION][0].name == "name"
+        assert network.network_watchers[AZURE_SUBSCRIPTION][0].location == "location"
+        assert network.network_watchers[AZURE_SUBSCRIPTION][0].flow_logs == [
+            FlowLog(enabled=True, retention_policy=90)
+        ]
+
+    def __get_flow_logs__(self):
+        network = Network(set_mocked_azure_audit_info())
+        nw_name = "name"
+        assert (
+            network.network_watchers[AZURE_SUBSCRIPTION][0]
+            .flow_logs[nw_name][0]
+            .__class__.__name__
+            == "FlowLog"
+        )
+        assert network.network_watchers[AZURE_SUBSCRIPTION][0].flow_logs == [
+            FlowLog(enabled=True, retention_policy=90)
+        ]
+        assert (
+            network.network_watchers[AZURE_SUBSCRIPTION][0].flow_logs[0].enabled is True
+        )
+        assert (
+            network.network_watchers[AZURE_SUBSCRIPTION][0]
+            .flow_logs[0]
+            .retention_policy
+            == 90
+        )
+
+    def __get_bastion_hosts__(self):
+        network = Network(set_mocked_azure_audit_info())
+        assert (
+            network.bastion_hosts[AZURE_SUBSCRIPTION][0].__class__.__name__
+            == "BastionHost"
+        )
+        assert network.bastion_hosts[AZURE_SUBSCRIPTION][0].id == "id"
+        assert network.bastion_hosts[AZURE_SUBSCRIPTION][0].name == "name"
+        assert network.bastion_hosts[AZURE_SUBSCRIPTION][0].location == "location"
+
+    def __get_public_ip_addresses__(self):
+        network = Network(set_mocked_azure_audit_info())
+        assert (
+            network.public_ip_addresses[AZURE_SUBSCRIPTION][0].__class__.__name__
+            == "PublicIp"
+        )
+        assert network.public_ip_addresses[AZURE_SUBSCRIPTION][0].id == "id"
+        assert network.public_ip_addresses[AZURE_SUBSCRIPTION][0].name == "name"
+        assert network.public_ip_addresses[AZURE_SUBSCRIPTION][0].location == "location"
+        assert (
+            network.public_ip_addresses[AZURE_SUBSCRIPTION][0].ip_address
+            == "ip_address"
+        )
diff --git a/tests/providers/azure/services/network/network_ssh_internet_access_restricted/network_ssh_internet_access_restricted_test.py b/tests/providers/azure/services/network/network_ssh_internet_access_restricted/network_ssh_internet_access_restricted_test.py
new file mode 100644
index 00000000000..8d001d82ce6
--- /dev/null
+++ b/tests/providers/azure/services/network/network_ssh_internet_access_restricted/network_ssh_internet_access_restricted_test.py
@@ -0,0 +1,208 @@
+from unittest import mock
+from uuid import uuid4
+
+from azure.mgmt.network.models._models import SecurityRule
+
+from prowler.providers.azure.services.network.network_service import SecurityGroup
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_network_ssh_internet_access_restricted:
+    def test_no_security_groups(self):
+        network_client = mock.MagicMock
+        network_client.security_groups = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ):
+            from prowler.providers.azure.services.network.network_ssh_internet_access_restricted.network_ssh_internet_access_restricted import (
+                network_ssh_internet_access_restricted,
+            )
+
+            check = network_ssh_internet_access_restricted()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_network_security_groups_no_security_rules(self):
+        network_client = mock.MagicMock
+        security_group_name = "Security Group Name"
+        security_group_id = str(uuid4())
+
+        network_client.security_groups = {
+            AZURE_SUBSCRIPTION: [
+                SecurityGroup(
+                    id=security_group_id,
+                    name=security_group_name,
+                    location="location",
+                    security_rules=[],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ):
+            from prowler.providers.azure.services.network.network_ssh_internet_access_restricted.network_ssh_internet_access_restricted import (
+                network_ssh_internet_access_restricted,
+            )
+
+            check = network_ssh_internet_access_restricted()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Security Group {security_group_name} from subscription {AZURE_SUBSCRIPTION} has SSH internet access restricted."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == security_group_name
+            assert result[0].resource_id == security_group_id
+
+    def test_network_security_groups_invalid_security_rules(self):
+        network_client = mock.MagicMock
+        security_group_name = "Security Group Name"
+        security_group_id = str(uuid4())
+
+        network_client.security_groups = {
+            AZURE_SUBSCRIPTION: [
+                SecurityGroup(
+                    id=security_group_id,
+                    name=security_group_name,
+                    location="location",
+                    security_rules=[
+                        SecurityRule(
+                            destination_port_range="22",
+                            protocol="TCP",
+                            source_address_prefix="Internet",
+                            access="Allow",
+                            direction="Inbound",
+                        )
+                    ],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ):
+            from prowler.providers.azure.services.network.network_ssh_internet_access_restricted.network_ssh_internet_access_restricted import (
+                network_ssh_internet_access_restricted,
+            )
+
+            check = network_ssh_internet_access_restricted()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Security Group {security_group_name} from subscription {AZURE_SUBSCRIPTION} has SSH internet access allowed."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == security_group_name
+            assert result[0].resource_id == security_group_id
+
+    def test_network_security_groups_invalid_security_rules_range(self):
+        network_client = mock.MagicMock
+        security_group_name = "Security Group Name"
+        security_group_id = str(uuid4())
+
+        network_client.security_groups = {
+            AZURE_SUBSCRIPTION: [
+                SecurityGroup(
+                    id=security_group_id,
+                    name=security_group_name,
+                    location="location",
+                    security_rules=[
+                        SecurityRule(
+                            destination_port_range="20-25",
+                            protocol="TCP",
+                            source_address_prefix="Internet",
+                            access="Allow",
+                            direction="Inbound",
+                        )
+                    ],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ):
+            from prowler.providers.azure.services.network.network_ssh_internet_access_restricted.network_ssh_internet_access_restricted import (
+                network_ssh_internet_access_restricted,
+            )
+
+            check = network_ssh_internet_access_restricted()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Security Group {security_group_name} from subscription {AZURE_SUBSCRIPTION} has SSH internet access allowed."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == security_group_name
+            assert result[0].resource_id == security_group_id
+
+    def test_network_security_groups_valid_security_rules(self):
+        network_client = mock.MagicMock
+        security_group_name = "Security Group Name"
+        security_group_id = str(uuid4())
+
+        network_client.security_groups = {
+            AZURE_SUBSCRIPTION: [
+                SecurityGroup(
+                    id=security_group_id,
+                    name=security_group_name,
+                    location="location",
+                    security_rules=[
+                        SecurityRule(
+                            destination_port_range="23",
+                            protocol="TCP",
+                            source_address_prefix="Internet",
+                            access="Allow",
+                            direction="Inbound",
+                        )
+                    ],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ):
+            from prowler.providers.azure.services.network.network_ssh_internet_access_restricted.network_ssh_internet_access_restricted import (
+                network_ssh_internet_access_restricted,
+            )
+
+            check = network_ssh_internet_access_restricted()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Security Group {security_group_name} from subscription {AZURE_SUBSCRIPTION} has SSH internet access restricted."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == security_group_name
+            assert result[0].resource_id == security_group_id
diff --git a/tests/providers/azure/services/network/network_udp_internet_access_restricted/network_udp_internet_access_restricted_test.py b/tests/providers/azure/services/network/network_udp_internet_access_restricted/network_udp_internet_access_restricted_test.py
new file mode 100644
index 00000000000..f94001100b7
--- /dev/null
+++ b/tests/providers/azure/services/network/network_udp_internet_access_restricted/network_udp_internet_access_restricted_test.py
@@ -0,0 +1,159 @@
+from unittest import mock
+from uuid import uuid4
+
+from azure.mgmt.network.models._models import SecurityRule
+
+from prowler.providers.azure.services.network.network_service import SecurityGroup
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_network_udp_internet_access_restricted:
+    def test_no_security_groups(self):
+        network_client = mock.MagicMock
+        network_client.security_groups = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ):
+            from prowler.providers.azure.services.network.network_udp_internet_access_restricted.network_udp_internet_access_restricted import (
+                network_udp_internet_access_restricted,
+            )
+
+            check = network_udp_internet_access_restricted()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_network_security_groups_no_security_rules(self):
+        network_client = mock.MagicMock
+        security_group_name = "Security Group Name"
+        security_group_id = str(uuid4())
+
+        network_client.security_groups = {
+            AZURE_SUBSCRIPTION: [
+                SecurityGroup(
+                    id=security_group_id,
+                    name=security_group_name,
+                    location="location",
+                    security_rules=[],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ):
+            from prowler.providers.azure.services.network.network_udp_internet_access_restricted.network_udp_internet_access_restricted import (
+                network_udp_internet_access_restricted,
+            )
+
+            check = network_udp_internet_access_restricted()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Security Group {security_group_name} from subscription {AZURE_SUBSCRIPTION} has UDP internet access restricted."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == security_group_name
+            assert result[0].resource_id == security_group_id
+
+    def test_network_security_groups_invalid_security_rules(self):
+        network_client = mock.MagicMock
+        security_group_name = "Security Group Name"
+        security_group_id = str(uuid4())
+
+        network_client.security_groups = {
+            AZURE_SUBSCRIPTION: [
+                SecurityGroup(
+                    id=security_group_id,
+                    name=security_group_name,
+                    location="location",
+                    security_rules=[
+                        SecurityRule(
+                            protocol="UDP",
+                            source_address_prefix="Internet",
+                            access="Allow",
+                            direction="Inbound",
+                        )
+                    ],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ):
+            from prowler.providers.azure.services.network.network_udp_internet_access_restricted.network_udp_internet_access_restricted import (
+                network_udp_internet_access_restricted,
+            )
+
+            check = network_udp_internet_access_restricted()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Security Group {security_group_name} from subscription {AZURE_SUBSCRIPTION} has UDP internet access allowed."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == security_group_name
+            assert result[0].resource_id == security_group_id
+
+    def test_network_security_groups_valid_security_rules(self):
+        network_client = mock.MagicMock
+        security_group_name = "Security Group Name"
+        security_group_id = str(uuid4())
+
+        network_client.security_groups = {
+            AZURE_SUBSCRIPTION: [
+                SecurityGroup(
+                    id=security_group_id,
+                    name=security_group_name,
+                    location="location",
+                    security_rules=[
+                        SecurityRule(
+                            protocol="TCP",
+                            source_address_prefix="Internet",
+                            access="Allow",
+                            direction="Inbound",
+                        )
+                    ],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ):
+            from prowler.providers.azure.services.network.network_udp_internet_access_restricted.network_udp_internet_access_restricted import (
+                network_udp_internet_access_restricted,
+            )
+
+            check = network_udp_internet_access_restricted()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Security Group {security_group_name} from subscription {AZURE_SUBSCRIPTION} has UDP internet access restricted."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == security_group_name
+            assert result[0].resource_id == security_group_id
diff --git a/tests/providers/azure/services/network/network_watcher_enabled/network_watcher_enabled_test.py b/tests/providers/azure/services/network/network_watcher_enabled/network_watcher_enabled_test.py
new file mode 100644
index 00000000000..d4bef4046a5
--- /dev/null
+++ b/tests/providers/azure/services/network/network_watcher_enabled/network_watcher_enabled_test.py
@@ -0,0 +1,110 @@
+from unittest import mock
+
+from prowler.providers.azure.services.network.network_service import NetworkWatcher
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_network_watcher_enabled:
+    def test_no_network_watchers(self):
+        network_client = mock.MagicMock
+        locations = []
+        network_client.locations = {AZURE_SUBSCRIPTION: locations}
+        network_client.security_groups = {}
+        network_client.network_watchers = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ):
+            from prowler.providers.azure.services.network.network_watcher_enabled.network_watcher_enabled import (
+                network_watcher_enabled,
+            )
+
+            check = network_watcher_enabled()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_network_invalid_network_watchers(self):
+        network_client = mock.MagicMock
+        locations = ["location"]
+        network_client.locations = {AZURE_SUBSCRIPTION: locations}
+        network_watcher_name = "Network Watcher"
+        network_watcher_id = f"/subscriptions/{AZURE_SUBSCRIPTION}/providers/Microsoft.Network/networkWatchers/{locations[0]}"
+
+        network_client.network_watchers = {
+            AZURE_SUBSCRIPTION: [
+                NetworkWatcher(
+                    id=network_watcher_id,
+                    name=network_watcher_name,
+                    location=None,
+                    flow_logs=[],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ):
+            from prowler.providers.azure.services.network.network_watcher_enabled.network_watcher_enabled import (
+                network_watcher_enabled,
+            )
+
+            check = network_watcher_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Network Watcher is not enabled for the location {locations[0]} in subscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == network_watcher_name
+            assert result[0].resource_id == network_watcher_id
+
+    def test_network_valid_network_watchers(self):
+        network_client = mock.MagicMock
+        locations = ["location"]
+        network_client.locations = {AZURE_SUBSCRIPTION: locations}
+        network_watcher_name = "Network Watcher"
+        network_watcher_id = f"/subscriptions/{AZURE_SUBSCRIPTION}/providers/Microsoft.Network/networkWatchers/{locations[0]}"
+
+        network_client.network_watchers = {
+            AZURE_SUBSCRIPTION: [
+                NetworkWatcher(
+                    id=network_watcher_id,
+                    name=network_watcher_name,
+                    location="location",
+                    flow_logs=[],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.network.network_service.Network",
+            new=network_client,
+        ) as service_client, mock.patch(
+            "prowler.providers.azure.services.network.network_client.network_client",
+            new=service_client,
+        ):
+            from prowler.providers.azure.services.network.network_watcher_enabled.network_watcher_enabled import (
+                network_watcher_enabled,
+            )
+
+            check = network_watcher_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Network Watcher is enabled for the location {locations[0]} in subscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == network_watcher_name
+            assert result[0].resource_id == network_watcher_id
diff --git a/tests/providers/azure/services/policy/policy_ensure_asc_enforcement_enabled/policy_ensure_asc_enforcement_enabled_test.py b/tests/providers/azure/services/policy/policy_ensure_asc_enforcement_enabled/policy_ensure_asc_enforcement_enabled_test.py
new file mode 100644
index 00000000000..398ff8b4992
--- /dev/null
+++ b/tests/providers/azure/services/policy/policy_ensure_asc_enforcement_enabled/policy_ensure_asc_enforcement_enabled_test.py
@@ -0,0 +1,122 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.policy.policy_service import PolicyAssigment
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_policy_ensure_asc_enforcement_enabled:
+    def test_policy_no_subscriptions(self):
+        policy_client = mock.MagicMock
+        policy_client.policy_assigments = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.policy.policy_ensure_asc_enforcement_enabled.policy_ensure_asc_enforcement_enabled.policy_client",
+            new=policy_client,
+        ):
+            from prowler.providers.azure.services.policy.policy_ensure_asc_enforcement_enabled.policy_ensure_asc_enforcement_enabled import (
+                policy_ensure_asc_enforcement_enabled,
+            )
+
+            check = policy_ensure_asc_enforcement_enabled()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_policy_subscription_empty(self):
+        policy_client = mock.MagicMock
+        policy_client.policy_assigments = {AZURE_SUBSCRIPTION: {}}
+
+        with mock.patch(
+            "prowler.providers.azure.services.policy.policy_ensure_asc_enforcement_enabled.policy_ensure_asc_enforcement_enabled.policy_client",
+            new=policy_client,
+        ):
+            from prowler.providers.azure.services.policy.policy_ensure_asc_enforcement_enabled.policy_ensure_asc_enforcement_enabled import (
+                policy_ensure_asc_enforcement_enabled,
+            )
+
+            check = policy_ensure_asc_enforcement_enabled()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_policy_subscription_no_asc(self):
+        policy_client = mock.MagicMock
+        resource_id = uuid4()
+        policy_client.policy_assigments = {
+            AZURE_SUBSCRIPTION: {
+                "policy-1": PolicyAssigment(id=resource_id, enforcement_mode="Default")
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.policy.policy_ensure_asc_enforcement_enabled.policy_ensure_asc_enforcement_enabled.policy_client",
+            new=policy_client,
+        ):
+            from prowler.providers.azure.services.policy.policy_ensure_asc_enforcement_enabled.policy_ensure_asc_enforcement_enabled import (
+                policy_ensure_asc_enforcement_enabled,
+            )
+
+            check = policy_ensure_asc_enforcement_enabled()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_policy_subscription_asc_default(self):
+        policy_client = mock.MagicMock
+        resource_id = uuid4()
+        policy_client.policy_assigments = {
+            AZURE_SUBSCRIPTION: {
+                "SecurityCenterBuiltIn": PolicyAssigment(
+                    id=resource_id, enforcement_mode="Default"
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.policy.policy_ensure_asc_enforcement_enabled.policy_ensure_asc_enforcement_enabled.policy_client",
+            new=policy_client,
+        ):
+            from prowler.providers.azure.services.policy.policy_ensure_asc_enforcement_enabled.policy_ensure_asc_enforcement_enabled import (
+                policy_ensure_asc_enforcement_enabled,
+            )
+
+            check = policy_ensure_asc_enforcement_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Policy assigment '{resource_id}' is configured with enforcement mode 'Default'."
+            )
+            assert result[0].resource_id == resource_id
+            assert result[0].resource_name == "SecurityCenterBuiltIn"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+
+    def test_policy_subscription_asc_not_default(self):
+        policy_client = mock.MagicMock
+        resource_id = uuid4()
+        policy_client.policy_assigments = {
+            AZURE_SUBSCRIPTION: {
+                "SecurityCenterBuiltIn": PolicyAssigment(
+                    id=resource_id, enforcement_mode="DoNotEnforce"
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.policy.policy_ensure_asc_enforcement_enabled.policy_ensure_asc_enforcement_enabled.policy_client",
+            new=policy_client,
+        ):
+            from prowler.providers.azure.services.policy.policy_ensure_asc_enforcement_enabled.policy_ensure_asc_enforcement_enabled import (
+                policy_ensure_asc_enforcement_enabled,
+            )
+
+            check = policy_ensure_asc_enforcement_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Policy assigment '{resource_id}' is not configured with enforcement mode Default."
+            )
+            assert result[0].resource_id == resource_id
+            assert result[0].resource_name == "SecurityCenterBuiltIn"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
diff --git a/tests/providers/azure/services/policy/policy_service_test.py b/tests/providers/azure/services/policy/policy_service_test.py
new file mode 100644
index 00000000000..35266af4663
--- /dev/null
+++ b/tests/providers/azure/services/policy/policy_service_test.py
@@ -0,0 +1,46 @@
+from unittest.mock import patch
+
+from prowler.providers.azure.services.policy.policy_service import (
+    Policy,
+    PolicyAssigment,
+)
+from tests.providers.azure.azure_fixtures import (
+    AZURE_SUBSCRIPTION,
+    set_mocked_azure_audit_info,
+)
+
+
+def mock_policy_assigments(_):
+    return {
+        AZURE_SUBSCRIPTION: {
+            "policy-1": PolicyAssigment(id="id-1", enforcement_mode="Default")
+        }
+    }
+
+
+@patch(
+    "prowler.providers.azure.services.policy.policy_service.Policy.__get_policy_assigments__",
+    new=mock_policy_assigments,
+)
+class Test_AppInsights_Service:
+    def test__get_client__(self):
+        policy = Policy(set_mocked_azure_audit_info())
+        assert policy.clients[AZURE_SUBSCRIPTION].__class__.__name__ == "PolicyClient"
+
+    def test__get_subscriptions__(self):
+        policy = Policy(set_mocked_azure_audit_info())
+        assert policy.subscriptions.__class__.__name__ == "dict"
+
+    def test__get_policy_assigments__(self):
+        policy = Policy(set_mocked_azure_audit_info())
+        assert policy.policy_assigments.__class__.__name__ == "dict"
+        assert policy.policy_assigments[AZURE_SUBSCRIPTION].__class__.__name__ == "dict"
+        assert (
+            policy.policy_assigments[AZURE_SUBSCRIPTION]["policy-1"].__class__.__name__
+            == "PolicyAssigment"
+        )
+        assert policy.policy_assigments[AZURE_SUBSCRIPTION]["policy-1"].id == "id-1"
+        assert (
+            policy.policy_assigments[AZURE_SUBSCRIPTION]["policy-1"].enforcement_mode
+            == "Default"
+        )
diff --git a/tests/providers/azure/services/postgresql/postgresql_flexible_server_allow_access_services_disabled/postgresql_flexible_server_allow_access_services_disabled_test.py b/tests/providers/azure/services/postgresql/postgresql_flexible_server_allow_access_services_disabled/postgresql_flexible_server_allow_access_services_disabled_test.py
new file mode 100644
index 00000000000..87ca80a6ffe
--- /dev/null
+++ b/tests/providers/azure/services/postgresql/postgresql_flexible_server_allow_access_services_disabled/postgresql_flexible_server_allow_access_services_disabled_test.py
@@ -0,0 +1,120 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.postgresql.postgresql_service import (
+    Firewall,
+    Server,
+)
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_postgresql_flexible_server_allow_access_services_disabled:
+    def test_no_postgresql_flexible_servers(self):
+        postgresql_client = mock.MagicMock
+        postgresql_client.flexible_servers = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.postgresql.postgresql_flexible_server_allow_access_services_disabled.postgresql_flexible_server_allow_access_services_disabled.postgresql_client",
+            new=postgresql_client,
+        ):
+            from prowler.providers.azure.services.postgresql.postgresql_flexible_server_allow_access_services_disabled.postgresql_flexible_server_allow_access_services_disabled import (
+                postgresql_flexible_server_allow_access_services_disabled,
+            )
+
+            check = postgresql_flexible_server_allow_access_services_disabled()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_flexible_servers_allow_public_access(self):
+        postgresql_client = mock.MagicMock
+        postgresql_server_name = "Postgres Flexible Server Name"
+        postgresql_server_id = str(uuid4())
+        firewall = Firewall(
+            id=str(uuid4()),
+            name="firewall_name",
+            start_ip="0.0.0.0",
+            end_ip="0.0.0.0",
+        )
+        postgresql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=postgresql_server_id,
+                    name=postgresql_server_name,
+                    resource_group="resource_group",
+                    require_secure_transport="OFF",
+                    log_checkpoints="OFF",
+                    log_connections="OFF",
+                    log_disconnections="OFF",
+                    connection_throttling="OFF",
+                    log_retention_days="3",
+                    firewall=[firewall],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.postgresql.postgresql_flexible_server_allow_access_services_disabled.postgresql_flexible_server_allow_access_services_disabled.postgresql_client",
+            new=postgresql_client,
+        ):
+            from prowler.providers.azure.services.postgresql.postgresql_flexible_server_allow_access_services_disabled.postgresql_flexible_server_allow_access_services_disabled import (
+                postgresql_flexible_server_allow_access_services_disabled,
+            )
+
+            check = postgresql_flexible_server_allow_access_services_disabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Flexible Postgresql server {postgresql_server_name} from subscription {AZURE_SUBSCRIPTION} has allow public access from any Azure service enabled"
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == postgresql_server_name
+            assert result[0].resource_id == postgresql_server_id
+
+    def test_flexible_servers_dont_allow_public_access(self):
+        postgresql_client = mock.MagicMock
+        postgresql_server_name = "Postgres Flexible Server Name"
+        postgresql_server_id = str(uuid4())
+        firewall = Firewall(
+            id=str(uuid4()),
+            name="firewall_name",
+            start_ip="1.1.1.1",
+            end_ip="1.1.1.1",
+        )
+        postgresql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=postgresql_server_id,
+                    name=postgresql_server_name,
+                    resource_group="resource_group",
+                    require_secure_transport="OFF",
+                    log_checkpoints="OFF",
+                    log_connections="OFF",
+                    log_disconnections="OFF",
+                    connection_throttling="OFF",
+                    log_retention_days="3",
+                    firewall=[firewall],
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.postgresql.postgresql_flexible_server_allow_access_services_disabled.postgresql_flexible_server_allow_access_services_disabled.postgresql_client",
+            new=postgresql_client,
+        ):
+            from prowler.providers.azure.services.postgresql.postgresql_flexible_server_allow_access_services_disabled.postgresql_flexible_server_allow_access_services_disabled import (
+                postgresql_flexible_server_allow_access_services_disabled,
+            )
+
+            check = postgresql_flexible_server_allow_access_services_disabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Flexible Postgresql server {postgresql_server_name} from subscription {AZURE_SUBSCRIPTION} has allow public access from any Azure service disabled"
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == postgresql_server_name
+            assert result[0].resource_id == postgresql_server_id
diff --git a/tests/providers/azure/services/postgresql/postgresql_flexible_server_connection_throttling_on/postgresql_flexible_server_connection_throttling_on_test.py b/tests/providers/azure/services/postgresql/postgresql_flexible_server_connection_throttling_on/postgresql_flexible_server_connection_throttling_on_test.py
new file mode 100644
index 00000000000..59efcbf52a3
--- /dev/null
+++ b/tests/providers/azure/services/postgresql/postgresql_flexible_server_connection_throttling_on/postgresql_flexible_server_connection_throttling_on_test.py
@@ -0,0 +1,105 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.postgresql.postgresql_service import Server
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_postgresql_flexible_server_connection_throttling_on:
+    def test_no_postgresql_flexible_servers(self):
+        postgresql_client = mock.MagicMock
+        postgresql_client.flexible_servers = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.postgresql.postgresql_flexible_server_connection_throttling_on.postgresql_flexible_server_connection_throttling_on.postgresql_client",
+            new=postgresql_client,
+        ):
+            from prowler.providers.azure.services.postgresql.postgresql_flexible_server_connection_throttling_on.postgresql_flexible_server_connection_throttling_on import (
+                postgresql_flexible_server_connection_throttling_on,
+            )
+
+            check = postgresql_flexible_server_connection_throttling_on()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_flexible_servers_connection_throttling_off(self):
+        postgresql_client = mock.MagicMock
+        postgresql_server_name = "Postgres Flexible Server Name"
+        postgresql_server_id = str(uuid4())
+        postgresql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=postgresql_server_id,
+                    name=postgresql_server_name,
+                    resource_group="resource_group",
+                    require_secure_transport="OFF",
+                    log_checkpoints="OFF",
+                    log_connections="OFF",
+                    log_disconnections="OFF",
+                    connection_throttling="OFF",
+                    log_retention_days="3",
+                    firewall=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.postgresql.postgresql_flexible_server_connection_throttling_on.postgresql_flexible_server_connection_throttling_on.postgresql_client",
+            new=postgresql_client,
+        ):
+            from prowler.providers.azure.services.postgresql.postgresql_flexible_server_connection_throttling_on.postgresql_flexible_server_connection_throttling_on import (
+                postgresql_flexible_server_connection_throttling_on,
+            )
+
+            check = postgresql_flexible_server_connection_throttling_on()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Flexible Postgresql server {postgresql_server_name} from subscription {AZURE_SUBSCRIPTION} has connection_throttling disabled"
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == postgresql_server_name
+            assert result[0].resource_id == postgresql_server_id
+
+    def test_flexible_servers_connection_throttling_on(self):
+        postgresql_client = mock.MagicMock
+        postgresql_server_name = "Postgres Flexible Server Name"
+        postgresql_server_id = str(uuid4())
+        postgresql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=postgresql_server_id,
+                    name=postgresql_server_name,
+                    resource_group="resource_group",
+                    require_secure_transport="OFF",
+                    log_checkpoints="ON",
+                    log_connections="ON",
+                    log_disconnections="ON",
+                    connection_throttling="ON",
+                    log_retention_days="3",
+                    firewall=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.postgresql.postgresql_flexible_server_connection_throttling_on.postgresql_flexible_server_connection_throttling_on.postgresql_client",
+            new=postgresql_client,
+        ):
+            from prowler.providers.azure.services.postgresql.postgresql_flexible_server_connection_throttling_on.postgresql_flexible_server_connection_throttling_on import (
+                postgresql_flexible_server_connection_throttling_on,
+            )
+
+            check = postgresql_flexible_server_connection_throttling_on()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Flexible Postgresql server {postgresql_server_name} from subscription {AZURE_SUBSCRIPTION} has connection_throttling enabled"
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == postgresql_server_name
+            assert result[0].resource_id == postgresql_server_id
diff --git a/tests/providers/azure/services/postgresql/postgresql_flexible_server_enforce_ssl_enabled/postgresql_flexible_server_enforce_ssl_enabled_test.py b/tests/providers/azure/services/postgresql/postgresql_flexible_server_enforce_ssl_enabled/postgresql_flexible_server_enforce_ssl_enabled_test.py
new file mode 100644
index 00000000000..0544c412db1
--- /dev/null
+++ b/tests/providers/azure/services/postgresql/postgresql_flexible_server_enforce_ssl_enabled/postgresql_flexible_server_enforce_ssl_enabled_test.py
@@ -0,0 +1,105 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.postgresql.postgresql_service import Server
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_postgresql_flexible_server_enforce_ssl_enabled:
+    def test_no_postgresql_flexible_servers(self):
+        postgresql_client = mock.MagicMock
+        postgresql_client.flexible_servers = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.postgresql.postgresql_flexible_server_enforce_ssl_enabled.postgresql_flexible_server_enforce_ssl_enabled.postgresql_client",
+            new=postgresql_client,
+        ):
+            from prowler.providers.azure.services.postgresql.postgresql_flexible_server_enforce_ssl_enabled.postgresql_flexible_server_enforce_ssl_enabled import (
+                postgresql_flexible_server_enforce_ssl_enabled,
+            )
+
+            check = postgresql_flexible_server_enforce_ssl_enabled()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_flexible_servers_require_secure_transport_off(self):
+        postgresql_client = mock.MagicMock
+        postgresql_server_name = "Postgres Flexible Server Name"
+        postgresql_server_id = str(uuid4())
+        postgresql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=postgresql_server_id,
+                    name=postgresql_server_name,
+                    resource_group="resource_group",
+                    require_secure_transport="OFF",
+                    log_checkpoints="ON",
+                    log_connections="ON",
+                    log_disconnections="ON",
+                    connection_throttling="ON",
+                    log_retention_days="3",
+                    firewall=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.postgresql.postgresql_flexible_server_enforce_ssl_enabled.postgresql_flexible_server_enforce_ssl_enabled.postgresql_client",
+            new=postgresql_client,
+        ):
+            from prowler.providers.azure.services.postgresql.postgresql_flexible_server_enforce_ssl_enabled.postgresql_flexible_server_enforce_ssl_enabled import (
+                postgresql_flexible_server_enforce_ssl_enabled,
+            )
+
+            check = postgresql_flexible_server_enforce_ssl_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Flexible Postgresql server {postgresql_server_name} from subscription {AZURE_SUBSCRIPTION} has enforce ssl disabled"
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == postgresql_server_name
+            assert result[0].resource_id == postgresql_server_id
+
+    def test_flexible_servers_require_secure_transport_on(self):
+        postgresql_client = mock.MagicMock
+        postgresql_server_name = "Postgres Flexible Server Name"
+        postgresql_server_id = str(uuid4())
+        postgresql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=postgresql_server_id,
+                    name=postgresql_server_name,
+                    resource_group="resource_group",
+                    require_secure_transport="ON",
+                    log_checkpoints="ON",
+                    log_connections="ON",
+                    log_disconnections="ON",
+                    connection_throttling="ON",
+                    log_retention_days="3",
+                    firewall=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.postgresql.postgresql_flexible_server_enforce_ssl_enabled.postgresql_flexible_server_enforce_ssl_enabled.postgresql_client",
+            new=postgresql_client,
+        ):
+            from prowler.providers.azure.services.postgresql.postgresql_flexible_server_enforce_ssl_enabled.postgresql_flexible_server_enforce_ssl_enabled import (
+                postgresql_flexible_server_enforce_ssl_enabled,
+            )
+
+            check = postgresql_flexible_server_enforce_ssl_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Flexible Postgresql server {postgresql_server_name} from subscription {AZURE_SUBSCRIPTION} has enforce ssl enabled"
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == postgresql_server_name
+            assert result[0].resource_id == postgresql_server_id
diff --git a/tests/providers/azure/services/postgresql/postgresql_flexible_server_log_checkpoints_on/postgresql_flexible_server_log_checkpoints_on_test.py b/tests/providers/azure/services/postgresql/postgresql_flexible_server_log_checkpoints_on/postgresql_flexible_server_log_checkpoints_on_test.py
new file mode 100644
index 00000000000..2d2960cb1c7
--- /dev/null
+++ b/tests/providers/azure/services/postgresql/postgresql_flexible_server_log_checkpoints_on/postgresql_flexible_server_log_checkpoints_on_test.py
@@ -0,0 +1,105 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.postgresql.postgresql_service import Server
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_postgresql_flexible_server_log_checkpoints_on:
+    def test_no_postgresql_flexible_servers(self):
+        postgresql_client = mock.MagicMock
+        postgresql_client.flexible_servers = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.postgresql.postgresql_flexible_server_log_checkpoints_on.postgresql_flexible_server_log_checkpoints_on.postgresql_client",
+            new=postgresql_client,
+        ):
+            from prowler.providers.azure.services.postgresql.postgresql_flexible_server_log_checkpoints_on.postgresql_flexible_server_log_checkpoints_on import (
+                postgresql_flexible_server_log_checkpoints_on,
+            )
+
+            check = postgresql_flexible_server_log_checkpoints_on()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_flexible_servers_log_checkpoints_off(self):
+        postgresql_client = mock.MagicMock
+        postgresql_server_name = "Postgres Flexible Server Name"
+        postgresql_server_id = str(uuid4())
+        postgresql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=postgresql_server_id,
+                    name=postgresql_server_name,
+                    resource_group="resource_group",
+                    require_secure_transport="ON",
+                    log_checkpoints="OFF",
+                    log_connections="ON",
+                    log_disconnections="ON",
+                    connection_throttling="ON",
+                    log_retention_days="3",
+                    firewall=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.postgresql.postgresql_flexible_server_log_checkpoints_on.postgresql_flexible_server_log_checkpoints_on.postgresql_client",
+            new=postgresql_client,
+        ):
+            from prowler.providers.azure.services.postgresql.postgresql_flexible_server_log_checkpoints_on.postgresql_flexible_server_log_checkpoints_on import (
+                postgresql_flexible_server_log_checkpoints_on,
+            )
+
+            check = postgresql_flexible_server_log_checkpoints_on()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Flexible Postgresql server {postgresql_server_name} from subscription {AZURE_SUBSCRIPTION} has log_checkpoints disabled"
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == postgresql_server_name
+            assert result[0].resource_id == postgresql_server_id
+
+    def test_flexible_servers_log_checkpoints_on(self):
+        postgresql_client = mock.MagicMock
+        postgresql_server_name = "Postgres Flexible Server Name"
+        postgresql_server_id = str(uuid4())
+        postgresql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=postgresql_server_id,
+                    name=postgresql_server_name,
+                    resource_group="resource_group",
+                    require_secure_transport="ON",
+                    log_checkpoints="ON",
+                    log_connections="ON",
+                    log_disconnections="ON",
+                    connection_throttling="ON",
+                    log_retention_days="3",
+                    firewall=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.postgresql.postgresql_flexible_server_log_checkpoints_on.postgresql_flexible_server_log_checkpoints_on.postgresql_client",
+            new=postgresql_client,
+        ):
+            from prowler.providers.azure.services.postgresql.postgresql_flexible_server_log_checkpoints_on.postgresql_flexible_server_log_checkpoints_on import (
+                postgresql_flexible_server_log_checkpoints_on,
+            )
+
+            check = postgresql_flexible_server_log_checkpoints_on()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Flexible Postgresql server {postgresql_server_name} from subscription {AZURE_SUBSCRIPTION} has log_checkpoints enabled"
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == postgresql_server_name
+            assert result[0].resource_id == postgresql_server_id
diff --git a/tests/providers/azure/services/postgresql/postgresql_flexible_server_log_connections_on/postgresql_flexible_server_log_connections_on_test.py b/tests/providers/azure/services/postgresql/postgresql_flexible_server_log_connections_on/postgresql_flexible_server_log_connections_on_test.py
new file mode 100644
index 00000000000..98e7724b3c3
--- /dev/null
+++ b/tests/providers/azure/services/postgresql/postgresql_flexible_server_log_connections_on/postgresql_flexible_server_log_connections_on_test.py
@@ -0,0 +1,105 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.postgresql.postgresql_service import Server
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_postgresql_flexible_server_log_connections_on:
+    def test_no_postgresql_flexible_servers(self):
+        postgresql_client = mock.MagicMock
+        postgresql_client.flexible_servers = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.postgresql.postgresql_flexible_server_log_connections_on.postgresql_flexible_server_log_connections_on.postgresql_client",
+            new=postgresql_client,
+        ):
+            from prowler.providers.azure.services.postgresql.postgresql_flexible_server_log_connections_on.postgresql_flexible_server_log_connections_on import (
+                postgresql_flexible_server_log_connections_on,
+            )
+
+            check = postgresql_flexible_server_log_connections_on()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_flexible_servers_log_connections_off(self):
+        postgresql_client = mock.MagicMock
+        postgresql_server_name = "Postgres Flexible Server Name"
+        postgresql_server_id = str(uuid4())
+        postgresql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=postgresql_server_id,
+                    name=postgresql_server_name,
+                    resource_group="resource_group",
+                    require_secure_transport="OFF",
+                    log_checkpoints="OFF",
+                    log_connections="OFF",
+                    log_disconnections="OFF",
+                    connection_throttling="ON",
+                    log_retention_days="3",
+                    firewall=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.postgresql.postgresql_flexible_server_log_connections_on.postgresql_flexible_server_log_connections_on.postgresql_client",
+            new=postgresql_client,
+        ):
+            from prowler.providers.azure.services.postgresql.postgresql_flexible_server_log_connections_on.postgresql_flexible_server_log_connections_on import (
+                postgresql_flexible_server_log_connections_on,
+            )
+
+            check = postgresql_flexible_server_log_connections_on()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Flexible Postgresql server {postgresql_server_name} from subscription {AZURE_SUBSCRIPTION} has log_connections disabled"
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == postgresql_server_name
+            assert result[0].resource_id == postgresql_server_id
+
+    def test_flexible_servers_log_connections_on(self):
+        postgresql_client = mock.MagicMock
+        postgresql_server_name = "Postgres Flexible Server Name"
+        postgresql_server_id = str(uuid4())
+        postgresql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=postgresql_server_id,
+                    name=postgresql_server_name,
+                    resource_group="resource_group",
+                    require_secure_transport="OFF",
+                    log_checkpoints="ON",
+                    log_connections="ON",
+                    log_disconnections="ON",
+                    connection_throttling="ON",
+                    log_retention_days="3",
+                    firewall=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.postgresql.postgresql_flexible_server_log_connections_on.postgresql_flexible_server_log_connections_on.postgresql_client",
+            new=postgresql_client,
+        ):
+            from prowler.providers.azure.services.postgresql.postgresql_flexible_server_log_connections_on.postgresql_flexible_server_log_connections_on import (
+                postgresql_flexible_server_log_connections_on,
+            )
+
+            check = postgresql_flexible_server_log_connections_on()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Flexible Postgresql server {postgresql_server_name} from subscription {AZURE_SUBSCRIPTION} has log_connections enabled"
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == postgresql_server_name
+            assert result[0].resource_id == postgresql_server_id
diff --git a/tests/providers/azure/services/postgresql/postgresql_flexible_server_log_disconnections_on/postgresql_flexible_server_log_disconnections_on_test.py b/tests/providers/azure/services/postgresql/postgresql_flexible_server_log_disconnections_on/postgresql_flexible_server_log_disconnections_on_test.py
new file mode 100644
index 00000000000..fff5d27b081
--- /dev/null
+++ b/tests/providers/azure/services/postgresql/postgresql_flexible_server_log_disconnections_on/postgresql_flexible_server_log_disconnections_on_test.py
@@ -0,0 +1,105 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.postgresql.postgresql_service import Server
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_postgresql_flexible_server_log_disconnections_on:
+    def test_no_postgresql_flexible_servers(self):
+        postgresql_client = mock.MagicMock
+        postgresql_client.flexible_servers = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.postgresql.postgresql_flexible_server_log_disconnections_on.postgresql_flexible_server_log_disconnections_on.postgresql_client",
+            new=postgresql_client,
+        ):
+            from prowler.providers.azure.services.postgresql.postgresql_flexible_server_log_disconnections_on.postgresql_flexible_server_log_disconnections_on import (
+                postgresql_flexible_server_log_disconnections_on,
+            )
+
+            check = postgresql_flexible_server_log_disconnections_on()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_flexible_servers_log_connections_off(self):
+        postgresql_client = mock.MagicMock
+        postgresql_server_name = "Postgres Flexible Server Name"
+        postgresql_server_id = str(uuid4())
+        postgresql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=postgresql_server_id,
+                    name=postgresql_server_name,
+                    resource_group="resource_group",
+                    require_secure_transport="OFF",
+                    log_checkpoints="OFF",
+                    log_connections="OFF",
+                    log_disconnections="OFF",
+                    connection_throttling="OFF",
+                    log_retention_days="3",
+                    firewall=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.postgresql.postgresql_flexible_server_log_disconnections_on.postgresql_flexible_server_log_disconnections_on.postgresql_client",
+            new=postgresql_client,
+        ):
+            from prowler.providers.azure.services.postgresql.postgresql_flexible_server_log_disconnections_on.postgresql_flexible_server_log_disconnections_on import (
+                postgresql_flexible_server_log_disconnections_on,
+            )
+
+            check = postgresql_flexible_server_log_disconnections_on()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Flexible Postgresql server {postgresql_server_name} from subscription {AZURE_SUBSCRIPTION} has log_disconnections disabled"
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == postgresql_server_name
+            assert result[0].resource_id == postgresql_server_id
+
+    def test_flexible_servers_log_connections_on(self):
+        postgresql_client = mock.MagicMock
+        postgresql_server_name = "Postgres Flexible Server Name"
+        postgresql_server_id = str(uuid4())
+        postgresql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=postgresql_server_id,
+                    name=postgresql_server_name,
+                    resource_group="resource_group",
+                    require_secure_transport="OFF",
+                    log_checkpoints="ON",
+                    log_connections="ON",
+                    log_disconnections="ON",
+                    connection_throttling="ON",
+                    log_retention_days="3",
+                    firewall=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.postgresql.postgresql_flexible_server_log_disconnections_on.postgresql_flexible_server_log_disconnections_on.postgresql_client",
+            new=postgresql_client,
+        ):
+            from prowler.providers.azure.services.postgresql.postgresql_flexible_server_log_disconnections_on.postgresql_flexible_server_log_disconnections_on import (
+                postgresql_flexible_server_log_disconnections_on,
+            )
+
+            check = postgresql_flexible_server_log_disconnections_on()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Flexible Postgresql server {postgresql_server_name} from subscription {AZURE_SUBSCRIPTION} has log_disconnections enabled"
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == postgresql_server_name
+            assert result[0].resource_id == postgresql_server_id
diff --git a/tests/providers/azure/services/postgresql/postgresql_flexible_server_log_retention_days_greater_3/postgresql_flexible_server_log_retention_days_greater_3_test.py b/tests/providers/azure/services/postgresql/postgresql_flexible_server_log_retention_days_greater_3/postgresql_flexible_server_log_retention_days_greater_3_test.py
new file mode 100644
index 00000000000..fdc476277d7
--- /dev/null
+++ b/tests/providers/azure/services/postgresql/postgresql_flexible_server_log_retention_days_greater_3/postgresql_flexible_server_log_retention_days_greater_3_test.py
@@ -0,0 +1,190 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.postgresql.postgresql_service import Server
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_postgresql_flexible_server_log_retention_days_greater_3:
+    def test_no_postgresql_flexible_servers(self):
+        postgresql_client = mock.MagicMock
+        postgresql_client.flexible_servers = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.postgresql.postgresql_flexible_server_log_retention_days_greater_3.postgresql_flexible_server_log_retention_days_greater_3.postgresql_client",
+            new=postgresql_client,
+        ):
+            from prowler.providers.azure.services.postgresql.postgresql_flexible_server_log_retention_days_greater_3.postgresql_flexible_server_log_retention_days_greater_3 import (
+                postgresql_flexible_server_log_retention_days_greater_3,
+            )
+
+            check = postgresql_flexible_server_log_retention_days_greater_3()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_flexible_servers_no_log_retention_days(self):
+        postgresql_client = mock.MagicMock
+        postgresql_server_name = "Postgres Flexible Server Name"
+        postgresql_server_id = str(uuid4())
+        postgresql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=postgresql_server_id,
+                    name=postgresql_server_name,
+                    resource_group="resource_group",
+                    require_secure_transport="OFF",
+                    log_checkpoints="OFF",
+                    log_connections="OFF",
+                    log_disconnections="OFF",
+                    connection_throttling="OFF",
+                    log_retention_days=None,
+                    firewall=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.postgresql.postgresql_flexible_server_log_retention_days_greater_3.postgresql_flexible_server_log_retention_days_greater_3.postgresql_client",
+            new=postgresql_client,
+        ):
+            from prowler.providers.azure.services.postgresql.postgresql_flexible_server_log_retention_days_greater_3.postgresql_flexible_server_log_retention_days_greater_3 import (
+                postgresql_flexible_server_log_retention_days_greater_3,
+            )
+
+            check = postgresql_flexible_server_log_retention_days_greater_3()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Flexible Postgresql server {postgresql_server_name} from subscription {AZURE_SUBSCRIPTION} has log_retention disabled"
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == postgresql_server_name
+            assert result[0].resource_id == postgresql_server_id
+
+    def test_flexible_servers_log_retention_days_3(self):
+        postgresql_client = mock.MagicMock
+        postgresql_server_name = "Postgres Flexible Server Name"
+        postgresql_server_id = str(uuid4())
+        log_retention_days = "3"
+        postgresql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=postgresql_server_id,
+                    name=postgresql_server_name,
+                    resource_group="resource_group",
+                    require_secure_transport="OFF",
+                    log_checkpoints="OFF",
+                    log_connections="OFF",
+                    log_disconnections="OFF",
+                    connection_throttling="OFF",
+                    log_retention_days=log_retention_days,
+                    firewall=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.postgresql.postgresql_flexible_server_log_retention_days_greater_3.postgresql_flexible_server_log_retention_days_greater_3.postgresql_client",
+            new=postgresql_client,
+        ):
+            from prowler.providers.azure.services.postgresql.postgresql_flexible_server_log_retention_days_greater_3.postgresql_flexible_server_log_retention_days_greater_3 import (
+                postgresql_flexible_server_log_retention_days_greater_3,
+            )
+
+            check = postgresql_flexible_server_log_retention_days_greater_3()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Flexible Postgresql server {postgresql_server_name} from subscription {AZURE_SUBSCRIPTION} has log_retention set to {log_retention_days}"
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == postgresql_server_name
+            assert result[0].resource_id == postgresql_server_id
+
+    def test_flexible_servers_log_retention_days_4(self):
+        postgresql_client = mock.MagicMock
+        postgresql_server_name = "Postgres Flexible Server Name"
+        postgresql_server_id = str(uuid4())
+        log_retention_days = "4"
+        postgresql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=postgresql_server_id,
+                    name=postgresql_server_name,
+                    resource_group="resource_group",
+                    require_secure_transport="OFF",
+                    log_checkpoints="OFF",
+                    log_connections="OFF",
+                    log_disconnections="OFF",
+                    connection_throttling="OFF",
+                    log_retention_days=log_retention_days,
+                    firewall=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.postgresql.postgresql_flexible_server_log_retention_days_greater_3.postgresql_flexible_server_log_retention_days_greater_3.postgresql_client",
+            new=postgresql_client,
+        ):
+            from prowler.providers.azure.services.postgresql.postgresql_flexible_server_log_retention_days_greater_3.postgresql_flexible_server_log_retention_days_greater_3 import (
+                postgresql_flexible_server_log_retention_days_greater_3,
+            )
+
+            check = postgresql_flexible_server_log_retention_days_greater_3()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Flexible Postgresql server {postgresql_server_name} from subscription {AZURE_SUBSCRIPTION} has log_retention set to {log_retention_days}"
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == postgresql_server_name
+            assert result[0].resource_id == postgresql_server_id
+
+    def test_flexible_servers_log_retention_days_8(self):
+        postgresql_client = mock.MagicMock
+        postgresql_server_name = "Postgres Flexible Server Name"
+        postgresql_server_id = str(uuid4())
+        log_retention_days = "8"
+        postgresql_client.flexible_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=postgresql_server_id,
+                    name=postgresql_server_name,
+                    resource_group="resource_group",
+                    require_secure_transport="OFF",
+                    log_checkpoints="OFF",
+                    log_connections="OFF",
+                    log_disconnections="OFF",
+                    connection_throttling="OFF",
+                    log_retention_days=log_retention_days,
+                    firewall=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.postgresql.postgresql_flexible_server_log_retention_days_greater_3.postgresql_flexible_server_log_retention_days_greater_3.postgresql_client",
+            new=postgresql_client,
+        ):
+            from prowler.providers.azure.services.postgresql.postgresql_flexible_server_log_retention_days_greater_3.postgresql_flexible_server_log_retention_days_greater_3 import (
+                postgresql_flexible_server_log_retention_days_greater_3,
+            )
+
+            check = postgresql_flexible_server_log_retention_days_greater_3()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Flexible Postgresql server {postgresql_server_name} from subscription {AZURE_SUBSCRIPTION} has log_retention set to {log_retention_days}"
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == postgresql_server_name
+            assert result[0].resource_id == postgresql_server_id
diff --git a/tests/providers/azure/services/postgresql/postgresql_service_test.py b/tests/providers/azure/services/postgresql/postgresql_service_test.py
new file mode 100644
index 00000000000..cdc479c6c8e
--- /dev/null
+++ b/tests/providers/azure/services/postgresql/postgresql_service_test.py
@@ -0,0 +1,122 @@
+from unittest.mock import patch
+
+from prowler.providers.azure.services.postgresql.postgresql_service import (
+    Firewall,
+    PostgreSQL,
+    Server,
+)
+from tests.providers.azure.azure_fixtures import (
+    AZURE_SUBSCRIPTION,
+    set_mocked_azure_audit_info,
+)
+
+
+def mock_sqlserver_get_postgresql_flexible_servers(_):
+    firewall = Firewall(
+        id="id",
+        name="name",
+        start_ip="start_ip",
+        end_ip="end_ip",
+    )
+    return {
+        AZURE_SUBSCRIPTION: [
+            Server(
+                id="id",
+                name="name",
+                resource_group="resource_group",
+                require_secure_transport="ON",
+                log_checkpoints="ON",
+                log_connections="ON",
+                log_disconnections="ON",
+                connection_throttling="ON",
+                log_retention_days="3",
+                firewall=[firewall],
+            )
+        ]
+    }
+
+
+@patch(
+    "prowler.providers.azure.services.postgresql.postgresql_service.PostgreSQL.__get_flexible_servers__",
+    new=mock_sqlserver_get_postgresql_flexible_servers,
+)
+class Test_SqlServer_Service:
+    def test__get_client__(self):
+        postgresql = PostgreSQL(set_mocked_azure_audit_info())
+        assert (
+            postgresql.clients[AZURE_SUBSCRIPTION].__class__.__name__
+            == "PostgreSQLManagementClient"
+        )
+
+    def test__get_sql_servers__(self):
+        postgesql = PostgreSQL(set_mocked_azure_audit_info())
+        assert (
+            postgesql.flexible_servers[AZURE_SUBSCRIPTION][0].__class__.__name__
+            == "Server"
+        )
+        assert postgesql.flexible_servers[AZURE_SUBSCRIPTION][0].id == "id"
+        assert postgesql.flexible_servers[AZURE_SUBSCRIPTION][0].name == "name"
+        assert (
+            postgesql.flexible_servers[AZURE_SUBSCRIPTION][0].resource_group
+            == "resource_group"
+        )
+
+    def test__get_resource_group__(self):
+        id = "/subscriptions/subscription/resourceGroups/resource_group/providers/Microsoft.DBforPostgreSQL/flexibleServers/server"
+        postgresql = PostgreSQL(set_mocked_azure_audit_info())
+        assert postgresql.__get_resource_group__(id) == "resource_group"
+
+    def test__get_require_secure_transport__(self):
+        postgesql = PostgreSQL(set_mocked_azure_audit_info())
+        assert (
+            postgesql.flexible_servers[AZURE_SUBSCRIPTION][0].require_secure_transport
+            == "ON"
+        )
+
+    def test__get_log_checkpoints__(self):
+        postgesql = PostgreSQL(set_mocked_azure_audit_info())
+        assert postgesql.flexible_servers[AZURE_SUBSCRIPTION][0].log_checkpoints == "ON"
+
+    def test__get_log_connections__(self):
+        postgesql = PostgreSQL(set_mocked_azure_audit_info())
+        assert postgesql.flexible_servers[AZURE_SUBSCRIPTION][0].log_connections == "ON"
+
+    def test__get_log_disconnections__(self):
+        postgesql = PostgreSQL(set_mocked_azure_audit_info())
+        assert (
+            postgesql.flexible_servers[AZURE_SUBSCRIPTION][0].log_disconnections == "ON"
+        )
+
+    def test__get_connection_throttling__(self):
+        postgesql = PostgreSQL(set_mocked_azure_audit_info())
+        assert (
+            postgesql.flexible_servers[AZURE_SUBSCRIPTION][0].connection_throttling
+            == "ON"
+        )
+
+    def test__get_log_retention_days__(self):
+        postgesql = PostgreSQL(set_mocked_azure_audit_info())
+        assert (
+            postgesql.flexible_servers[AZURE_SUBSCRIPTION][0].log_retention_days == "3"
+        )
+
+    def test__get_firewall__(self):
+        postgesql = PostgreSQL(set_mocked_azure_audit_info())
+        assert (
+            postgesql.flexible_servers[AZURE_SUBSCRIPTION][0]
+            .firewall[0]
+            .__class__.__name__
+            == "Firewall"
+        )
+        assert postgesql.flexible_servers[AZURE_SUBSCRIPTION][0].firewall[0].id == "id"
+        assert (
+            postgesql.flexible_servers[AZURE_SUBSCRIPTION][0].firewall[0].name == "name"
+        )
+        assert (
+            postgesql.flexible_servers[AZURE_SUBSCRIPTION][0].firewall[0].start_ip
+            == "start_ip"
+        )
+        assert (
+            postgesql.flexible_servers[AZURE_SUBSCRIPTION][0].firewall[0].end_ip
+            == "end_ip"
+        )
diff --git a/tests/providers/azure/services/sqlserver/sqlserver_auditing_enabled/sqlserver_auditing_enabled_test.py b/tests/providers/azure/services/sqlserver/sqlserver_auditing_enabled/sqlserver_auditing_enabled_test.py
index ce8c5bf6218..0c43204a07d 100644
--- a/tests/providers/azure/services/sqlserver/sqlserver_auditing_enabled/sqlserver_auditing_enabled_test.py
+++ b/tests/providers/azure/services/sqlserver/sqlserver_auditing_enabled/sqlserver_auditing_enabled_test.py
@@ -7,12 +7,11 @@
     ServerExternalAdministrator,
 )
 
-from prowler.providers.azure.services.sqlserver.sqlserver_service import SQL_Server
+from prowler.providers.azure.services.sqlserver.sqlserver_service import Server
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
 
-AZURE_SUSCRIPTION = str(uuid4())
 
-
-class Test_defender_ensure_defender_for_storage_is_on:
+class Test_sqlserver_auditing_enabled:
     def test_no_sql_servers(self):
         sqlserver_client = mock.MagicMock
         sqlserver_client.sql_servers = {}
@@ -34,8 +33,8 @@ def test_sql_servers_auditing_disabled(self):
         sql_server_name = "SQL Server Name"
         sql_server_id = str(uuid4())
         sqlserver_client.sql_servers = {
-            AZURE_SUSCRIPTION: [
-                SQL_Server(
+            AZURE_SUBSCRIPTION: [
+                Server(
                     id=sql_server_id,
                     name=sql_server_name,
                     public_network_access="",
@@ -61,9 +60,9 @@ def test_sql_servers_auditing_disabled(self):
             assert result[0].status == "FAIL"
             assert (
                 result[0].status_extended
-                == f"SQL Server {sql_server_name} from subscription {AZURE_SUSCRIPTION} does not have any auditing policy configured."
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} does not have any auditing policy configured."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == sql_server_name
             assert result[0].resource_id == sql_server_id
 
@@ -72,8 +71,8 @@ def test_sql_servers_auditing_enabled(self):
         sql_server_name = "SQL Server Name"
         sql_server_id = str(uuid4())
         sqlserver_client.sql_servers = {
-            AZURE_SUSCRIPTION: [
-                SQL_Server(
+            AZURE_SUBSCRIPTION: [
+                Server(
                     id=sql_server_id,
                     name=sql_server_name,
                     public_network_access="",
@@ -99,8 +98,8 @@ def test_sql_servers_auditing_enabled(self):
             assert result[0].status == "PASS"
             assert (
                 result[0].status_extended
-                == f"SQL Server {sql_server_name} from subscription {AZURE_SUSCRIPTION} has a auditing policy configured."
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has a auditing policy configured."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == sql_server_name
             assert result[0].resource_id == sql_server_id
diff --git a/tests/providers/azure/services/sqlserver/sqlserver_auditing_retention_90_days/sqlserver_auditing_retention_90_days_test.py b/tests/providers/azure/services/sqlserver/sqlserver_auditing_retention_90_days/sqlserver_auditing_retention_90_days_test.py
new file mode 100644
index 00000000000..cbe5505cb90
--- /dev/null
+++ b/tests/providers/azure/services/sqlserver/sqlserver_auditing_retention_90_days/sqlserver_auditing_retention_90_days_test.py
@@ -0,0 +1,239 @@
+from unittest import mock
+from uuid import uuid4
+
+from azure.mgmt.sql.models import ServerBlobAuditingPolicy
+
+from prowler.providers.azure.services.sqlserver.sqlserver_service import Server
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_sqlserver_auditing_retention_90_days:
+    def test_no_sql_servers(self):
+        sqlserver_client = mock.MagicMock
+        sqlserver_client.sql_servers = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_auditing_retention_90_days.sqlserver_auditing_retention_90_days.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_auditing_retention_90_days.sqlserver_auditing_retention_90_days import (
+                sqlserver_auditing_retention_90_days,
+            )
+
+            check = sqlserver_auditing_retention_90_days()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_sql_servers_auditing_policy_disabled(self):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=[ServerBlobAuditingPolicy(state="Disabled")],
+                    firewall_rules=None,
+                    databases=None,
+                    encryption_protector=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_auditing_retention_90_days.sqlserver_auditing_retention_90_days.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_auditing_retention_90_days.sqlserver_auditing_retention_90_days import (
+                sqlserver_auditing_retention_90_days,
+            )
+
+            check = sqlserver_auditing_retention_90_days()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has auditing disabled."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == sql_server_name
+            assert result[0].resource_id == sql_server_id
+
+    def test_sql_servers_auditing_retention_less_than_90_days(self):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=[
+                        ServerBlobAuditingPolicy(state="Enabled", retention_days=89)
+                    ],
+                    firewall_rules=None,
+                    databases=None,
+                    encryption_protector=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_auditing_retention_90_days.sqlserver_auditing_retention_90_days.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_auditing_retention_90_days.sqlserver_auditing_retention_90_days import (
+                sqlserver_auditing_retention_90_days,
+            )
+
+            check = sqlserver_auditing_retention_90_days()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has auditing retention less than 91 days."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == sql_server_name
+            assert result[0].resource_id == sql_server_id
+
+    def test_sql_servers_auditing_retention_greater_than_90_days(self):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=[
+                        ServerBlobAuditingPolicy(state="Enabled", retention_days=91)
+                    ],
+                    firewall_rules=None,
+                    databases=None,
+                    encryption_protector=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_auditing_retention_90_days.sqlserver_auditing_retention_90_days.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_auditing_retention_90_days.sqlserver_auditing_retention_90_days import (
+                sqlserver_auditing_retention_90_days,
+            )
+
+            check = sqlserver_auditing_retention_90_days()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has auditing retention greater than 90 days."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == sql_server_name
+            assert result[0].resource_id == sql_server_id
+
+    def test_sql_servers_two_auditing_policies_with_auditing_retention_greater_than_90_days(
+        self,
+    ):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=[
+                        ServerBlobAuditingPolicy(state="Enabled", retention_days=91),
+                        ServerBlobAuditingPolicy(state="Enabled", retention_days=100),
+                    ],
+                    firewall_rules=None,
+                    databases=None,
+                    encryption_protector=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_auditing_retention_90_days.sqlserver_auditing_retention_90_days.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_auditing_retention_90_days.sqlserver_auditing_retention_90_days import (
+                sqlserver_auditing_retention_90_days,
+            )
+
+            check = sqlserver_auditing_retention_90_days()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has auditing retention greater than 90 days."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == sql_server_name
+            assert result[0].resource_id == sql_server_id
+
+    def test_sql_servers_two_auditing_policies_with_one_auditing_retention_less_than_90_days(
+        self,
+    ):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=[
+                        ServerBlobAuditingPolicy(state="Enabled", retention_days=91),
+                        ServerBlobAuditingPolicy(state="Enabled", retention_days=80),
+                    ],
+                    firewall_rules=None,
+                    databases=None,
+                    encryption_protector=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_auditing_retention_90_days.sqlserver_auditing_retention_90_days.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_auditing_retention_90_days.sqlserver_auditing_retention_90_days import (
+                sqlserver_auditing_retention_90_days,
+            )
+
+            check = sqlserver_auditing_retention_90_days()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has auditing retention less than 91 days."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == sql_server_name
+            assert result[0].resource_id == sql_server_id
diff --git a/tests/providers/azure/services/sqlserver/sqlserver_azuread_administrator_enabled/sqlserver_azuread_administrator_enabled_test.py b/tests/providers/azure/services/sqlserver/sqlserver_azuread_administrator_enabled/sqlserver_azuread_administrator_enabled_test.py
index 44b3ef8211f..4bda9d24ee6 100644
--- a/tests/providers/azure/services/sqlserver/sqlserver_azuread_administrator_enabled/sqlserver_azuread_administrator_enabled_test.py
+++ b/tests/providers/azure/services/sqlserver/sqlserver_azuread_administrator_enabled/sqlserver_azuread_administrator_enabled_test.py
@@ -3,12 +3,11 @@
 
 from azure.mgmt.sql.models import ServerExternalAdministrator
 
-from prowler.providers.azure.services.sqlserver.sqlserver_service import SQL_Server
+from prowler.providers.azure.services.sqlserver.sqlserver_service import Server
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
 
-AZURE_SUSCRIPTION = str(uuid4())
 
-
-class Test_defender_ensure_defender_for_storage_is_on:
+class Test_sqlserver_azuread_administrator_enabled:
     def test_no_sql_servers(self):
         sqlserver_client = mock.MagicMock
         sqlserver_client.sql_servers = {}
@@ -30,8 +29,8 @@ def test_sql_servers_azuread_no_administrator(self):
         sql_server_name = "SQL Server Name"
         sql_server_id = str(uuid4())
         sqlserver_client.sql_servers = {
-            AZURE_SUSCRIPTION: [
-                SQL_Server(
+            AZURE_SUBSCRIPTION: [
+                Server(
                     id=sql_server_id,
                     name=sql_server_name,
                     public_network_access="",
@@ -57,9 +56,9 @@ def test_sql_servers_azuread_no_administrator(self):
             assert result[0].status == "FAIL"
             assert (
                 result[0].status_extended
-                == f"SQL Server {sql_server_name} from subscription {AZURE_SUSCRIPTION} does not have an Active Directory administrator."
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} does not have an Active Directory administrator."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == sql_server_name
             assert result[0].resource_id == sql_server_id
 
@@ -68,8 +67,8 @@ def test_sql_servers_azuread_administrator_no_active_directory(self):
         sql_server_name = "SQL Server Name"
         sql_server_id = str(uuid4())
         sqlserver_client.sql_servers = {
-            AZURE_SUSCRIPTION: [
-                SQL_Server(
+            AZURE_SUBSCRIPTION: [
+                Server(
                     id=sql_server_id,
                     name=sql_server_name,
                     public_network_access="",
@@ -97,9 +96,9 @@ def test_sql_servers_azuread_administrator_no_active_directory(self):
             assert result[0].status == "FAIL"
             assert (
                 result[0].status_extended
-                == f"SQL Server {sql_server_name} from subscription {AZURE_SUSCRIPTION} does not have an Active Directory administrator."
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} does not have an Active Directory administrator."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == sql_server_name
             assert result[0].resource_id == sql_server_id
 
@@ -108,8 +107,8 @@ def test_sql_servers_azuread_administrator_active_directory(self):
         sql_server_name = "SQL Server Name"
         sql_server_id = str(uuid4())
         sqlserver_client.sql_servers = {
-            AZURE_SUSCRIPTION: [
-                SQL_Server(
+            AZURE_SUBSCRIPTION: [
+                Server(
                     id=sql_server_id,
                     name=sql_server_name,
                     public_network_access="",
@@ -137,8 +136,8 @@ def test_sql_servers_azuread_administrator_active_directory(self):
             assert result[0].status == "PASS"
             assert (
                 result[0].status_extended
-                == f"SQL Server {sql_server_name} from subscription {AZURE_SUSCRIPTION} has an Active Directory administrator."
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has an Active Directory administrator."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == sql_server_name
             assert result[0].resource_id == sql_server_id
diff --git a/tests/providers/azure/services/sqlserver/sqlserver_microsoft_defender_enabled/sqlserver_microsoft_defender_enabled_test.py b/tests/providers/azure/services/sqlserver/sqlserver_microsoft_defender_enabled/sqlserver_microsoft_defender_enabled_test.py
new file mode 100644
index 00000000000..f4bb81d68f9
--- /dev/null
+++ b/tests/providers/azure/services/sqlserver/sqlserver_microsoft_defender_enabled/sqlserver_microsoft_defender_enabled_test.py
@@ -0,0 +1,134 @@
+from unittest import mock
+from uuid import uuid4
+
+from azure.mgmt.sql.models import ServerSecurityAlertPolicy
+
+from prowler.providers.azure.services.sqlserver.sqlserver_service import Server
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_sqlserver_microsoft_defender_enabled:
+    def test_no_sql_servers(self):
+        sqlserver_client = mock.MagicMock
+        sqlserver_client.sql_servers = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_microsoft_defender_enabled.sqlserver_microsoft_defender_enabled.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_microsoft_defender_enabled.sqlserver_microsoft_defender_enabled import (
+                sqlserver_microsoft_defender_enabled,
+            )
+
+            check = sqlserver_microsoft_defender_enabled()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_sql_servers_no_security_alert_policies(self):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=[],
+                    firewall_rules=None,
+                    security_alert_policies=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_microsoft_defender_enabled.sqlserver_microsoft_defender_enabled.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_microsoft_defender_enabled.sqlserver_microsoft_defender_enabled import (
+                sqlserver_microsoft_defender_enabled,
+            )
+
+            check = sqlserver_microsoft_defender_enabled()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_sql_servers_microsoft_defender_disabled(self):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=[],
+                    firewall_rules=None,
+                    security_alert_policies=ServerSecurityAlertPolicy(state="Disabled"),
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_microsoft_defender_enabled.sqlserver_microsoft_defender_enabled.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_microsoft_defender_enabled.sqlserver_microsoft_defender_enabled import (
+                sqlserver_microsoft_defender_enabled,
+            )
+
+            check = sqlserver_microsoft_defender_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has microsoft defender disabled."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == sql_server_name
+            assert result[0].resource_id == sql_server_id
+
+    def test_sql_servers_microsoft_defender_enabled(self):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=[],
+                    firewall_rules=None,
+                    security_alert_policies=ServerSecurityAlertPolicy(state="Enabled"),
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_microsoft_defender_enabled.sqlserver_microsoft_defender_enabled.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_microsoft_defender_enabled.sqlserver_microsoft_defender_enabled import (
+                sqlserver_microsoft_defender_enabled,
+            )
+
+            check = sqlserver_microsoft_defender_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has microsoft defender enabled."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == sql_server_name
+            assert result[0].resource_id == sql_server_id
diff --git a/tests/providers/azure/services/sqlserver/sqlserver_service_test.py b/tests/providers/azure/services/sqlserver/sqlserver_service_test.py
new file mode 100644
index 00000000000..6cee6fd4f69
--- /dev/null
+++ b/tests/providers/azure/services/sqlserver/sqlserver_service_test.py
@@ -0,0 +1,238 @@
+from unittest.mock import patch
+
+from azure.mgmt.sql.models import (
+    EncryptionProtector,
+    FirewallRule,
+    ServerBlobAuditingPolicy,
+    ServerSecurityAlertPolicy,
+    ServerVulnerabilityAssessment,
+    TransparentDataEncryption,
+)
+
+from prowler.providers.azure.services.sqlserver.sqlserver_service import (
+    Database,
+    Server,
+    SQLServer,
+)
+from tests.providers.azure.azure_fixtures import (
+    AZURE_SUBSCRIPTION,
+    set_mocked_azure_audit_info,
+)
+
+
+def mock_sqlserver_get_sql_servers(_):
+    database = Database(
+        id="id",
+        name="name",
+        type="type",
+        location="location",
+        managed_by="managed_by",
+        tde_encryption=TransparentDataEncryption(status="Disabled"),
+    )
+    return {
+        AZURE_SUBSCRIPTION: [
+            Server(
+                id="id",
+                name="name",
+                public_network_access="public_network_access",
+                minimal_tls_version="minimal_tls_version",
+                administrators=None,
+                auditing_policies=ServerBlobAuditingPolicy(state="Disabled"),
+                firewall_rules=FirewallRule(name="name"),
+                encryption_protector=EncryptionProtector(
+                    server_key_type="AzureKeyVault"
+                ),
+                databases=[database],
+                vulnerability_assessment=ServerVulnerabilityAssessment(
+                    storage_container_path="/subcription_id/resource_group/sql_server"
+                ),
+                security_alert_policies=ServerSecurityAlertPolicy(state="Disabled"),
+            )
+        ]
+    }
+
+
+@patch(
+    "prowler.providers.azure.services.sqlserver.sqlserver_service.SQLServer.__get_sql_servers__",
+    new=mock_sqlserver_get_sql_servers,
+)
+class Test_SqlServer_Service:
+    def test__get_client__(self):
+        sql_server = SQLServer(set_mocked_azure_audit_info())
+        assert (
+            sql_server.clients[AZURE_SUBSCRIPTION].__class__.__name__
+            == "SqlManagementClient"
+        )
+
+    def test__get_sql_servers__(self):
+        database = Database(
+            id="id",
+            name="name",
+            type="type",
+            location="location",
+            managed_by="managed_by",
+            tde_encryption=TransparentDataEncryption(status="Disabled"),
+        )
+        sql_server = SQLServer(set_mocked_azure_audit_info())
+        assert (
+            sql_server.sql_servers[AZURE_SUBSCRIPTION][0].__class__.__name__ == "Server"
+        )
+        assert sql_server.sql_servers[AZURE_SUBSCRIPTION][0].id == "id"
+        assert sql_server.sql_servers[AZURE_SUBSCRIPTION][0].name == "name"
+        assert (
+            sql_server.sql_servers[AZURE_SUBSCRIPTION][0].public_network_access
+            == "public_network_access"
+        )
+        assert (
+            sql_server.sql_servers[AZURE_SUBSCRIPTION][0].minimal_tls_version
+            == "minimal_tls_version"
+        )
+        assert sql_server.sql_servers[AZURE_SUBSCRIPTION][0].administrators is None
+        assert (
+            sql_server.sql_servers[AZURE_SUBSCRIPTION][
+                0
+            ].auditing_policies.__class__.__name__
+            == "ServerBlobAuditingPolicy"
+        )
+        assert (
+            sql_server.sql_servers[AZURE_SUBSCRIPTION][
+                0
+            ].firewall_rules.__class__.__name__
+            == "FirewallRule"
+        )
+        assert (
+            sql_server.sql_servers[AZURE_SUBSCRIPTION][
+                0
+            ].encryption_protector.__class__.__name__
+            == "EncryptionProtector"
+        )
+        assert sql_server.sql_servers[AZURE_SUBSCRIPTION][0].databases == [database]
+        assert (
+            sql_server.sql_servers[AZURE_SUBSCRIPTION][
+                0
+            ].vulnerability_assessment.__class__.__name__
+            == "ServerVulnerabilityAssessment"
+        )
+
+    def test__get_databases__(self):
+        sql_server = SQLServer(set_mocked_azure_audit_info())
+        assert (
+            sql_server.sql_servers[AZURE_SUBSCRIPTION][0]
+            .databases[0]
+            .__class__.__name__
+            == "Database"
+        )
+        assert sql_server.sql_servers[AZURE_SUBSCRIPTION][0].databases[0].id == "id"
+        assert sql_server.sql_servers[AZURE_SUBSCRIPTION][0].databases[0].name == "name"
+        assert sql_server.sql_servers[AZURE_SUBSCRIPTION][0].databases[0].type == "type"
+        assert (
+            sql_server.sql_servers[AZURE_SUBSCRIPTION][0].databases[0].location
+            == "location"
+        )
+        assert (
+            sql_server.sql_servers[AZURE_SUBSCRIPTION][0].databases[0].managed_by
+            == "managed_by"
+        )
+        assert (
+            sql_server.sql_servers[AZURE_SUBSCRIPTION][0]
+            .databases[0]
+            .tde_encryption.__class__.__name__
+            == "TransparentDataEncryption"
+        )
+
+    def test__get_transparent_data_encryption__(self):
+        sql_server = SQLServer(set_mocked_azure_audit_info())
+        assert (
+            sql_server.sql_servers[AZURE_SUBSCRIPTION][0]
+            .databases[0]
+            .tde_encryption.__class__.__name__
+            == "TransparentDataEncryption"
+        )
+        assert (
+            sql_server.sql_servers[AZURE_SUBSCRIPTION][0]
+            .databases[0]
+            .tde_encryption.status
+            == "Disabled"
+        )
+
+    def test__get_encryption_protectors__(self):
+        sql_server = SQLServer(set_mocked_azure_audit_info())
+        assert (
+            sql_server.sql_servers[AZURE_SUBSCRIPTION][
+                0
+            ].encryption_protector.__class__.__name__
+            == "EncryptionProtector"
+        )
+        assert (
+            sql_server.sql_servers[AZURE_SUBSCRIPTION][
+                0
+            ].encryption_protector.server_key_type
+            == "AzureKeyVault"
+        )
+
+    def test__get_resource_group__(self):
+        id = "/subscriptions/subscription_id/resourceGroups/resource_group/providers/Microsoft.Sql/servers/sql_server"
+        sql_server = SQLServer(set_mocked_azure_audit_info())
+        assert sql_server.__get_resource_group__(id) == "resource_group"
+
+    def test__get_vulnerability_assessment__(self):
+        sql_server = SQLServer(set_mocked_azure_audit_info())
+        storage_container_path = "/subcription_id/resource_group/sql_server"
+        assert (
+            sql_server.sql_servers[AZURE_SUBSCRIPTION][
+                0
+            ].vulnerability_assessment.__class__.__name__
+            == "ServerVulnerabilityAssessment"
+        )
+        assert (
+            sql_server.sql_servers[AZURE_SUBSCRIPTION][
+                0
+            ].vulnerability_assessment.storage_container_path
+            == storage_container_path
+        )
+
+    def test__get_server_blob_auditing_policies__(self):
+        sql_server = SQLServer(set_mocked_azure_audit_info())
+        auditing_policies = ServerBlobAuditingPolicy(state="Disabled")
+        assert (
+            sql_server.sql_servers[AZURE_SUBSCRIPTION][
+                0
+            ].auditing_policies.__class__.__name__
+            == "ServerBlobAuditingPolicy"
+        )
+        assert (
+            sql_server.sql_servers[AZURE_SUBSCRIPTION][0].auditing_policies
+            == auditing_policies
+        )
+
+    def test__get_firewall_rules__(self):
+        sql_server = SQLServer(set_mocked_azure_audit_info())
+        firewall_rules = FirewallRule(name="name")
+        assert (
+            sql_server.sql_servers[AZURE_SUBSCRIPTION][
+                0
+            ].firewall_rules.__class__.__name__
+            == "FirewallRule"
+        )
+        assert (
+            sql_server.sql_servers[AZURE_SUBSCRIPTION][0].firewall_rules
+            == firewall_rules
+        )
+
+    def test__get_server_security_alert_policies__(self):
+        sql_server = SQLServer(set_mocked_azure_audit_info())
+        security_alert_policies = ServerSecurityAlertPolicy(state="Disabled")
+        assert (
+            sql_server.sql_servers[AZURE_SUBSCRIPTION][
+                0
+            ].security_alert_policies.__class__.__name__
+            == "ServerSecurityAlertPolicy"
+        )
+        assert (
+            sql_server.sql_servers[AZURE_SUBSCRIPTION][0].security_alert_policies
+            == security_alert_policies
+        )
+        assert (
+            sql_server.sql_servers[AZURE_SUBSCRIPTION][0].security_alert_policies.state
+            == "Disabled"
+        )
diff --git a/tests/providers/azure/services/sqlserver/sqlserver_tde_encrypted_with_cmk/sqlserver_tde_encrypted_with_cmk_test.py b/tests/providers/azure/services/sqlserver/sqlserver_tde_encrypted_with_cmk/sqlserver_tde_encrypted_with_cmk_test.py
new file mode 100644
index 00000000000..a2f3be2b8b4
--- /dev/null
+++ b/tests/providers/azure/services/sqlserver/sqlserver_tde_encrypted_with_cmk/sqlserver_tde_encrypted_with_cmk_test.py
@@ -0,0 +1,209 @@
+from unittest import mock
+from uuid import uuid4
+
+from azure.mgmt.sql.models import EncryptionProtector, TransparentDataEncryption
+
+from prowler.providers.azure.services.sqlserver.sqlserver_service import (
+    Database,
+    Server,
+)
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_sqlserver_tde_encrypted_with_cmk:
+    def test_no_sql_servers(self):
+        sqlserver_client = mock.MagicMock
+        sqlserver_client.sql_servers = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_tde_encrypted_with_cmk.sqlserver_tde_encrypted_with_cmk.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_tde_encrypted_with_cmk.sqlserver_tde_encrypted_with_cmk import (
+                sqlserver_tde_encrypted_with_cmk,
+            )
+
+            check = sqlserver_tde_encrypted_with_cmk()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_no_sql_servers_databases(self):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=None,
+                    firewall_rules=None,
+                    databases=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_tde_encrypted_with_cmk.sqlserver_tde_encrypted_with_cmk.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_tde_encrypted_with_cmk.sqlserver_tde_encrypted_with_cmk import (
+                sqlserver_tde_encrypted_with_cmk,
+            )
+
+            check = sqlserver_tde_encrypted_with_cmk()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_sql_servers_encryption_protector_service_managed(self):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        database = Database(
+            id="id",
+            name="name",
+            type="type",
+            location="location",
+            managed_by="managed_by",
+            tde_encryption=None,
+        )
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=None,
+                    firewall_rules=None,
+                    databases=[database],
+                    encryption_protector=EncryptionProtector(
+                        server_key_type="ServiceManaged"
+                    ),
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_tde_encrypted_with_cmk.sqlserver_tde_encrypted_with_cmk.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_tde_encrypted_with_cmk.sqlserver_tde_encrypted_with_cmk import (
+                sqlserver_tde_encrypted_with_cmk,
+            )
+
+            check = sqlserver_tde_encrypted_with_cmk()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has TDE disabled without CMK."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == sql_server_name
+            assert result[0].resource_id == sql_server_id
+
+    def test_sql_servers_database_encryption_disabled(self):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        database = Database(
+            id="id",
+            name="name",
+            type="type",
+            location="location",
+            managed_by="managed_by",
+            tde_encryption=TransparentDataEncryption(status="Disabled"),
+        )
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=None,
+                    firewall_rules=None,
+                    databases=[database],
+                    encryption_protector=EncryptionProtector(
+                        server_key_type="AzureKeyVault"
+                    ),
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_tde_encrypted_with_cmk.sqlserver_tde_encrypted_with_cmk.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_tde_encrypted_with_cmk.sqlserver_tde_encrypted_with_cmk import (
+                sqlserver_tde_encrypted_with_cmk,
+            )
+
+            check = sqlserver_tde_encrypted_with_cmk()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has TDE disabled with CMK."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == sql_server_name
+            assert result[0].resource_id == sql_server_id
+
+    def test_sql_servers_database_encryption_enabled(self):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        database = Database(
+            id="id",
+            name="name",
+            type="type",
+            location="location",
+            managed_by="managed_by",
+            tde_encryption=TransparentDataEncryption(status="Enabled"),
+        )
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=None,
+                    firewall_rules=None,
+                    databases=[database],
+                    encryption_protector=EncryptionProtector(
+                        server_key_type="AzureKeyVault"
+                    ),
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_tde_encrypted_with_cmk.sqlserver_tde_encrypted_with_cmk.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_tde_encrypted_with_cmk.sqlserver_tde_encrypted_with_cmk import (
+                sqlserver_tde_encrypted_with_cmk,
+            )
+
+            check = sqlserver_tde_encrypted_with_cmk()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has TDE enabled with CMK."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == sql_server_name
+            assert result[0].resource_id == sql_server_id
diff --git a/tests/providers/azure/services/sqlserver/sqlserver_tde_encryption_enabled/sqlserver_tde_encryption_enabled_test.py b/tests/providers/azure/services/sqlserver/sqlserver_tde_encryption_enabled/sqlserver_tde_encryption_enabled_test.py
new file mode 100644
index 00000000000..05308a8fc5a
--- /dev/null
+++ b/tests/providers/azure/services/sqlserver/sqlserver_tde_encryption_enabled/sqlserver_tde_encryption_enabled_test.py
@@ -0,0 +1,159 @@
+from unittest import mock
+from uuid import uuid4
+
+from azure.mgmt.sql.models import TransparentDataEncryption
+
+from prowler.providers.azure.services.sqlserver.sqlserver_service import (
+    Database,
+    Server,
+)
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_sqlserver_tde_encryption_enabled:
+    def test_no_sql_servers(self):
+        sqlserver_client = mock.MagicMock
+        sqlserver_client.sql_servers = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_tde_encryption_enabled.sqlserver_tde_encryption_enabled.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_tde_encryption_enabled.sqlserver_tde_encryption_enabled import (
+                sqlserver_tde_encryption_enabled,
+            )
+
+            check = sqlserver_tde_encryption_enabled()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_no_sql_servers_databases(self):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=None,
+                    firewall_rules=None,
+                    databases=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_tde_encryption_enabled.sqlserver_tde_encryption_enabled.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_tde_encryption_enabled.sqlserver_tde_encryption_enabled import (
+                sqlserver_tde_encryption_enabled,
+            )
+
+            check = sqlserver_tde_encryption_enabled()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_sql_servers_database_encryption_disabled(self):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        database_name = "Database Name"
+        database_id = str(uuid4())
+        database = Database(
+            id=database_id,
+            name=database_name,
+            type="type",
+            location="location",
+            managed_by="managed_by",
+            tde_encryption=TransparentDataEncryption(status="Disabled"),
+        )
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=None,
+                    firewall_rules=None,
+                    databases=[database],
+                    encryption_protector=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_tde_encryption_enabled.sqlserver_tde_encryption_enabled.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_tde_encryption_enabled.sqlserver_tde_encryption_enabled import (
+                sqlserver_tde_encryption_enabled,
+            )
+
+            check = sqlserver_tde_encryption_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Database {database_name} from SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has TDE disabled"
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == database_name
+            assert result[0].resource_id == database_id
+
+    def test_sql_servers_database_encryption_enabled(self):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        database_name = "Database Name"
+        database_id = str(uuid4())
+        database = Database(
+            id=database_id,
+            name=database_name,
+            type="type",
+            location="location",
+            managed_by="managed_by",
+            tde_encryption=TransparentDataEncryption(status="Enabled"),
+        )
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=None,
+                    firewall_rules=None,
+                    databases=[database],
+                    encryption_protector=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_tde_encryption_enabled.sqlserver_tde_encryption_enabled.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_tde_encryption_enabled.sqlserver_tde_encryption_enabled import (
+                sqlserver_tde_encryption_enabled,
+            )
+
+            check = sqlserver_tde_encryption_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Database {database_name} from SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has TDE enabled"
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == database_name
+            assert result[0].resource_id == database_id
diff --git a/tests/providers/azure/services/sqlserver/sqlserver_unrestricted_inbound_access/sqlserver_unrestricted_inbound_access_test.py b/tests/providers/azure/services/sqlserver/sqlserver_unrestricted_inbound_access/sqlserver_unrestricted_inbound_access_test.py
index 5a50e3f3911..74056f68200 100644
--- a/tests/providers/azure/services/sqlserver/sqlserver_unrestricted_inbound_access/sqlserver_unrestricted_inbound_access_test.py
+++ b/tests/providers/azure/services/sqlserver/sqlserver_unrestricted_inbound_access/sqlserver_unrestricted_inbound_access_test.py
@@ -3,12 +3,11 @@
 
 from azure.mgmt.sql.models import FirewallRule
 
-from prowler.providers.azure.services.sqlserver.sqlserver_service import SQL_Server
+from prowler.providers.azure.services.sqlserver.sqlserver_service import Server
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
 
-AZURE_SUSCRIPTION = str(uuid4())
 
-
-class Test_defender_ensure_defender_for_storage_is_on:
+class Test_sqlserver_unrestricted_inbound_access:
     def test_no_sql_servers(self):
         sqlserver_client = mock.MagicMock
         sqlserver_client.sql_servers = {}
@@ -30,8 +29,8 @@ def test_sql_servers_unrestricted_inbound_access(self):
         sql_server_name = "SQL Server Name"
         sql_server_id = str(uuid4())
         sqlserver_client.sql_servers = {
-            AZURE_SUSCRIPTION: [
-                SQL_Server(
+            AZURE_SUBSCRIPTION: [
+                Server(
                     id=sql_server_id,
                     name=sql_server_name,
                     public_network_access="",
@@ -61,9 +60,9 @@ def test_sql_servers_unrestricted_inbound_access(self):
             assert result[0].status == "FAIL"
             assert (
                 result[0].status_extended
-                == f"SQL Server {sql_server_name} from subscription {AZURE_SUSCRIPTION} has firewall rules allowing 0.0.0.0-255.255.255.255."
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has firewall rules allowing 0.0.0.0-255.255.255.255."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == sql_server_name
             assert result[0].resource_id == sql_server_id
 
@@ -72,8 +71,8 @@ def test_sql_servers_restricted_inbound_access(self):
         sql_server_name = "SQL Server Name"
         sql_server_id = str(uuid4())
         sqlserver_client.sql_servers = {
-            AZURE_SUSCRIPTION: [
-                SQL_Server(
+            AZURE_SUBSCRIPTION: [
+                Server(
                     id=sql_server_id,
                     name=sql_server_name,
                     public_network_access="",
@@ -103,8 +102,8 @@ def test_sql_servers_restricted_inbound_access(self):
             assert result[0].status == "PASS"
             assert (
                 result[0].status_extended
-                == f"SQL Server {sql_server_name} from subscription {AZURE_SUSCRIPTION} does not have firewall rules allowing 0.0.0.0-255.255.255.255."
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} does not have firewall rules allowing 0.0.0.0-255.255.255.255."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == sql_server_name
             assert result[0].resource_id == sql_server_id
diff --git a/tests/providers/azure/services/sqlserver/sqlserver_va_emails_notifications_admins_enabled/sqlserver_va_emails_notifications_admins_enabled_test.py b/tests/providers/azure/services/sqlserver/sqlserver_va_emails_notifications_admins_enabled/sqlserver_va_emails_notifications_admins_enabled_test.py
new file mode 100644
index 00000000000..bff8a005d75
--- /dev/null
+++ b/tests/providers/azure/services/sqlserver/sqlserver_va_emails_notifications_admins_enabled/sqlserver_va_emails_notifications_admins_enabled_test.py
@@ -0,0 +1,207 @@
+from unittest import mock
+from uuid import uuid4
+
+from azure.mgmt.sql.models import (
+    ServerVulnerabilityAssessment,
+    VulnerabilityAssessmentRecurringScansProperties,
+)
+
+from prowler.providers.azure.services.sqlserver.sqlserver_service import Server
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_sqlserver_va_emails_notifications_admins_enabled:
+    def test_no_sql_servers(self):
+        sqlserver_client = mock.MagicMock
+        sqlserver_client.sql_servers = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_va_emails_notifications_admins_enabled.sqlserver_va_emails_notifications_admins_enabled.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_va_emails_notifications_admins_enabled.sqlserver_va_emails_notifications_admins_enabled import (
+                sqlserver_va_emails_notifications_admins_enabled,
+            )
+
+            check = sqlserver_va_emails_notifications_admins_enabled()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_sql_servers_no_vulnerability_assessment(self):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=None,
+                    firewall_rules=None,
+                    databases=None,
+                    encryption_protector=None,
+                    vulnerability_assessment=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_va_emails_notifications_admins_enabled.sqlserver_va_emails_notifications_admins_enabled.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_va_emails_notifications_admins_enabled.sqlserver_va_emails_notifications_admins_enabled import (
+                sqlserver_va_emails_notifications_admins_enabled,
+            )
+
+            check = sqlserver_va_emails_notifications_admins_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has vulnerability assessment disabled."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == sql_server_name
+            assert result[0].resource_id == sql_server_id
+
+    def test_sql_servers_no_vulnerability_assessment_no_admin_emails(self):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=None,
+                    firewall_rules=None,
+                    databases=None,
+                    encryption_protector=None,
+                    vulnerability_assessment=ServerVulnerabilityAssessment(
+                        storage_container_path="/subcription_id/resource_group/sql_server",
+                        recurring_scans=VulnerabilityAssessmentRecurringScansProperties(
+                            email_subscription_admins=None
+                        ),
+                    ),
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_va_emails_notifications_admins_enabled.sqlserver_va_emails_notifications_admins_enabled.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_va_emails_notifications_admins_enabled.sqlserver_va_emails_notifications_admins_enabled import (
+                sqlserver_va_emails_notifications_admins_enabled,
+            )
+
+            check = sqlserver_va_emails_notifications_admins_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has vulnerability assessment enabled but no scan reports configured for subscription admins."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == sql_server_name
+            assert result[0].resource_id == sql_server_id
+
+    def test_sql_servers_vulnerability_assessment_admin_emails_false(self):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=None,
+                    firewall_rules=None,
+                    databases=None,
+                    encryption_protector=None,
+                    vulnerability_assessment=ServerVulnerabilityAssessment(
+                        storage_container_path="/subcription_id/resource_group/sql_server",
+                        recurring_scans=VulnerabilityAssessmentRecurringScansProperties(
+                            email_subscription_admins=False
+                        ),
+                    ),
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_va_emails_notifications_admins_enabled.sqlserver_va_emails_notifications_admins_enabled.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_va_emails_notifications_admins_enabled.sqlserver_va_emails_notifications_admins_enabled import (
+                sqlserver_va_emails_notifications_admins_enabled,
+            )
+
+            check = sqlserver_va_emails_notifications_admins_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has vulnerability assessment enabled but no scan reports configured for subscription admins."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == sql_server_name
+            assert result[0].resource_id == sql_server_id
+
+    def test_sql_servers_vulnerability_assessment_no_email_subscription_admins(self):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=None,
+                    firewall_rules=None,
+                    databases=None,
+                    encryption_protector=None,
+                    vulnerability_assessment=ServerVulnerabilityAssessment(
+                        storage_container_path="/subcription_id/resource_group/sql_server",
+                        recurring_scans=VulnerabilityAssessmentRecurringScansProperties(
+                            email_subscription_admins=True
+                        ),
+                    ),
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_va_emails_notifications_admins_enabled.sqlserver_va_emails_notifications_admins_enabled.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_va_emails_notifications_admins_enabled.sqlserver_va_emails_notifications_admins_enabled import (
+                sqlserver_va_emails_notifications_admins_enabled,
+            )
+
+            check = sqlserver_va_emails_notifications_admins_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has vulnerability assessment enabled and scan reports configured for subscription admins."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == sql_server_name
+            assert result[0].resource_id == sql_server_id
diff --git a/tests/providers/azure/services/sqlserver/sqlserver_va_periodic_recurring_scans_enabled/sqlserver_va_periodic_recurring_scans_enabled_test.py b/tests/providers/azure/services/sqlserver/sqlserver_va_periodic_recurring_scans_enabled/sqlserver_va_periodic_recurring_scans_enabled_test.py
new file mode 100644
index 00000000000..fa1a43d3c9f
--- /dev/null
+++ b/tests/providers/azure/services/sqlserver/sqlserver_va_periodic_recurring_scans_enabled/sqlserver_va_periodic_recurring_scans_enabled_test.py
@@ -0,0 +1,204 @@
+from unittest import mock
+from uuid import uuid4
+
+from azure.mgmt.sql.models import (
+    ServerVulnerabilityAssessment,
+    VulnerabilityAssessmentRecurringScansProperties,
+)
+
+from prowler.providers.azure.services.sqlserver.sqlserver_service import Server
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_sqlserver_va_periodic_recurring_scans_enabled:
+    def test_no_sql_servers(self):
+        sqlserver_client = mock.MagicMock
+        sqlserver_client.sql_servers = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_va_periodic_recurring_scans_enabled.sqlserver_va_periodic_recurring_scans_enabled.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_va_periodic_recurring_scans_enabled.sqlserver_va_periodic_recurring_scans_enabled import (
+                sqlserver_va_periodic_recurring_scans_enabled,
+            )
+
+            check = sqlserver_va_periodic_recurring_scans_enabled()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_sql_servers_no_vulnerability_assessment(self):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=None,
+                    firewall_rules=None,
+                    databases=None,
+                    encryption_protector=None,
+                    vulnerability_assessment=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_va_periodic_recurring_scans_enabled.sqlserver_va_periodic_recurring_scans_enabled.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_va_periodic_recurring_scans_enabled.sqlserver_va_periodic_recurring_scans_enabled import (
+                sqlserver_va_periodic_recurring_scans_enabled,
+            )
+
+            check = sqlserver_va_periodic_recurring_scans_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has vulnerability assessment disabled."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == sql_server_name
+            assert result[0].resource_id == sql_server_id
+
+    def test_sql_servers_no_vulnerability_assessment_storage_container_path(self):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=None,
+                    firewall_rules=None,
+                    databases=None,
+                    encryption_protector=None,
+                    vulnerability_assessment=ServerVulnerabilityAssessment(
+                        storage_container_path=None
+                    ),
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_va_periodic_recurring_scans_enabled.sqlserver_va_periodic_recurring_scans_enabled.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_va_periodic_recurring_scans_enabled.sqlserver_va_periodic_recurring_scans_enabled import (
+                sqlserver_va_periodic_recurring_scans_enabled,
+            )
+
+            check = sqlserver_va_periodic_recurring_scans_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has vulnerability assessment disabled."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == sql_server_name
+            assert result[0].resource_id == sql_server_id
+
+    def test_sql_servers_vulnerability_assessment_recuring_scans_disabled(self):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=None,
+                    firewall_rules=None,
+                    databases=None,
+                    encryption_protector=None,
+                    vulnerability_assessment=ServerVulnerabilityAssessment(
+                        storage_container_path="/subcription_id/resource_group/sql_server",
+                        recurring_scans=VulnerabilityAssessmentRecurringScansProperties(
+                            is_enabled=False
+                        ),
+                    ),
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_va_periodic_recurring_scans_enabled.sqlserver_va_periodic_recurring_scans_enabled.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_va_periodic_recurring_scans_enabled.sqlserver_va_periodic_recurring_scans_enabled import (
+                sqlserver_va_periodic_recurring_scans_enabled,
+            )
+
+            check = sqlserver_va_periodic_recurring_scans_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has vulnerability assessment enabled but no recurring scans."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == sql_server_name
+            assert result[0].resource_id == sql_server_id
+
+    def test_sql_servers_vulnerability_assessment_recuring_scans_enabled(self):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=None,
+                    firewall_rules=None,
+                    databases=None,
+                    encryption_protector=None,
+                    vulnerability_assessment=ServerVulnerabilityAssessment(
+                        storage_container_path="/subcription_id/resource_group/sql_server",
+                        recurring_scans=VulnerabilityAssessmentRecurringScansProperties(
+                            is_enabled=True
+                        ),
+                    ),
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_va_periodic_recurring_scans_enabled.sqlserver_va_periodic_recurring_scans_enabled.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_va_periodic_recurring_scans_enabled.sqlserver_va_periodic_recurring_scans_enabled import (
+                sqlserver_va_periodic_recurring_scans_enabled,
+            )
+
+            check = sqlserver_va_periodic_recurring_scans_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has periodic recurring scans enabled."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == sql_server_name
+            assert result[0].resource_id == sql_server_id
diff --git a/tests/providers/azure/services/sqlserver/sqlserver_va_scan_reports_configured/sqlserver_va_scan_reports_configured_test.py b/tests/providers/azure/services/sqlserver/sqlserver_va_scan_reports_configured/sqlserver_va_scan_reports_configured_test.py
new file mode 100644
index 00000000000..5bff4f61535
--- /dev/null
+++ b/tests/providers/azure/services/sqlserver/sqlserver_va_scan_reports_configured/sqlserver_va_scan_reports_configured_test.py
@@ -0,0 +1,253 @@
+from unittest import mock
+from uuid import uuid4
+
+from azure.mgmt.sql.models import (
+    ServerVulnerabilityAssessment,
+    VulnerabilityAssessmentRecurringScansProperties,
+)
+
+from prowler.providers.azure.services.sqlserver.sqlserver_service import Server
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_sqlserver_va_scan_reports_configured:
+    def test_no_sql_servers(self):
+        sqlserver_client = mock.MagicMock
+        sqlserver_client.sql_servers = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_va_scan_reports_configured.sqlserver_va_scan_reports_configured.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_va_scan_reports_configured.sqlserver_va_scan_reports_configured import (
+                sqlserver_va_scan_reports_configured,
+            )
+
+            check = sqlserver_va_scan_reports_configured()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_sql_servers_no_vulnerability_assessment(self):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=None,
+                    firewall_rules=None,
+                    databases=None,
+                    encryption_protector=None,
+                    vulnerability_assessment=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_va_scan_reports_configured.sqlserver_va_scan_reports_configured.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_va_scan_reports_configured.sqlserver_va_scan_reports_configured import (
+                sqlserver_va_scan_reports_configured,
+            )
+
+            check = sqlserver_va_scan_reports_configured()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has vulnerability assessment disabled."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == sql_server_name
+            assert result[0].resource_id == sql_server_id
+
+    def test_sql_servers_no_vulnerability_assessment_emails(self):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=None,
+                    firewall_rules=None,
+                    databases=None,
+                    encryption_protector=None,
+                    vulnerability_assessment=ServerVulnerabilityAssessment(
+                        storage_container_path="/subcription_id/resource_group/sql_server",
+                        recurring_scans=VulnerabilityAssessmentRecurringScansProperties(
+                            emails=None, email_subscription_admins=False
+                        ),
+                    ),
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_va_scan_reports_configured.sqlserver_va_scan_reports_configured.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_va_scan_reports_configured.sqlserver_va_scan_reports_configured import (
+                sqlserver_va_scan_reports_configured,
+            )
+
+            check = sqlserver_va_scan_reports_configured()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has vulnerability assessment enabled but no scan reports configured."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == sql_server_name
+            assert result[0].resource_id == sql_server_id
+
+    def test_sql_servers_vulnerability_assessment_emails_none(self):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=None,
+                    firewall_rules=None,
+                    databases=None,
+                    encryption_protector=None,
+                    vulnerability_assessment=ServerVulnerabilityAssessment(
+                        storage_container_path="/subcription_id/resource_group/sql_server",
+                        recurring_scans=VulnerabilityAssessmentRecurringScansProperties(
+                            emails=None, email_subscription_admins=True
+                        ),
+                    ),
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_va_scan_reports_configured.sqlserver_va_scan_reports_configured.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_va_scan_reports_configured.sqlserver_va_scan_reports_configured import (
+                sqlserver_va_scan_reports_configured,
+            )
+
+            check = sqlserver_va_scan_reports_configured()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has vulnerability assessment enabled and scan reports configured."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == sql_server_name
+            assert result[0].resource_id == sql_server_id
+
+    def test_sql_servers_vulnerability_assessment_no_email_subscription_admins(self):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=None,
+                    firewall_rules=None,
+                    databases=None,
+                    encryption_protector=None,
+                    vulnerability_assessment=ServerVulnerabilityAssessment(
+                        storage_container_path="/subcription_id/resource_group/sql_server",
+                        recurring_scans=VulnerabilityAssessmentRecurringScansProperties(
+                            emails=["email@email.com"], email_subscription_admins=False
+                        ),
+                    ),
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_va_scan_reports_configured.sqlserver_va_scan_reports_configured.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_va_scan_reports_configured.sqlserver_va_scan_reports_configured import (
+                sqlserver_va_scan_reports_configured,
+            )
+
+            check = sqlserver_va_scan_reports_configured()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has vulnerability assessment enabled and scan reports configured."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == sql_server_name
+            assert result[0].resource_id == sql_server_id
+
+    def test_sql_servers_vulnerability_assessment_both_emails(self):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=None,
+                    firewall_rules=None,
+                    databases=None,
+                    encryption_protector=None,
+                    vulnerability_assessment=ServerVulnerabilityAssessment(
+                        storage_container_path="/subcription_id/resource_group/sql_server",
+                        recurring_scans=VulnerabilityAssessmentRecurringScansProperties(
+                            emails=["email@email.com"], email_subscription_admins=True
+                        ),
+                    ),
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_va_scan_reports_configured.sqlserver_va_scan_reports_configured.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_va_scan_reports_configured.sqlserver_va_scan_reports_configured import (
+                sqlserver_va_scan_reports_configured,
+            )
+
+            check = sqlserver_va_scan_reports_configured()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has vulnerability assessment enabled and scan reports configured."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == sql_server_name
+            assert result[0].resource_id == sql_server_id
diff --git a/tests/providers/azure/services/sqlserver/sqlserver_vulnerability_assessment_enabled/sqlserver_vulnerability_assessment_enabled_test.py b/tests/providers/azure/services/sqlserver/sqlserver_vulnerability_assessment_enabled/sqlserver_vulnerability_assessment_enabled_test.py
new file mode 100644
index 00000000000..ed1abbc1cf8
--- /dev/null
+++ b/tests/providers/azure/services/sqlserver/sqlserver_vulnerability_assessment_enabled/sqlserver_vulnerability_assessment_enabled_test.py
@@ -0,0 +1,189 @@
+from unittest import mock
+from uuid import uuid4
+
+from azure.mgmt.sql.models import (
+    EncryptionProtector,
+    ServerVulnerabilityAssessment,
+    TransparentDataEncryption,
+)
+
+from prowler.providers.azure.services.sqlserver.sqlserver_service import (
+    Database,
+    Server,
+)
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_sqlserver_vulnerability_assessment_enabled:
+    def test_no_sql_servers(self):
+        sqlserver_client = mock.MagicMock
+        sqlserver_client.sql_servers = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_vulnerability_assessment_enabled.sqlserver_vulnerability_assessment_enabled.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_vulnerability_assessment_enabled.sqlserver_vulnerability_assessment_enabled import (
+                sqlserver_vulnerability_assessment_enabled,
+            )
+
+            check = sqlserver_vulnerability_assessment_enabled()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_sql_servers_no_vulnerability_assessment(self):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        database = Database(
+            id="id",
+            name="name",
+            type="type",
+            location="location",
+            managed_by="managed_by",
+            tde_encryption=None,
+        )
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=None,
+                    firewall_rules=None,
+                    databases=[database],
+                    encryption_protector=EncryptionProtector(
+                        server_key_type="ServiceManaged"
+                    ),
+                    vulnerability_assessment=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_vulnerability_assessment_enabled.sqlserver_vulnerability_assessment_enabled.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_vulnerability_assessment_enabled.sqlserver_vulnerability_assessment_enabled import (
+                sqlserver_vulnerability_assessment_enabled,
+            )
+
+            check = sqlserver_vulnerability_assessment_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has vulnerability assessment disabled."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == sql_server_name
+            assert result[0].resource_id == sql_server_id
+
+    def test_sql_servers_no_vulnerability_assessment_path(self):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        database = Database(
+            id="id",
+            name="name",
+            type="type",
+            location="location",
+            managed_by="managed_by",
+            tde_encryption=TransparentDataEncryption(status="Disabled"),
+        )
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=None,
+                    firewall_rules=None,
+                    databases=[database],
+                    encryption_protector=EncryptionProtector(
+                        server_key_type="AzureKeyVault"
+                    ),
+                    vulnerability_assessment=ServerVulnerabilityAssessment(
+                        storage_container_path=None
+                    ),
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_vulnerability_assessment_enabled.sqlserver_vulnerability_assessment_enabled.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_vulnerability_assessment_enabled.sqlserver_vulnerability_assessment_enabled import (
+                sqlserver_vulnerability_assessment_enabled,
+            )
+
+            check = sqlserver_vulnerability_assessment_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has vulnerability assessment disabled."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == sql_server_name
+            assert result[0].resource_id == sql_server_id
+
+    def test_sql_servers_vulnerability_assessment_enabled(self):
+        sqlserver_client = mock.MagicMock
+        sql_server_name = "SQL Server Name"
+        sql_server_id = str(uuid4())
+        database = Database(
+            id="id",
+            name="name",
+            type="type",
+            location="location",
+            managed_by="managed_by",
+            tde_encryption=TransparentDataEncryption(status="Enabled"),
+        )
+        sqlserver_client.sql_servers = {
+            AZURE_SUBSCRIPTION: [
+                Server(
+                    id=sql_server_id,
+                    name=sql_server_name,
+                    public_network_access="",
+                    minimal_tls_version="",
+                    administrators=None,
+                    auditing_policies=None,
+                    firewall_rules=None,
+                    databases=[database],
+                    encryption_protector=EncryptionProtector(
+                        server_key_type="AzureKeyVault"
+                    ),
+                    vulnerability_assessment=ServerVulnerabilityAssessment(
+                        storage_container_path="/subcription_id/resource_group/sql_server"
+                    ),
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.sqlserver.sqlserver_vulnerability_assessment_enabled.sqlserver_vulnerability_assessment_enabled.sqlserver_client",
+            new=sqlserver_client,
+        ):
+            from prowler.providers.azure.services.sqlserver.sqlserver_vulnerability_assessment_enabled.sqlserver_vulnerability_assessment_enabled import (
+                sqlserver_vulnerability_assessment_enabled,
+            )
+
+            check = sqlserver_vulnerability_assessment_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"SQL Server {sql_server_name} from subscription {AZURE_SUBSCRIPTION} has vulnerability assessment enabled."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == sql_server_name
+            assert result[0].resource_id == sql_server_id
diff --git a/tests/providers/azure/services/storage/storage_blob_public_access_level_is_disabled/storage_blob_public_access_level_is_disabled_test.py b/tests/providers/azure/services/storage/storage_blob_public_access_level_is_disabled/storage_blob_public_access_level_is_disabled_test.py
index 94f31b3c045..ce91bd55d62 100644
--- a/tests/providers/azure/services/storage/storage_blob_public_access_level_is_disabled/storage_blob_public_access_level_is_disabled_test.py
+++ b/tests/providers/azure/services/storage/storage_blob_public_access_level_is_disabled/storage_blob_public_access_level_is_disabled_test.py
@@ -1,9 +1,8 @@
 from unittest import mock
 from uuid import uuid4
 
-from prowler.providers.azure.services.storage.storage_service import Storage_Account
-
-AZURE_SUSCRIPTION = str(uuid4())
+from prowler.providers.azure.services.storage.storage_service import Account
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
 
 
 class Test_storage_blob_public_access_level_is_disabled:
@@ -28,16 +27,19 @@ def test_storage_storage_accounts_public_access_level_enabled(self):
         storage_account_name = "Test Storage Account"
         storage_client = mock.MagicMock
         storage_client.storage_accounts = {
-            AZURE_SUSCRIPTION: [
-                Storage_Account(
+            AZURE_SUBSCRIPTION: [
+                Account(
                     id=storage_account_id,
                     name=storage_account_name,
+                    resouce_group_name=None,
                     enable_https_traffic_only=False,
                     infrastructure_encryption=False,
                     allow_blob_public_access=True,
                     network_rule_set=None,
                     encryption_type=None,
                     minimum_tls_version=None,
+                    key_expiration_period_in_days=None,
+                    private_endpoint_connections=None,
                 )
             ]
         }
@@ -56,9 +58,9 @@ def test_storage_storage_accounts_public_access_level_enabled(self):
             assert result[0].status == "FAIL"
             assert (
                 result[0].status_extended
-                == f"Storage account {storage_account_name} from subscription {AZURE_SUSCRIPTION} has allow blob public access enabled."
+                == f"Storage account {storage_account_name} from subscription {AZURE_SUBSCRIPTION} has allow blob public access enabled."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == storage_account_name
             assert result[0].resource_id == storage_account_id
 
@@ -67,16 +69,19 @@ def test_storage_storage_accounts_public_access_level_disabled(self):
         storage_account_name = "Test Storage Account"
         storage_client = mock.MagicMock
         storage_client.storage_accounts = {
-            AZURE_SUSCRIPTION: [
-                Storage_Account(
+            AZURE_SUBSCRIPTION: [
+                Account(
                     id=storage_account_id,
                     name=storage_account_name,
+                    resouce_group_name=None,
                     enable_https_traffic_only=False,
                     infrastructure_encryption=False,
                     allow_blob_public_access=False,
                     network_rule_set=None,
                     encryption_type=None,
                     minimum_tls_version=None,
+                    key_expiration_period_in_days=None,
+                    private_endpoint_connections=None,
                 )
             ]
         }
@@ -95,8 +100,8 @@ def test_storage_storage_accounts_public_access_level_disabled(self):
             assert result[0].status == "PASS"
             assert (
                 result[0].status_extended
-                == f"Storage account {storage_account_name} from subscription {AZURE_SUSCRIPTION} has allow blob public access disabled."
+                == f"Storage account {storage_account_name} from subscription {AZURE_SUBSCRIPTION} has allow blob public access disabled."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == storage_account_name
             assert result[0].resource_id == storage_account_id
diff --git a/tests/providers/azure/services/storage/storage_default_network_access_rule_is_denied/storage_default_network_access_rule_is_denied_test.py b/tests/providers/azure/services/storage/storage_default_network_access_rule_is_denied/storage_default_network_access_rule_is_denied_test.py
index 18fa9f2e903..57f5e2528d0 100644
--- a/tests/providers/azure/services/storage/storage_default_network_access_rule_is_denied/storage_default_network_access_rule_is_denied_test.py
+++ b/tests/providers/azure/services/storage/storage_default_network_access_rule_is_denied/storage_default_network_access_rule_is_denied_test.py
@@ -3,9 +3,8 @@
 
 from azure.mgmt.storage.v2022_09_01.models import NetworkRuleSet
 
-from prowler.providers.azure.services.storage.storage_service import Storage_Account
-
-AZURE_SUSCRIPTION = str(uuid4())
+from prowler.providers.azure.services.storage.storage_service import Account
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
 
 
 class Test_storage_default_network_access_rule_is_denied:
@@ -30,16 +29,19 @@ def test_storage_storage_accounts_default_network_access_rule_allowed(self):
         storage_account_name = "Test Storage Account"
         storage_client = mock.MagicMock
         storage_client.storage_accounts = {
-            AZURE_SUSCRIPTION: [
-                Storage_Account(
+            AZURE_SUBSCRIPTION: [
+                Account(
                     id=storage_account_id,
                     name=storage_account_name,
+                    resouce_group_name=None,
                     enable_https_traffic_only=False,
                     infrastructure_encryption=False,
                     allow_blob_public_access=None,
                     network_rule_set=NetworkRuleSet(default_action="Allow"),
                     encryption_type=None,
                     minimum_tls_version=None,
+                    key_expiration_period_in_days=None,
+                    private_endpoint_connections=None,
                 )
             ]
         }
@@ -58,9 +60,9 @@ def test_storage_storage_accounts_default_network_access_rule_allowed(self):
             assert result[0].status == "FAIL"
             assert (
                 result[0].status_extended
-                == f"Storage account {storage_account_name} from subscription {AZURE_SUSCRIPTION} has network access rule set to Allow."
+                == f"Storage account {storage_account_name} from subscription {AZURE_SUBSCRIPTION} has network access rule set to Allow."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == storage_account_name
             assert result[0].resource_id == storage_account_id
 
@@ -69,16 +71,19 @@ def test_storage_storage_accounts_default_network_access_rule_denied(self):
         storage_account_name = "Test Storage Account"
         storage_client = mock.MagicMock
         storage_client.storage_accounts = {
-            AZURE_SUSCRIPTION: [
-                Storage_Account(
+            AZURE_SUBSCRIPTION: [
+                Account(
                     id=storage_account_id,
                     name=storage_account_name,
+                    resouce_group_name=None,
                     enable_https_traffic_only=False,
                     infrastructure_encryption=False,
                     allow_blob_public_access=None,
                     network_rule_set=NetworkRuleSet(default_action="Deny"),
                     encryption_type=None,
                     minimum_tls_version=None,
+                    key_expiration_period_in_days=None,
+                    private_endpoint_connections=None,
                 )
             ]
         }
@@ -97,8 +102,8 @@ def test_storage_storage_accounts_default_network_access_rule_denied(self):
             assert result[0].status == "PASS"
             assert (
                 result[0].status_extended
-                == f"Storage account {storage_account_name} from subscription {AZURE_SUSCRIPTION} has network access rule set to Deny."
+                == f"Storage account {storage_account_name} from subscription {AZURE_SUBSCRIPTION} has network access rule set to Deny."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == storage_account_name
             assert result[0].resource_id == storage_account_id
diff --git a/tests/providers/azure/services/storage/storage_ensure_azure_services_are_trusted_to_access_is_enabled/storage_ensure_azure_services_are_trusted_to_access_is_enabled_test.py b/tests/providers/azure/services/storage/storage_ensure_azure_services_are_trusted_to_access_is_enabled/storage_ensure_azure_services_are_trusted_to_access_is_enabled_test.py
index 983c5e9c049..6ba9b248938 100644
--- a/tests/providers/azure/services/storage/storage_ensure_azure_services_are_trusted_to_access_is_enabled/storage_ensure_azure_services_are_trusted_to_access_is_enabled_test.py
+++ b/tests/providers/azure/services/storage/storage_ensure_azure_services_are_trusted_to_access_is_enabled/storage_ensure_azure_services_are_trusted_to_access_is_enabled_test.py
@@ -3,9 +3,8 @@
 
 from azure.mgmt.storage.v2022_09_01.models import NetworkRuleSet
 
-from prowler.providers.azure.services.storage.storage_service import Storage_Account
-
-AZURE_SUSCRIPTION = str(uuid4())
+from prowler.providers.azure.services.storage.storage_service import Account
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
 
 
 class Test_storage_ensure_azure_services_are_trusted_to_access_is_enabled:
@@ -30,16 +29,19 @@ def test_storage_storage_accounts_azure_services_are_not_trusted_to_access(self)
         storage_account_name = "Test Storage Account"
         storage_client = mock.MagicMock
         storage_client.storage_accounts = {
-            AZURE_SUSCRIPTION: [
-                Storage_Account(
+            AZURE_SUBSCRIPTION: [
+                Account(
                     id=storage_account_id,
                     name=storage_account_name,
+                    resouce_group_name=None,
                     enable_https_traffic_only=False,
                     infrastructure_encryption=False,
                     allow_blob_public_access=None,
                     network_rule_set=NetworkRuleSet(bypass=[None]),
                     encryption_type=None,
                     minimum_tls_version=None,
+                    key_expiration_period_in_days=None,
+                    private_endpoint_connections=None,
                 )
             ]
         }
@@ -58,9 +60,9 @@ def test_storage_storage_accounts_azure_services_are_not_trusted_to_access(self)
             assert result[0].status == "FAIL"
             assert (
                 result[0].status_extended
-                == f"Storage account {storage_account_name} from subscription {AZURE_SUSCRIPTION} does not allow trusted Microsoft services to access this storage account."
+                == f"Storage account {storage_account_name} from subscription {AZURE_SUBSCRIPTION} does not allow trusted Microsoft services to access this storage account."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == storage_account_name
             assert result[0].resource_id == storage_account_id
 
@@ -69,16 +71,19 @@ def test_storage_storage_accounts_azure_services_are_trusted_to_access(self):
         storage_account_name = "Test Storage Account"
         storage_client = mock.MagicMock
         storage_client.storage_accounts = {
-            AZURE_SUSCRIPTION: [
-                Storage_Account(
+            AZURE_SUBSCRIPTION: [
+                Account(
                     id=storage_account_id,
                     name=storage_account_name,
+                    resouce_group_name=None,
                     enable_https_traffic_only=False,
                     infrastructure_encryption=False,
                     allow_blob_public_access=None,
                     network_rule_set=NetworkRuleSet(bypass=["AzureServices"]),
                     encryption_type=None,
                     minimum_tls_version=None,
+                    key_expiration_period_in_days=None,
+                    private_endpoint_connections=None,
                 )
             ]
         }
@@ -97,8 +102,8 @@ def test_storage_storage_accounts_azure_services_are_trusted_to_access(self):
             assert result[0].status == "PASS"
             assert (
                 result[0].status_extended
-                == f"Storage account {storage_account_name} from subscription {AZURE_SUSCRIPTION} allows trusted Microsoft services to access this storage account."
+                == f"Storage account {storage_account_name} from subscription {AZURE_SUBSCRIPTION} allows trusted Microsoft services to access this storage account."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == storage_account_name
             assert result[0].resource_id == storage_account_id
diff --git a/tests/providers/azure/services/storage/storage_ensure_encryption_with_customer_managed_keys/storage_ensure_encryption_with_customer_managed_keys_test.py b/tests/providers/azure/services/storage/storage_ensure_encryption_with_customer_managed_keys/storage_ensure_encryption_with_customer_managed_keys_test.py
index 3f0deedef19..550ed3d6e6a 100644
--- a/tests/providers/azure/services/storage/storage_ensure_encryption_with_customer_managed_keys/storage_ensure_encryption_with_customer_managed_keys_test.py
+++ b/tests/providers/azure/services/storage/storage_ensure_encryption_with_customer_managed_keys/storage_ensure_encryption_with_customer_managed_keys_test.py
@@ -1,9 +1,8 @@
 from unittest import mock
 from uuid import uuid4
 
-from prowler.providers.azure.services.storage.storage_service import Storage_Account
-
-AZURE_SUSCRIPTION = str(uuid4())
+from prowler.providers.azure.services.storage.storage_service import Account
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
 
 
 class Test_storage_ensure_encryption_with_customer_managed_keys:
@@ -28,16 +27,19 @@ def test_storage_storage_accounts_encryption_without_customer_managed_keys(self)
         storage_account_name = "Test Storage Account"
         storage_client = mock.MagicMock
         storage_client.storage_accounts = {
-            AZURE_SUSCRIPTION: [
-                Storage_Account(
+            AZURE_SUBSCRIPTION: [
+                Account(
                     id=storage_account_id,
                     name=storage_account_name,
+                    resouce_group_name=None,
                     enable_https_traffic_only=False,
                     infrastructure_encryption=False,
                     allow_blob_public_access=None,
                     network_rule_set=None,
                     encryption_type="None",
                     minimum_tls_version=None,
+                    key_expiration_period_in_days=None,
+                    private_endpoint_connections=None,
                 )
             ]
         }
@@ -56,9 +58,9 @@ def test_storage_storage_accounts_encryption_without_customer_managed_keys(self)
             assert result[0].status == "FAIL"
             assert (
                 result[0].status_extended
-                == f"Storage account {storage_account_name} from subscription {AZURE_SUSCRIPTION} does not encrypt with CMKs."
+                == f"Storage account {storage_account_name} from subscription {AZURE_SUBSCRIPTION} does not encrypt with CMKs."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == storage_account_name
             assert result[0].resource_id == storage_account_id
 
@@ -67,16 +69,19 @@ def test_storage_storage_accounts_encryption_with_customer_managed_keys(self):
         storage_account_name = "Test Storage Account"
         storage_client = mock.MagicMock
         storage_client.storage_accounts = {
-            AZURE_SUSCRIPTION: [
-                Storage_Account(
+            AZURE_SUBSCRIPTION: [
+                Account(
                     id=storage_account_id,
                     name=storage_account_name,
+                    resouce_group_name=None,
                     enable_https_traffic_only=False,
                     infrastructure_encryption=False,
                     allow_blob_public_access=None,
                     network_rule_set=None,
                     encryption_type="Microsoft.Keyvault",
                     minimum_tls_version=None,
+                    key_expiration_period_in_days=None,
+                    private_endpoint_connections=None,
                 )
             ]
         }
@@ -95,8 +100,8 @@ def test_storage_storage_accounts_encryption_with_customer_managed_keys(self):
             assert result[0].status == "PASS"
             assert (
                 result[0].status_extended
-                == f"Storage account {storage_account_name} from subscription {AZURE_SUSCRIPTION} encrypts with CMKs."
+                == f"Storage account {storage_account_name} from subscription {AZURE_SUBSCRIPTION} encrypts with CMKs."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == storage_account_name
             assert result[0].resource_id == storage_account_id
diff --git a/tests/providers/azure/services/storage/storage_ensure_minimum_tls_version_12/storage_ensure_minimum_tls_version_12_test.py b/tests/providers/azure/services/storage/storage_ensure_minimum_tls_version_12/storage_ensure_minimum_tls_version_12_test.py
index ac35f9412cc..b0174c0989d 100644
--- a/tests/providers/azure/services/storage/storage_ensure_minimum_tls_version_12/storage_ensure_minimum_tls_version_12_test.py
+++ b/tests/providers/azure/services/storage/storage_ensure_minimum_tls_version_12/storage_ensure_minimum_tls_version_12_test.py
@@ -1,9 +1,8 @@
 from unittest import mock
 from uuid import uuid4
 
-from prowler.providers.azure.services.storage.storage_service import Storage_Account
-
-AZURE_SUSCRIPTION = str(uuid4())
+from prowler.providers.azure.services.storage.storage_service import Account
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
 
 
 class Test_storage_ensure_minimum_tls_version_12:
@@ -28,16 +27,19 @@ def test_storage_storage_accounts_tls_not_1_2(self):
         storage_account_name = "Test Storage Account"
         storage_client = mock.MagicMock
         storage_client.storage_accounts = {
-            AZURE_SUSCRIPTION: [
-                Storage_Account(
+            AZURE_SUBSCRIPTION: [
+                Account(
                     id=storage_account_id,
                     name=storage_account_name,
+                    resouce_group_name=None,
                     enable_https_traffic_only=False,
                     infrastructure_encryption=False,
                     allow_blob_public_access=None,
                     network_rule_set=None,
                     encryption_type="None",
                     minimum_tls_version="TLS1_1",
+                    key_expiration_period_in_days=None,
+                    private_endpoint_connections=None,
                 )
             ]
         }
@@ -56,9 +58,9 @@ def test_storage_storage_accounts_tls_not_1_2(self):
             assert result[0].status == "FAIL"
             assert (
                 result[0].status_extended
-                == f"Storage account {storage_account_name} from subscription {AZURE_SUSCRIPTION} does not have TLS version set to 1.2."
+                == f"Storage account {storage_account_name} from subscription {AZURE_SUBSCRIPTION} does not have TLS version set to 1.2."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == storage_account_name
             assert result[0].resource_id == storage_account_id
 
@@ -67,16 +69,19 @@ def test_storage_storage_accounts_tls_1_2(self):
         storage_account_name = "Test Storage Account"
         storage_client = mock.MagicMock
         storage_client.storage_accounts = {
-            AZURE_SUSCRIPTION: [
-                Storage_Account(
+            AZURE_SUBSCRIPTION: [
+                Account(
                     id=storage_account_id,
                     name=storage_account_name,
+                    resouce_group_name=None,
                     enable_https_traffic_only=False,
                     infrastructure_encryption=False,
                     allow_blob_public_access=None,
                     network_rule_set=None,
                     encryption_type="None",
                     minimum_tls_version="TLS1_2",
+                    key_expiration_period_in_days=None,
+                    private_endpoint_connections=None,
                 )
             ]
         }
@@ -95,8 +100,8 @@ def test_storage_storage_accounts_tls_1_2(self):
             assert result[0].status == "PASS"
             assert (
                 result[0].status_extended
-                == f"Storage account {storage_account_name} from subscription {AZURE_SUSCRIPTION} has TLS version set to 1.2."
+                == f"Storage account {storage_account_name} from subscription {AZURE_SUBSCRIPTION} has TLS version set to 1.2."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == storage_account_name
             assert result[0].resource_id == storage_account_id
diff --git a/tests/providers/azure/services/storage/storage_ensure_private_endpoints_in_storage_accounts/storage_ensure_private_endpoints_in_storage_accounts_test.py b/tests/providers/azure/services/storage/storage_ensure_private_endpoints_in_storage_accounts/storage_ensure_private_endpoints_in_storage_accounts_test.py
new file mode 100644
index 00000000000..5ba451a5310
--- /dev/null
+++ b/tests/providers/azure/services/storage/storage_ensure_private_endpoints_in_storage_accounts/storage_ensure_private_endpoints_in_storage_accounts_test.py
@@ -0,0 +1,113 @@
+from unittest import mock
+from uuid import uuid4
+
+from azure.mgmt.storage.v2023_01_01.models import PrivateEndpointConnection
+
+from prowler.providers.azure.services.storage.storage_service import Account
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_storage_ensure_private_endpoints_in_storage_accounts:
+    def test_storage_ensure_private_endpoints_in_storage_accounts(self):
+        storage_client = mock.MagicMock
+        storage_client.storage_accounts = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.storage.storage_ensure_private_endpoints_in_storage_accounts.storage_ensure_private_endpoints_in_storage_accounts.storage_client",
+            new=storage_client,
+        ):
+            from prowler.providers.azure.services.storage.storage_ensure_private_endpoints_in_storage_accounts.storage_ensure_private_endpoints_in_storage_accounts import (
+                storage_ensure_private_endpoints_in_storage_accounts,
+            )
+
+            check = storage_ensure_private_endpoints_in_storage_accounts()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_storage_ensure_private_endpoints_in_storage_accounts_no_endpoints(
+        self,
+    ):
+        storage_account_id = str(uuid4())
+        storage_account_name = "Test Storage Account"
+        storage_client = mock.MagicMock
+        storage_client.storage_accounts = {
+            AZURE_SUBSCRIPTION: [
+                Account(
+                    id=storage_account_id,
+                    name=storage_account_name,
+                    resouce_group_name=None,
+                    enable_https_traffic_only=False,
+                    infrastructure_encryption=False,
+                    allow_blob_public_access=None,
+                    network_rule_set=None,
+                    encryption_type="None",
+                    minimum_tls_version=None,
+                    key_expiration_period_in_days=None,
+                    private_endpoint_connections=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.storage.storage_ensure_private_endpoints_in_storage_accounts.storage_ensure_private_endpoints_in_storage_accounts.storage_client",
+            new=storage_client,
+        ):
+            from prowler.providers.azure.services.storage.storage_ensure_private_endpoints_in_storage_accounts.storage_ensure_private_endpoints_in_storage_accounts import (
+                storage_ensure_private_endpoints_in_storage_accounts,
+            )
+
+            check = storage_ensure_private_endpoints_in_storage_accounts()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Storage account {storage_account_name} from subscription {AZURE_SUBSCRIPTION} does not have private endpoint connections."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == storage_account_name
+            assert result[0].resource_id == storage_account_id
+
+    def test_storage_ensure_private_endpoints_in_storage_accounts_has_endpoints(
+        self,
+    ):
+        storage_account_id = str(uuid4())
+        storage_account_name = "Test Storage Account"
+        storage_client = mock.MagicMock
+        storage_client.storage_accounts = {
+            AZURE_SUBSCRIPTION: [
+                Account(
+                    id=storage_account_id,
+                    name=storage_account_name,
+                    resouce_group_name=None,
+                    enable_https_traffic_only=False,
+                    infrastructure_encryption=False,
+                    allow_blob_public_access=None,
+                    network_rule_set=None,
+                    encryption_type="None",
+                    minimum_tls_version=None,
+                    key_expiration_period_in_days=None,
+                    private_endpoint_connections=PrivateEndpointConnection(),
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.storage.storage_ensure_private_endpoints_in_storage_accounts.storage_ensure_private_endpoints_in_storage_accounts.storage_client",
+            new=storage_client,
+        ):
+            from prowler.providers.azure.services.storage.storage_ensure_private_endpoints_in_storage_accounts.storage_ensure_private_endpoints_in_storage_accounts import (
+                storage_ensure_private_endpoints_in_storage_accounts,
+            )
+
+            check = storage_ensure_private_endpoints_in_storage_accounts()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Storage account {storage_account_name} from subscription {AZURE_SUBSCRIPTION} has private endpoint connections."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == storage_account_name
+            assert result[0].resource_id == storage_account_id
diff --git a/tests/providers/azure/services/storage/storage_ensure_soft_delete_is_enabled/storage_ensure_soft_delete_is_enabled_test.py b/tests/providers/azure/services/storage/storage_ensure_soft_delete_is_enabled/storage_ensure_soft_delete_is_enabled_test.py
new file mode 100644
index 00000000000..c7d1d624d04
--- /dev/null
+++ b/tests/providers/azure/services/storage/storage_ensure_soft_delete_is_enabled/storage_ensure_soft_delete_is_enabled_test.py
@@ -0,0 +1,168 @@
+from unittest import mock
+from uuid import uuid4
+
+from azure.mgmt.storage.v2023_01_01.models import DeleteRetentionPolicy
+
+from prowler.providers.azure.services.storage.storage_service import (
+    Account,
+    BlobProperties,
+)
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_storage_ensure_soft_delete_is_enabled:
+    def test_storage_no_storage_accounts(self):
+        storage_client = mock.MagicMock
+        storage_client.storage_accounts = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.storage.storage_ensure_soft_delete_is_enabled.storage_ensure_soft_delete_is_enabled.storage_client",
+            new=storage_client,
+        ):
+            from prowler.providers.azure.services.storage.storage_ensure_soft_delete_is_enabled.storage_ensure_soft_delete_is_enabled import (
+                storage_ensure_soft_delete_is_enabled,
+            )
+
+            check = storage_ensure_soft_delete_is_enabled()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_storage_no_blob_properties(self):
+        storage_account_id = str(uuid4())
+        storage_account_name = "Test Storage Account"
+        storage_client = mock.MagicMock
+        storage_account_blob_properties = None
+        storage_client.storage_accounts = {
+            AZURE_SUBSCRIPTION: [
+                Account(
+                    id=storage_account_id,
+                    name=storage_account_name,
+                    resouce_group_name=None,
+                    enable_https_traffic_only=False,
+                    infrastructure_encryption=False,
+                    allow_blob_public_access=None,
+                    network_rule_set=None,
+                    encryption_type="None",
+                    minimum_tls_version=None,
+                    key_expiration_period_in_days=None,
+                    private_endpoint_connections=None,
+                    blob_properties=storage_account_blob_properties,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.storage.storage_ensure_soft_delete_is_enabled.storage_ensure_soft_delete_is_enabled.storage_client",
+            new=storage_client,
+        ):
+            from prowler.providers.azure.services.storage.storage_ensure_soft_delete_is_enabled.storage_ensure_soft_delete_is_enabled import (
+                storage_ensure_soft_delete_is_enabled,
+            )
+
+            check = storage_ensure_soft_delete_is_enabled()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_storage_ensure_soft_delete_is_disabled(
+        self,
+    ):
+        storage_account_id = str(uuid4())
+        storage_account_name = "Test Storage Account"
+        storage_client = mock.MagicMock
+        storage_account_blob_properties = BlobProperties(
+            id=None,
+            name=None,
+            type=None,
+            default_service_version=None,
+            container_delete_retention_policy=DeleteRetentionPolicy(enabled=False),
+        )
+        storage_client.storage_accounts = {
+            AZURE_SUBSCRIPTION: [
+                Account(
+                    id=storage_account_id,
+                    name=storage_account_name,
+                    resouce_group_name=None,
+                    enable_https_traffic_only=False,
+                    infrastructure_encryption=False,
+                    allow_blob_public_access=None,
+                    network_rule_set=None,
+                    encryption_type="None",
+                    minimum_tls_version=None,
+                    key_expiration_period_in_days=None,
+                    private_endpoint_connections=None,
+                    blob_properties=storage_account_blob_properties,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.storage.storage_ensure_soft_delete_is_enabled.storage_ensure_soft_delete_is_enabled.storage_client",
+            new=storage_client,
+        ):
+            from prowler.providers.azure.services.storage.storage_ensure_soft_delete_is_enabled.storage_ensure_soft_delete_is_enabled import (
+                storage_ensure_soft_delete_is_enabled,
+            )
+
+            check = storage_ensure_soft_delete_is_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Storage account {storage_account_name} from subscription {AZURE_SUBSCRIPTION} has soft delete disabled."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == storage_account_name
+            assert result[0].resource_id == storage_account_id
+
+    def test_storage_ensure_soft_delete_is_enabled(
+        self,
+    ):
+        storage_account_id = str(uuid4())
+        storage_account_name = "Test Storage Account"
+        storage_client = mock.MagicMock
+        storage_account_blob_properties = BlobProperties(
+            id=None,
+            name=None,
+            type=None,
+            default_service_version=None,
+            container_delete_retention_policy=DeleteRetentionPolicy(enabled=True),
+        )
+        storage_client.storage_accounts = {
+            AZURE_SUBSCRIPTION: [
+                Account(
+                    id=storage_account_id,
+                    name=storage_account_name,
+                    resouce_group_name=None,
+                    enable_https_traffic_only=False,
+                    infrastructure_encryption=False,
+                    allow_blob_public_access=None,
+                    network_rule_set=None,
+                    encryption_type="None",
+                    minimum_tls_version=None,
+                    key_expiration_period_in_days=None,
+                    private_endpoint_connections=None,
+                    blob_properties=storage_account_blob_properties,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.storage.storage_ensure_soft_delete_is_enabled.storage_ensure_soft_delete_is_enabled.storage_client",
+            new=storage_client,
+        ):
+            from prowler.providers.azure.services.storage.storage_ensure_soft_delete_is_enabled.storage_ensure_soft_delete_is_enabled import (
+                storage_ensure_soft_delete_is_enabled,
+            )
+
+            check = storage_ensure_soft_delete_is_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Storage account {storage_account_name} from subscription {AZURE_SUBSCRIPTION} has soft delete enabled."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == storage_account_name
+            assert result[0].resource_id == storage_account_id
diff --git a/tests/providers/azure/services/storage/storage_infrastructure_encryption_is_enabled/storage_infrastructure_encryption_is_enabled_test.py b/tests/providers/azure/services/storage/storage_infrastructure_encryption_is_enabled/storage_infrastructure_encryption_is_enabled_test.py
index d12aabb1926..5815229f397 100644
--- a/tests/providers/azure/services/storage/storage_infrastructure_encryption_is_enabled/storage_infrastructure_encryption_is_enabled_test.py
+++ b/tests/providers/azure/services/storage/storage_infrastructure_encryption_is_enabled/storage_infrastructure_encryption_is_enabled_test.py
@@ -1,9 +1,8 @@
 from unittest import mock
 from uuid import uuid4
 
-from prowler.providers.azure.services.storage.storage_service import Storage_Account
-
-AZURE_SUSCRIPTION = str(uuid4())
+from prowler.providers.azure.services.storage.storage_service import Account
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
 
 
 class Test_storage_infrastructure_encryption_is_enabled:
@@ -28,16 +27,19 @@ def test_storage_storage_accounts_infrastructure_encryption_disabled(self):
         storage_account_name = "Test Storage Account"
         storage_client = mock.MagicMock
         storage_client.storage_accounts = {
-            AZURE_SUSCRIPTION: [
-                Storage_Account(
+            AZURE_SUBSCRIPTION: [
+                Account(
                     id=storage_account_id,
                     name=storage_account_name,
+                    resouce_group_name=None,
                     enable_https_traffic_only=False,
                     infrastructure_encryption=False,
                     allow_blob_public_access=None,
                     network_rule_set=None,
                     encryption_type="None",
                     minimum_tls_version="TLS1_1",
+                    key_expiration_period_in_days=None,
+                    private_endpoint_connections=None,
                 )
             ]
         }
@@ -56,9 +58,9 @@ def test_storage_storage_accounts_infrastructure_encryption_disabled(self):
             assert result[0].status == "FAIL"
             assert (
                 result[0].status_extended
-                == f"Storage account {storage_account_name} from subscription {AZURE_SUSCRIPTION} has infrastructure encryption disabled."
+                == f"Storage account {storage_account_name} from subscription {AZURE_SUBSCRIPTION} has infrastructure encryption disabled."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == storage_account_name
             assert result[0].resource_id == storage_account_id
 
@@ -67,16 +69,19 @@ def test_storage_storage_accounts_infrastructure_encryption_enabled(self):
         storage_account_name = "Test Storage Account"
         storage_client = mock.MagicMock
         storage_client.storage_accounts = {
-            AZURE_SUSCRIPTION: [
-                Storage_Account(
+            AZURE_SUBSCRIPTION: [
+                Account(
                     id=storage_account_id,
                     name=storage_account_name,
+                    resouce_group_name=None,
                     enable_https_traffic_only=False,
                     infrastructure_encryption=True,
                     allow_blob_public_access=None,
                     network_rule_set=None,
                     encryption_type="None",
                     minimum_tls_version="TLS1_1",
+                    key_expiration_period_in_days=None,
+                    private_endpoint_connections=None,
                 )
             ]
         }
@@ -95,8 +100,8 @@ def test_storage_storage_accounts_infrastructure_encryption_enabled(self):
             assert result[0].status == "PASS"
             assert (
                 result[0].status_extended
-                == f"Storage account {storage_account_name} from subscription {AZURE_SUSCRIPTION} has infrastructure encryption enabled."
+                == f"Storage account {storage_account_name} from subscription {AZURE_SUBSCRIPTION} has infrastructure encryption enabled."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == storage_account_name
             assert result[0].resource_id == storage_account_id
diff --git a/tests/providers/azure/services/storage/storage_key_rotation_90_days/storage_key_rotation_90_days_test.py b/tests/providers/azure/services/storage/storage_key_rotation_90_days/storage_key_rotation_90_days_test.py
new file mode 100644
index 00000000000..1a27a1de222
--- /dev/null
+++ b/tests/providers/azure/services/storage/storage_key_rotation_90_days/storage_key_rotation_90_days_test.py
@@ -0,0 +1,151 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.storage.storage_service import Account
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_storage_key_rotation_90_dayss:
+    def test_storage_no_storage_accounts(self):
+        storage_client = mock.MagicMock
+        storage_client.storage_accounts = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.storage.storage_key_rotation_90_days.storage_key_rotation_90_days.storage_client",
+            new=storage_client,
+        ):
+            from prowler.providers.azure.services.storage.storage_key_rotation_90_days.storage_key_rotation_90_days import (
+                storage_key_rotation_90_days,
+            )
+
+            check = storage_key_rotation_90_days()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_storage_storage_key_rotation_91_days(self):
+        storage_account_id = str(uuid4())
+        storage_account_name = "Test Storage Account"
+        expiration_days = 91
+        storage_client = mock.MagicMock
+        storage_client.storage_accounts = {
+            AZURE_SUBSCRIPTION: [
+                Account(
+                    id=storage_account_id,
+                    name=storage_account_name,
+                    resouce_group_name=None,
+                    enable_https_traffic_only=False,
+                    infrastructure_encryption=False,
+                    allow_blob_public_access=None,
+                    network_rule_set=None,
+                    encryption_type="None",
+                    minimum_tls_version="TLS1_1",
+                    key_expiration_period_in_days=expiration_days,
+                    private_endpoint_connections=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.storage.storage_key_rotation_90_days.storage_key_rotation_90_days.storage_client",
+            new=storage_client,
+        ):
+            from prowler.providers.azure.services.storage.storage_key_rotation_90_days.storage_key_rotation_90_days import (
+                storage_key_rotation_90_days,
+            )
+
+            check = storage_key_rotation_90_days()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Storage account {storage_account_name} from subscription {AZURE_SUBSCRIPTION} has an invalid key expiration period of {expiration_days} days."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == storage_account_name
+            assert result[0].resource_id == storage_account_id
+
+    def test_storage_storage_key_rotation_90_days(self):
+        storage_account_id = str(uuid4())
+        storage_account_name = "Test Storage Account"
+        expiration_days = 90
+        storage_client = mock.MagicMock
+        storage_client.storage_accounts = {
+            AZURE_SUBSCRIPTION: [
+                Account(
+                    id=storage_account_id,
+                    name=storage_account_name,
+                    resouce_group_name=None,
+                    enable_https_traffic_only=False,
+                    infrastructure_encryption=False,
+                    allow_blob_public_access=None,
+                    network_rule_set=None,
+                    encryption_type="None",
+                    minimum_tls_version="TLS1_2",
+                    key_expiration_period_in_days=expiration_days,
+                    private_endpoint_connections=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.storage.storage_key_rotation_90_days.storage_key_rotation_90_days.storage_client",
+            new=storage_client,
+        ):
+            from prowler.providers.azure.services.storage.storage_key_rotation_90_days.storage_key_rotation_90_days import (
+                storage_key_rotation_90_days,
+            )
+
+            check = storage_key_rotation_90_days()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"Storage account {storage_account_name} from subscription {AZURE_SUBSCRIPTION} has a key expiration period of {expiration_days} days."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == storage_account_name
+            assert result[0].resource_id == storage_account_id
+
+    def test_storage_storage_no_key_rotation(self):
+        storage_account_id = str(uuid4())
+        storage_account_name = "Test Storage Account"
+        storage_client = mock.MagicMock
+        storage_client.storage_accounts = {
+            AZURE_SUBSCRIPTION: [
+                Account(
+                    id=storage_account_id,
+                    name=storage_account_name,
+                    resouce_group_name=None,
+                    enable_https_traffic_only=False,
+                    infrastructure_encryption=False,
+                    allow_blob_public_access=None,
+                    network_rule_set=None,
+                    encryption_type="None",
+                    minimum_tls_version="TLS1_2",
+                    key_expiration_period_in_days=None,
+                    private_endpoint_connections=None,
+                )
+            ]
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.storage.storage_key_rotation_90_days.storage_key_rotation_90_days.storage_client",
+            new=storage_client,
+        ):
+            from prowler.providers.azure.services.storage.storage_key_rotation_90_days.storage_key_rotation_90_days import (
+                storage_key_rotation_90_days,
+            )
+
+            check = storage_key_rotation_90_days()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"Storage account {storage_account_name} from subscription {AZURE_SUBSCRIPTION} has no key expiration period set."
+            )
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == storage_account_name
+            assert result[0].resource_id == storage_account_id
diff --git a/tests/providers/azure/services/storage/storage_secure_transfer_required_is_enabled/storage_secure_transfer_required_is_enabled_test.py b/tests/providers/azure/services/storage/storage_secure_transfer_required_is_enabled/storage_secure_transfer_required_is_enabled_test.py
index 663ee684018..4ada6b29858 100644
--- a/tests/providers/azure/services/storage/storage_secure_transfer_required_is_enabled/storage_secure_transfer_required_is_enabled_test.py
+++ b/tests/providers/azure/services/storage/storage_secure_transfer_required_is_enabled/storage_secure_transfer_required_is_enabled_test.py
@@ -1,9 +1,8 @@
 from unittest import mock
 from uuid import uuid4
 
-from prowler.providers.azure.services.storage.storage_service import Storage_Account
-
-AZURE_SUSCRIPTION = str(uuid4())
+from prowler.providers.azure.services.storage.storage_service import Account
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
 
 
 class Test_storage_secure_transfer_required_is_enabled:
@@ -28,16 +27,19 @@ def test_storage_storage_accounts_secure_transfer_required_disabled(self):
         storage_account_name = "Test Storage Account"
         storage_client = mock.MagicMock
         storage_client.storage_accounts = {
-            AZURE_SUSCRIPTION: [
-                Storage_Account(
+            AZURE_SUBSCRIPTION: [
+                Account(
                     id=storage_account_id,
                     name=storage_account_name,
+                    resouce_group_name=None,
                     enable_https_traffic_only=False,
                     infrastructure_encryption=False,
                     allow_blob_public_access=None,
                     network_rule_set=None,
                     encryption_type="None",
                     minimum_tls_version="TLS1_1",
+                    key_expiration_period_in_days=None,
+                    private_endpoint_connections=None,
                 )
             ]
         }
@@ -56,9 +58,9 @@ def test_storage_storage_accounts_secure_transfer_required_disabled(self):
             assert result[0].status == "FAIL"
             assert (
                 result[0].status_extended
-                == f"Storage account {storage_account_name} from subscription {AZURE_SUSCRIPTION} has secure transfer required disabled."
+                == f"Storage account {storage_account_name} from subscription {AZURE_SUBSCRIPTION} has secure transfer required disabled."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == storage_account_name
             assert result[0].resource_id == storage_account_id
 
@@ -67,16 +69,19 @@ def test_storage_storage_accounts_secure_transfer_required_enabled(self):
         storage_account_name = "Test Storage Account"
         storage_client = mock.MagicMock
         storage_client.storage_accounts = {
-            AZURE_SUSCRIPTION: [
-                Storage_Account(
+            AZURE_SUBSCRIPTION: [
+                Account(
                     id=storage_account_id,
                     name=storage_account_name,
+                    resouce_group_name=None,
                     enable_https_traffic_only=True,
                     infrastructure_encryption=True,
                     allow_blob_public_access=None,
                     network_rule_set=None,
                     encryption_type="None",
                     minimum_tls_version="TLS1_1",
+                    key_expiration_period_in_days=None,
+                    private_endpoint_connections=None,
                 )
             ]
         }
@@ -95,8 +100,8 @@ def test_storage_storage_accounts_secure_transfer_required_enabled(self):
             assert result[0].status == "PASS"
             assert (
                 result[0].status_extended
-                == f"Storage account {storage_account_name} from subscription {AZURE_SUSCRIPTION} has secure transfer required enabled."
+                == f"Storage account {storage_account_name} from subscription {AZURE_SUBSCRIPTION} has secure transfer required enabled."
             )
-            assert result[0].subscription == AZURE_SUSCRIPTION
+            assert result[0].subscription == AZURE_SUBSCRIPTION
             assert result[0].resource_name == storage_account_name
             assert result[0].resource_id == storage_account_id
diff --git a/tests/providers/azure/services/storage/storage_service_test.py b/tests/providers/azure/services/storage/storage_service_test.py
new file mode 100644
index 00000000000..21eb1a53875
--- /dev/null
+++ b/tests/providers/azure/services/storage/storage_service_test.py
@@ -0,0 +1,132 @@
+from unittest.mock import patch
+
+from prowler.providers.azure.services.storage.storage_service import (
+    Account,
+    BlobProperties,
+    Storage,
+)
+from tests.providers.azure.azure_fixtures import (
+    AZURE_SUBSCRIPTION,
+    set_mocked_azure_audit_info,
+)
+
+
+def mock_storage_get_storage_accounts(_):
+    blob_properties = BlobProperties(
+        id="id",
+        name="name",
+        type="type",
+        default_service_version=None,
+        container_delete_retention_policy=None,
+    )
+    return {
+        AZURE_SUBSCRIPTION: [
+            Account(
+                id="id",
+                name="name",
+                resouce_group_name=None,
+                enable_https_traffic_only=False,
+                infrastructure_encryption=False,
+                allow_blob_public_access=None,
+                network_rule_set=None,
+                encryption_type="None",
+                minimum_tls_version=None,
+                key_expiration_period_in_days=None,
+                private_endpoint_connections=None,
+                blob_properties=blob_properties,
+            )
+        ]
+    }
+
+
+@patch(
+    "prowler.providers.azure.services.storage.storage_service.Storage.__get_storage_accounts__",
+    new=mock_storage_get_storage_accounts,
+)
+class Test_Storage_Service:
+    def test__get_client__(self):
+        storage = Storage(set_mocked_azure_audit_info())
+        assert (
+            storage.clients[AZURE_SUBSCRIPTION].__class__.__name__
+            == "StorageManagementClient"
+        )
+
+    def test__get_storage_accounts__(self):
+        storage = Storage(set_mocked_azure_audit_info())
+        assert (
+            storage.storage_accounts[AZURE_SUBSCRIPTION][0].__class__.__name__
+            == "Account"
+        )
+        assert storage.storage_accounts[AZURE_SUBSCRIPTION][0].id == "id"
+        assert storage.storage_accounts[AZURE_SUBSCRIPTION][0].name == "name"
+        assert (
+            storage.storage_accounts[AZURE_SUBSCRIPTION][0].resouce_group_name is None
+        )
+        assert (
+            storage.storage_accounts[AZURE_SUBSCRIPTION][0].enable_https_traffic_only
+            is False
+        )
+        assert (
+            storage.storage_accounts[AZURE_SUBSCRIPTION][0].infrastructure_encryption
+            is False
+        )
+        assert (
+            storage.storage_accounts[AZURE_SUBSCRIPTION][0].allow_blob_public_access
+            is None
+        )
+        assert storage.storage_accounts[AZURE_SUBSCRIPTION][0].network_rule_set is None
+        assert storage.storage_accounts[AZURE_SUBSCRIPTION][0].encryption_type == "None"
+        assert (
+            storage.storage_accounts[AZURE_SUBSCRIPTION][0].minimum_tls_version is None
+        )
+        assert (
+            storage.storage_accounts[AZURE_SUBSCRIPTION][
+                0
+            ].key_expiration_period_in_days
+            is None
+        )
+        assert (
+            storage.storage_accounts[AZURE_SUBSCRIPTION][0].private_endpoint_connections
+            is None
+        )
+        assert storage.storage_accounts[AZURE_SUBSCRIPTION][
+            0
+        ].blob_properties == BlobProperties(
+            id="id",
+            name="name",
+            type="type",
+            default_service_version=None,
+            container_delete_retention_policy=None,
+        )
+
+    def test__get_blob_properties__(self):
+        storage = Storage(set_mocked_azure_audit_info())
+        assert (
+            storage.storage_accounts[AZURE_SUBSCRIPTION][
+                0
+            ].blob_properties.__class__.__name__
+            == "BlobProperties"
+        )
+        assert (
+            storage.storage_accounts[AZURE_SUBSCRIPTION][0].blob_properties.id == "id"
+        )
+        assert (
+            storage.storage_accounts[AZURE_SUBSCRIPTION][0].blob_properties.name
+            == "name"
+        )
+        assert (
+            storage.storage_accounts[AZURE_SUBSCRIPTION][0].blob_properties.type
+            == "type"
+        )
+        assert (
+            storage.storage_accounts[AZURE_SUBSCRIPTION][
+                0
+            ].blob_properties.default_service_version
+            is None
+        )
+        assert (
+            storage.storage_accounts[AZURE_SUBSCRIPTION][
+                0
+            ].blob_properties.container_delete_retention_policy
+            is None
+        )
diff --git a/tests/providers/azure/services/vm/vm_ensure_attached_disks_encrypted_with_cmk/vm_ensure_attached_disks_encrypted_with_cmk_test.py b/tests/providers/azure/services/vm/vm_ensure_attached_disks_encrypted_with_cmk/vm_ensure_attached_disks_encrypted_with_cmk_test.py
new file mode 100644
index 00000000000..dc13bb03cc0
--- /dev/null
+++ b/tests/providers/azure/services/vm/vm_ensure_attached_disks_encrypted_with_cmk/vm_ensure_attached_disks_encrypted_with_cmk_test.py
@@ -0,0 +1,186 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.vm.vm_service import Disk
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_vm_ensure_attached_disks_encrypted_with_cmk:
+    def test_vm_no_subscriptions(self):
+        vm_client = mock.MagicMock
+        vm_client.disks = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.vm.vm_ensure_attached_disks_encrypted_with_cmk.vm_ensure_attached_disks_encrypted_with_cmk.vm_client",
+            new=vm_client,
+        ):
+            from prowler.providers.azure.services.vm.vm_ensure_attached_disks_encrypted_with_cmk.vm_ensure_attached_disks_encrypted_with_cmk import (
+                vm_ensure_attached_disks_encrypted_with_cmk,
+            )
+
+            check = vm_ensure_attached_disks_encrypted_with_cmk()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_vm_subscription_empty(self):
+        vm_client = mock.MagicMock
+        vm_client.disks = {AZURE_SUBSCRIPTION: {}}
+
+        with mock.patch(
+            "prowler.providers.azure.services.vm.vm_ensure_attached_disks_encrypted_with_cmk.vm_ensure_attached_disks_encrypted_with_cmk.vm_client",
+            new=vm_client,
+        ):
+            from prowler.providers.azure.services.vm.vm_ensure_attached_disks_encrypted_with_cmk.vm_ensure_attached_disks_encrypted_with_cmk import (
+                vm_ensure_attached_disks_encrypted_with_cmk,
+            )
+
+            check = vm_ensure_attached_disks_encrypted_with_cmk()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_vm_subscription_one_disk_attached_encrypt_pk(self):
+        disk_id = uuid4()
+        resource_id = uuid4()
+        vm_client = mock.MagicMock
+        vm_client.disks = {
+            AZURE_SUBSCRIPTION: {
+                disk_id: Disk(
+                    resource_id=resource_id,
+                    resource_name="test-disk",
+                    vms_attached=[uuid4()],
+                    encryption_type="EncryptionAtRestWithPlatformKey",
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.vm.vm_ensure_attached_disks_encrypted_with_cmk.vm_ensure_attached_disks_encrypted_with_cmk.vm_client",
+            new=vm_client,
+        ):
+            from prowler.providers.azure.services.vm.vm_ensure_attached_disks_encrypted_with_cmk.vm_ensure_attached_disks_encrypted_with_cmk import (
+                vm_ensure_attached_disks_encrypted_with_cmk,
+            )
+
+            check = vm_ensure_attached_disks_encrypted_with_cmk()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].status == "FAIL"
+            assert result[0].resource_id == resource_id
+            assert result[0].resource_name == "test-disk"
+            assert (
+                result[0].status_extended
+                == f"Disk '{disk_id}' is not encrypted with a customer-managed key in subscription {AZURE_SUBSCRIPTION}."
+            )
+
+    def test_vm_subscription_one_disk_attached_encrypt_cmk(self):
+        disk_id = uuid4()
+        resource_id = uuid4()
+        vm_client = mock.MagicMock
+        vm_client.disks = {
+            AZURE_SUBSCRIPTION: {
+                disk_id: Disk(
+                    resource_id=resource_id,
+                    resource_name="test-disk",
+                    vms_attached=[uuid4()],
+                    encryption_type="EncryptionAtRestWithCustomerKey",
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.vm.vm_ensure_attached_disks_encrypted_with_cmk.vm_ensure_attached_disks_encrypted_with_cmk.vm_client",
+            new=vm_client,
+        ):
+            from prowler.providers.azure.services.vm.vm_ensure_attached_disks_encrypted_with_cmk.vm_ensure_attached_disks_encrypted_with_cmk import (
+                vm_ensure_attached_disks_encrypted_with_cmk,
+            )
+
+            check = vm_ensure_attached_disks_encrypted_with_cmk()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].status == "PASS"
+            assert result[0].resource_id == resource_id
+            assert result[0].resource_name == "test-disk"
+            assert (
+                result[0].status_extended
+                == f"Disk '{disk_id}' is encrypted with a customer-managed key in subscription {AZURE_SUBSCRIPTION}."
+            )
+
+    def test_vm_subscription_two_disk_attached_encrypt_cmk_and_pk(self):
+        disk_id_1 = uuid4()
+        resource_id_1 = uuid4()
+        disk_id_2 = uuid4()
+        resource_id_2 = uuid4()
+        vm_client = mock.MagicMock
+        vm_client.disks = {
+            AZURE_SUBSCRIPTION: {
+                disk_id_1: Disk(
+                    resource_id=resource_id_1,
+                    resource_name="test-disk",
+                    vms_attached=[uuid4()],
+                    encryption_type="EncryptionAtRestWithPlatformKey",
+                ),
+                disk_id_2: Disk(
+                    resource_id=resource_id_2,
+                    resource_name="test-disk-2",
+                    vms_attached=[uuid4(), uuid4()],
+                    encryption_type="EncryptionAtRestWithCustomerKey",
+                ),
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.vm.vm_ensure_attached_disks_encrypted_with_cmk.vm_ensure_attached_disks_encrypted_with_cmk.vm_client",
+            new=vm_client,
+        ):
+            from prowler.providers.azure.services.vm.vm_ensure_attached_disks_encrypted_with_cmk.vm_ensure_attached_disks_encrypted_with_cmk import (
+                vm_ensure_attached_disks_encrypted_with_cmk,
+            )
+
+            check = vm_ensure_attached_disks_encrypted_with_cmk()
+            result = check.execute()
+            assert len(result) == 2
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].status == "FAIL"
+            assert result[0].resource_id == resource_id_1
+            assert result[0].resource_name == "test-disk"
+            assert (
+                result[0].status_extended
+                == f"Disk '{disk_id_1}' is not encrypted with a customer-managed key in subscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[1].status == "PASS"
+            assert result[1].resource_id == resource_id_2
+            assert result[1].resource_name == "test-disk-2"
+            assert (
+                result[1].status_extended
+                == f"Disk '{disk_id_2}' is encrypted with a customer-managed key in subscription {AZURE_SUBSCRIPTION}."
+            )
+
+    def test_vm_unattached_disk_encrypt_cmk(self):
+        disk_id = uuid4()
+        resource_id = uuid4()
+        vm_client = mock.MagicMock
+        vm_client.disks = {
+            AZURE_SUBSCRIPTION: {
+                disk_id: Disk(
+                    resource_id=resource_id,
+                    resource_name="test-disk",
+                    vms_attached=[],
+                    encryption_type="EncryptionAtRestWithCustomerKey",
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.vm.vm_ensure_attached_disks_encrypted_with_cmk.vm_ensure_attached_disks_encrypted_with_cmk.vm_client",
+            new=vm_client,
+        ):
+            from prowler.providers.azure.services.vm.vm_ensure_attached_disks_encrypted_with_cmk.vm_ensure_attached_disks_encrypted_with_cmk import (
+                vm_ensure_attached_disks_encrypted_with_cmk,
+            )
+
+            check = vm_ensure_attached_disks_encrypted_with_cmk()
+            result = check.execute()
+            assert len(result) == 0
diff --git a/tests/providers/azure/services/vm/vm_ensure_unattached_disks_encrypted_with_cmk/vm_ensure_unattached_disks_encrypted_with_cmk_test.py b/tests/providers/azure/services/vm/vm_ensure_unattached_disks_encrypted_with_cmk/vm_ensure_unattached_disks_encrypted_with_cmk_test.py
new file mode 100644
index 00000000000..b07ba8eedcb
--- /dev/null
+++ b/tests/providers/azure/services/vm/vm_ensure_unattached_disks_encrypted_with_cmk/vm_ensure_unattached_disks_encrypted_with_cmk_test.py
@@ -0,0 +1,186 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.vm.vm_service import Disk
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_vm_ensure_unattached_disks_encrypted_with_cmk:
+    def test_vm_no_subscriptions(self):
+        vm_client = mock.MagicMock
+        vm_client.disks = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.vm.vm_ensure_unattached_disks_encrypted_with_cmk.vm_ensure_unattached_disks_encrypted_with_cmk.vm_client",
+            new=vm_client,
+        ):
+            from prowler.providers.azure.services.vm.vm_ensure_unattached_disks_encrypted_with_cmk.vm_ensure_unattached_disks_encrypted_with_cmk import (
+                vm_ensure_unattached_disks_encrypted_with_cmk,
+            )
+
+            check = vm_ensure_unattached_disks_encrypted_with_cmk()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_vm_subscription_empty(self):
+        vm_client = mock.MagicMock
+        vm_client.disks = {AZURE_SUBSCRIPTION: {}}
+
+        with mock.patch(
+            "prowler.providers.azure.services.vm.vm_ensure_unattached_disks_encrypted_with_cmk.vm_ensure_unattached_disks_encrypted_with_cmk.vm_client",
+            new=vm_client,
+        ):
+            from prowler.providers.azure.services.vm.vm_ensure_unattached_disks_encrypted_with_cmk.vm_ensure_unattached_disks_encrypted_with_cmk import (
+                vm_ensure_unattached_disks_encrypted_with_cmk,
+            )
+
+            check = vm_ensure_unattached_disks_encrypted_with_cmk()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_vm_one_unattached_disk_encrypt_pk(self):
+        disk_id = uuid4()
+        resource_id = uuid4()
+        vm_client = mock.MagicMock
+        vm_client.disks = {
+            AZURE_SUBSCRIPTION: {
+                disk_id: Disk(
+                    resource_id=resource_id,
+                    resource_name="test-disk",
+                    vms_attached=[],
+                    encryption_type="EncryptionAtRestWithPlatformKey",
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.vm.vm_ensure_unattached_disks_encrypted_with_cmk.vm_ensure_unattached_disks_encrypted_with_cmk.vm_client",
+            new=vm_client,
+        ):
+            from prowler.providers.azure.services.vm.vm_ensure_unattached_disks_encrypted_with_cmk.vm_ensure_unattached_disks_encrypted_with_cmk import (
+                vm_ensure_unattached_disks_encrypted_with_cmk,
+            )
+
+            check = vm_ensure_unattached_disks_encrypted_with_cmk()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].status == "FAIL"
+            assert result[0].resource_id == resource_id
+            assert result[0].resource_name == "test-disk"
+            assert (
+                result[0].status_extended
+                == f"Disk '{disk_id}' is not encrypted with a customer-managed key in subscription {AZURE_SUBSCRIPTION}."
+            )
+
+    def test_vm_one_unattached_disk_encrypt_cmk(self):
+        disk_id = uuid4()
+        resource_id = uuid4()
+        vm_client = mock.MagicMock
+        vm_client.disks = {
+            AZURE_SUBSCRIPTION: {
+                disk_id: Disk(
+                    resource_id=resource_id,
+                    resource_name="test-disk",
+                    vms_attached=[],
+                    encryption_type="EncryptionAtRestWithCustomerKey",
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.vm.vm_ensure_unattached_disks_encrypted_with_cmk.vm_ensure_unattached_disks_encrypted_with_cmk.vm_client",
+            new=vm_client,
+        ):
+            from prowler.providers.azure.services.vm.vm_ensure_unattached_disks_encrypted_with_cmk.vm_ensure_unattached_disks_encrypted_with_cmk import (
+                vm_ensure_unattached_disks_encrypted_with_cmk,
+            )
+
+            check = vm_ensure_unattached_disks_encrypted_with_cmk()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].status == "PASS"
+            assert result[0].resource_id == resource_id
+            assert result[0].resource_name == "test-disk"
+            assert (
+                result[0].status_extended
+                == f"Disk '{disk_id}' is encrypted with a customer-managed key in subscription {AZURE_SUBSCRIPTION}."
+            )
+
+    def test_vm_subscription_two_unattached_disk_encrypt_cmk_and_pk(self):
+        disk_id_1 = uuid4()
+        resource_id_1 = uuid4()
+        disk_id_2 = uuid4()
+        resource_id_2 = uuid4()
+        vm_client = mock.MagicMock
+        vm_client.disks = {
+            AZURE_SUBSCRIPTION: {
+                disk_id_1: Disk(
+                    resource_id=resource_id_1,
+                    resource_name="test-disk",
+                    vms_attached=[],
+                    encryption_type="EncryptionAtRestWithPlatformKey",
+                ),
+                disk_id_2: Disk(
+                    resource_id=resource_id_2,
+                    resource_name="test-disk-2",
+                    vms_attached=[],
+                    encryption_type="EncryptionAtRestWithCustomerKey",
+                ),
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.vm.vm_ensure_unattached_disks_encrypted_with_cmk.vm_ensure_unattached_disks_encrypted_with_cmk.vm_client",
+            new=vm_client,
+        ):
+            from prowler.providers.azure.services.vm.vm_ensure_unattached_disks_encrypted_with_cmk.vm_ensure_unattached_disks_encrypted_with_cmk import (
+                vm_ensure_unattached_disks_encrypted_with_cmk,
+            )
+
+            check = vm_ensure_unattached_disks_encrypted_with_cmk()
+            result = check.execute()
+            assert len(result) == 2
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].status == "FAIL"
+            assert result[0].resource_id == resource_id_1
+            assert result[0].resource_name == "test-disk"
+            assert (
+                result[0].status_extended
+                == f"Disk '{disk_id_1}' is not encrypted with a customer-managed key in subscription {AZURE_SUBSCRIPTION}."
+            )
+            assert result[1].status == "PASS"
+            assert result[1].resource_id == resource_id_2
+            assert result[1].resource_name == "test-disk-2"
+            assert (
+                result[1].status_extended
+                == f"Disk '{disk_id_2}' is encrypted with a customer-managed key in subscription {AZURE_SUBSCRIPTION}."
+            )
+
+    def test_vm_attached_disk_encrypt_cmk(self):
+        disk_id = uuid4()
+        resource_id = uuid4()
+        vm_client = mock.MagicMock
+        vm_client.disks = {
+            AZURE_SUBSCRIPTION: {
+                disk_id: Disk(
+                    resource_id=resource_id,
+                    resource_name="test-disk",
+                    vms_attached=[uuid4()],
+                    encryption_type="EncryptionAtRestWithCustomerKey",
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.vm.vm_ensure_unattached_disks_encrypted_with_cmk.vm_ensure_unattached_disks_encrypted_with_cmk.vm_client",
+            new=vm_client,
+        ):
+            from prowler.providers.azure.services.vm.vm_ensure_unattached_disks_encrypted_with_cmk.vm_ensure_unattached_disks_encrypted_with_cmk import (
+                vm_ensure_unattached_disks_encrypted_with_cmk,
+            )
+
+            check = vm_ensure_unattached_disks_encrypted_with_cmk()
+            result = check.execute()
+            assert len(result) == 0
diff --git a/tests/providers/azure/services/vm/vm_ensure_using_managed_disks/vm_ensure_using_managed_disks_test.py b/tests/providers/azure/services/vm/vm_ensure_using_managed_disks/vm_ensure_using_managed_disks_test.py
new file mode 100644
index 00000000000..4c0c51b6b47
--- /dev/null
+++ b/tests/providers/azure/services/vm/vm_ensure_using_managed_disks/vm_ensure_using_managed_disks_test.py
@@ -0,0 +1,156 @@
+from unittest import mock
+from uuid import uuid4
+
+from prowler.providers.azure.services.vm.vm_service import VirtualMachine
+from tests.providers.azure.azure_fixtures import AZURE_SUBSCRIPTION
+
+
+class Test_vm_ensure_using_managed_disks:
+    def test_vm_no_subscriptions(self):
+        vm_client = mock.MagicMock
+        vm_client.virtual_machines = {}
+
+        with mock.patch(
+            "prowler.providers.azure.services.vm.vm_ensure_using_managed_disks.vm_ensure_using_managed_disks.vm_client",
+            new=vm_client,
+        ):
+            from prowler.providers.azure.services.vm.vm_ensure_using_managed_disks.vm_ensure_using_managed_disks import (
+                vm_ensure_using_managed_disks,
+            )
+
+            check = vm_ensure_using_managed_disks()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_vm_subscriptions(self):
+        vm_client = mock.MagicMock
+        vm_client.virtual_machines = {AZURE_SUBSCRIPTION: {}}
+
+        with mock.patch(
+            "prowler.providers.azure.services.vm.vm_ensure_using_managed_disks.vm_ensure_using_managed_disks.vm_client",
+            new=vm_client,
+        ):
+            from prowler.providers.azure.services.vm.vm_ensure_using_managed_disks.vm_ensure_using_managed_disks import (
+                vm_ensure_using_managed_disks,
+            )
+
+            check = vm_ensure_using_managed_disks()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_vm_ensure_using_managed_disks(self):
+        vm_id = str(uuid4())
+        vm_client = mock.MagicMock
+        vm_client.virtual_machines = {
+            AZURE_SUBSCRIPTION: {
+                vm_id: VirtualMachine(
+                    resource_id="/subscriptions/resource_id",
+                    resource_name="VMTest",
+                    storage_profile=mock.MagicMock(
+                        os_disk=mock.MagicMock(
+                            create_option="FromImage",
+                            managed_disk=mock.MagicMock(id="managed_disk_id"),
+                        ),
+                        data_disks=[],
+                    ),
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.vm.vm_ensure_using_managed_disks.vm_ensure_using_managed_disks.vm_client",
+            new=vm_client,
+        ):
+            from prowler.providers.azure.services.vm.vm_ensure_using_managed_disks.vm_ensure_using_managed_disks import (
+                vm_ensure_using_managed_disks,
+            )
+
+            check = vm_ensure_using_managed_disks()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "VMTest"
+            assert result[0].resource_id == vm_id
+            assert (
+                result[0].status_extended
+                == f"VM VMTest is using managed disks in subscription {AZURE_SUBSCRIPTION}"
+            )
+
+    def test_vm_using_not_managed_os_disk(self):
+        vm_id = str(uuid4())
+        vm_client = mock.MagicMock
+        vm_client.virtual_machines = {
+            AZURE_SUBSCRIPTION: {
+                vm_id: VirtualMachine(
+                    resource_id="/subscriptions/resource_id",
+                    resource_name="VMTest",
+                    storage_profile=mock.MagicMock(
+                        os_disk=mock.MagicMock(
+                            create_option="FromImage",
+                            managed_disk=None,
+                        ),
+                        data_disks=[],
+                    ),
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.vm.vm_ensure_using_managed_disks.vm_ensure_using_managed_disks.vm_client",
+            new=vm_client,
+        ):
+            from prowler.providers.azure.services.vm.vm_ensure_using_managed_disks.vm_ensure_using_managed_disks import (
+                vm_ensure_using_managed_disks,
+            )
+
+            check = vm_ensure_using_managed_disks()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "VMTest"
+            assert result[0].resource_id == vm_id
+            assert (
+                result[0].status_extended
+                == f"VM VMTest is not using managed disks in subscription {AZURE_SUBSCRIPTION}"
+            )
+
+    def test_vm_using_not_managed_data_disks(self):
+        vm_id = str(uuid4())
+        vm_client = mock.MagicMock
+        vm_client.virtual_machines = {
+            AZURE_SUBSCRIPTION: {
+                vm_id: VirtualMachine(
+                    resource_id="/subscriptions/resource_id",
+                    resource_name="VMTest",
+                    storage_profile=mock.MagicMock(
+                        os_disk=mock.MagicMock(
+                            create_option="FromImage",
+                            managed_disk=mock.MagicMock(id="managed_disk_id"),
+                        ),
+                        data_disks=[mock.MagicMock(managed_disk=None)],
+                    ),
+                )
+            }
+        }
+
+        with mock.patch(
+            "prowler.providers.azure.services.vm.vm_ensure_using_managed_disks.vm_ensure_using_managed_disks.vm_client",
+            new=vm_client,
+        ):
+            from prowler.providers.azure.services.vm.vm_ensure_using_managed_disks.vm_ensure_using_managed_disks import (
+                vm_ensure_using_managed_disks,
+            )
+
+            check = vm_ensure_using_managed_disks()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert result[0].subscription == AZURE_SUBSCRIPTION
+            assert result[0].resource_name == "VMTest"
+            assert result[0].resource_id == vm_id
+            assert (
+                result[0].status_extended
+                == f"VM VMTest is not using managed disks in subscription {AZURE_SUBSCRIPTION}"
+            )
diff --git a/tests/providers/azure/services/vm/vm_service_test.py b/tests/providers/azure/services/vm/vm_service_test.py
new file mode 100644
index 00000000000..d5d07e8775a
--- /dev/null
+++ b/tests/providers/azure/services/vm/vm_service_test.py
@@ -0,0 +1,104 @@
+from unittest.mock import patch
+
+from azure.mgmt.compute.models import ManagedDiskParameters, OSDisk, StorageProfile
+
+from prowler.providers.azure.services.vm.vm_service import (
+    Disk,
+    VirtualMachine,
+    VirtualMachines,
+)
+from tests.providers.azure.azure_fixtures import (
+    AZURE_SUBSCRIPTION,
+    set_mocked_azure_audit_info,
+)
+
+
+def mock_vm_get_virtual_machines(_):
+    return {
+        AZURE_SUBSCRIPTION: {
+            "vm_id-1": VirtualMachine(
+                resource_id="/subscriptions/resource_id",
+                resource_name="VMTest",
+                storage_profile=StorageProfile(
+                    os_disk=OSDisk(
+                        create_option="FromImage",
+                        managed_disk=ManagedDiskParameters(id="managed_disk_id"),
+                    ),
+                    data_disks=[],
+                ),
+            )
+        }
+    }
+
+
+def mock_vm_get_disks(_):
+    return {
+        AZURE_SUBSCRIPTION: {
+            "disk_id-1": Disk(
+                resource_id="disk_id-1",
+                resource_name="DiskTest",
+                vms_attached=["managed_by"],
+                encryption_type="EncryptionAtRestWithPlatformKey",
+            )
+        }
+    }
+
+
+@patch(
+    "prowler.providers.azure.services.vm.vm_service.VirtualMachines.__get_virtual_machines__",
+    new=mock_vm_get_virtual_machines,
+)
+@patch(
+    "prowler.providers.azure.services.vm.vm_service.VirtualMachines.__get_disks__",
+    new=mock_vm_get_disks,
+)
+class Test_AppInsights_Service:
+    def test__get_client__(self):
+        app_insights = VirtualMachines(set_mocked_azure_audit_info())
+        assert (
+            app_insights.clients[AZURE_SUBSCRIPTION].__class__.__name__
+            == "ComputeManagementClient"
+        )
+
+    def test__get_subscriptions__(self):
+        app_insights = VirtualMachines(set_mocked_azure_audit_info())
+        assert app_insights.subscriptions.__class__.__name__ == "dict"
+
+    def test__get_virtual_machines(self):
+        virtual_machines = VirtualMachines(set_mocked_azure_audit_info())
+        assert len(virtual_machines.virtual_machines) == 1
+        assert (
+            virtual_machines.virtual_machines[AZURE_SUBSCRIPTION]["vm_id-1"].resource_id
+            == "/subscriptions/resource_id"
+        )
+        assert (
+            virtual_machines.virtual_machines[AZURE_SUBSCRIPTION][
+                "vm_id-1"
+            ].resource_name
+            == "VMTest"
+        )
+        assert (
+            virtual_machines.virtual_machines[AZURE_SUBSCRIPTION][
+                "vm_id-1"
+            ].storage_profile.os_disk.managed_disk.id
+            == "managed_disk_id"
+        )
+        assert (
+            len(
+                virtual_machines.virtual_machines[AZURE_SUBSCRIPTION][
+                    "vm_id-1"
+                ].storage_profile.data_disks
+            )
+            == 0
+        )
+
+    def test__get_disks(self):
+        disks = VirtualMachines(set_mocked_azure_audit_info()).disks
+        assert len(disks) == 1
+        assert disks[AZURE_SUBSCRIPTION]["disk_id-1"].resource_id == "disk_id-1"
+        assert disks[AZURE_SUBSCRIPTION]["disk_id-1"].resource_name == "DiskTest"
+        assert disks[AZURE_SUBSCRIPTION]["disk_id-1"].vms_attached == ["managed_by"]
+        assert (
+            disks[AZURE_SUBSCRIPTION]["disk_id-1"].encryption_type
+            == "EncryptionAtRestWithPlatformKey"
+        )
diff --git a/tests/providers/common/audit_info_test.py b/tests/providers/common/audit_info_test.py
index fb9e7ba4d8c..2a252bde66d 100644
--- a/tests/providers/common/audit_info_test.py
+++ b/tests/providers/common/audit_info_test.py
@@ -3,7 +3,7 @@
 import pytest
 from boto3 import session
 from mock import patch
-from moto import mock_ec2, mock_resourcegroupstaggingapi
+from moto import mock_aws
 
 from prowler.config.config import default_config_file_path
 from prowler.providers.aws.lib.audit_info.models import AWS_Assume_Role, AWS_Audit_Info
@@ -36,6 +36,7 @@
     audit_resources=None,
     audit_config=None,
     azure_region_config=AzureRegionConfig(),
+    locations=None,
 )
 
 mock_set_audit_info = Audit_Info()
@@ -126,6 +127,7 @@ def set_mocked_audit_info(self):
                 session_duration=None,
                 external_id=None,
                 mfa_enabled=None,
+                role_session_name="ProwlerAssessmentSession",
             ),
             audited_regions=["eu-west-2", "eu-west-1"],
             organizations_metadata=None,
@@ -312,8 +314,7 @@ def test_set_audit_info_kubernetes(self):
         audit_info = set_provider_audit_info(provider, arguments)
         assert isinstance(audit_info, Kubernetes_Audit_Info)
 
-    @mock_resourcegroupstaggingapi
-    @mock_ec2
+    @mock_aws
     def test_get_tagged_resources(self):
         with patch(
             "prowler.providers.common.audit_info.current_audit_info",
@@ -361,6 +362,7 @@ def test_get_tagged_resources(self):
                 get_tagged_resources(["MY_TAG1=MY_VALUE1"], mock_audit_info)
             )
 
+    @mock_aws
     @patch(
         "prowler.providers.common.audit_info.validate_aws_credentials",
         new=mock_validate_credentials,
@@ -425,7 +427,7 @@ def test_set_audit_info_aws_session_duration_without_role(self):
 
             with pytest.raises(SystemExit) as exception:
                 _ = set_provider_audit_info(provider, arguments)
-            # assert exception == "To use -I/-T options -R option is needed"
+            # assert exception == "To use -I/--external-id, -T/--session-duration or --role-session-name options -R/--role option is needed"
             assert isinstance(exception, pytest.ExceptionInfo)
 
     def test_set_audit_info_external_id_without_role(self):
@@ -445,5 +447,5 @@ def test_set_audit_info_external_id_without_role(self):
 
             with pytest.raises(SystemExit) as exception:
                 _ = set_provider_audit_info(provider, arguments)
-            # assert exception == "To use -I/-T options -R option is needed"
+            # assert exception == "To use -I/--external-id, -T/--session-duration or --role-session-name options -R/--role option is needed"
             assert isinstance(exception, pytest.ExceptionInfo)
diff --git a/tests/providers/common/common_outputs_test.py b/tests/providers/common/common_outputs_test.py
index b06020fb3b2..70885aa8121 100644
--- a/tests/providers/common/common_outputs_test.py
+++ b/tests/providers/common/common_outputs_test.py
@@ -38,6 +38,7 @@ def set_mocked_azure_audit_info(self):
             audit_resources=None,
             audit_config=None,
             azure_region_config=AzureRegionConfig(),
+            locations=None,
         )
         return audit_info
 
@@ -112,6 +113,7 @@ def test_set_provider_output_options_aws(self):
         arguments.shodan = "test-api-key"
         arguments.only_logs = False
         arguments.unix_timestamp = False
+        arguments.send_sh_only_fails = True
 
         audit_info = self.set_mocked_aws_audit_info()
         mutelist_file = ""
@@ -121,6 +123,7 @@ def test_set_provider_output_options_aws(self):
         )
         assert isinstance(output_options, Aws_Output_Options)
         assert output_options.security_hub_enabled
+        assert output_options.send_sh_only_fails
         assert output_options.is_quiet
         assert output_options.output_modes == ["html", "csv", "json", "json-asff"]
         assert output_options.output_directory == arguments.output_directory
@@ -207,6 +210,7 @@ def test_set_provider_output_options_aws_no_output_filename(self):
         arguments.shodan = "test-api-key"
         arguments.only_logs = False
         arguments.unix_timestamp = False
+        arguments.send_sh_only_fails = True
 
         # Mock AWS Audit Info
         audit_info = self.set_mocked_aws_audit_info()
@@ -218,6 +222,7 @@ def test_set_provider_output_options_aws_no_output_filename(self):
         )
         assert isinstance(output_options, Aws_Output_Options)
         assert output_options.security_hub_enabled
+        assert output_options.send_sh_only_fails
         assert output_options.is_quiet
         assert output_options.output_modes == ["html", "csv", "json", "json-asff"]
         assert output_options.output_directory == arguments.output_directory
@@ -243,6 +248,7 @@ def test_set_provider_output_options_azure_domain(self):
         arguments.verbose = True
         arguments.only_logs = False
         arguments.unix_timestamp = False
+        arguments.shodan = "test-api-key"
 
         # Mock Azure Audit Info
         audit_info = self.set_mocked_azure_audit_info()
@@ -283,6 +289,7 @@ def test_set_provider_output_options_azure_tenant_ids(self):
         arguments.verbose = True
         arguments.only_logs = False
         arguments.unix_timestamp = False
+        arguments.shodan = "test-api-key"
 
         # Mock Azure Audit Info
         audit_info = self.set_mocked_azure_audit_info()
@@ -324,7 +331,7 @@ def test_azure_get_assessment_summary(self):
         }
         printed_subscriptions = []
         for key, value in audit_info.identity.subscriptions.items():
-            intermediate = key + " : " + value
+            intermediate = f"{key} : {value}"
             printed_subscriptions.append(intermediate)
         assert (
             get_assessment_summary(audit_info)
diff --git a/tests/providers/gcp/lib/audit_info_utils.py b/tests/providers/gcp/lib/audit_info_utils.py
new file mode 100644
index 00000000000..60a900cd63e
--- /dev/null
+++ b/tests/providers/gcp/lib/audit_info_utils.py
@@ -0,0 +1 @@
+GCP_PROJECT_ID = "123456789012"
diff --git a/tests/providers/gcp/services/apikeys/apikeys_api_restrictions_configured/apikeys_api_restrictions_configured_test.py b/tests/providers/gcp/services/apikeys/apikeys_api_restrictions_configured/apikeys_api_restrictions_configured_test.py
index c1145ec033f..45cca513c10 100644
--- a/tests/providers/gcp/services/apikeys/apikeys_api_restrictions_configured/apikeys_api_restrictions_configured_test.py
+++ b/tests/providers/gcp/services/apikeys/apikeys_api_restrictions_configured/apikeys_api_restrictions_configured_test.py
@@ -1,7 +1,7 @@
 from re import search
 from unittest import mock
 
-GCP_PROJECT_ID = "123456789012"
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
 
 
 class Test_apikeys_api_restrictions_configured:
diff --git a/tests/providers/gcp/services/apikeys/apikeys_key_exists/apikeys_key_exists_test.py b/tests/providers/gcp/services/apikeys/apikeys_key_exists/apikeys_key_exists_test.py
index 9160caf7bf0..b6449c99bf2 100644
--- a/tests/providers/gcp/services/apikeys/apikeys_key_exists/apikeys_key_exists_test.py
+++ b/tests/providers/gcp/services/apikeys/apikeys_key_exists/apikeys_key_exists_test.py
@@ -1,7 +1,7 @@
 from re import search
 from unittest import mock
 
-GCP_PROJECT_ID = "123456789012"
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
 
 
 class Test_apikeys_key_exists:
diff --git a/tests/providers/gcp/services/apikeys/apikeys_key_rotated_in_90_days/apikeys_key_rotated_in_90_days_test.py b/tests/providers/gcp/services/apikeys/apikeys_key_rotated_in_90_days/apikeys_key_rotated_in_90_days_test.py
index 82267bd1533..e531c00ebc8 100644
--- a/tests/providers/gcp/services/apikeys/apikeys_key_rotated_in_90_days/apikeys_key_rotated_in_90_days_test.py
+++ b/tests/providers/gcp/services/apikeys/apikeys_key_rotated_in_90_days/apikeys_key_rotated_in_90_days_test.py
@@ -2,7 +2,7 @@
 from re import search
 from unittest import mock
 
-GCP_PROJECT_ID = "123456789012"
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
 
 
 class Test_apikeys_key_rotated_in_90_days:
diff --git a/tests/providers/gcp/services/artifacts/artifacts_container_analysis_enabled/artifacts_container_analysis_enabled_test.py b/tests/providers/gcp/services/artifacts/artifacts_container_analysis_enabled/artifacts_container_analysis_enabled_test.py
new file mode 100644
index 00000000000..92d4b941417
--- /dev/null
+++ b/tests/providers/gcp/services/artifacts/artifacts_container_analysis_enabled/artifacts_container_analysis_enabled_test.py
@@ -0,0 +1,68 @@
+from unittest import mock
+
+from prowler.providers.gcp.services.serviceusage.serviceusage_service import Service
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
+
+
+class Test_artifacts_container_analysis_enabled:
+    def test_serviceusage_no_active_services(self):
+        serviceusage_client = mock.MagicMock
+        serviceusage_client.active_services = {}
+        serviceusage_client.project_ids = [GCP_PROJECT_ID]
+        serviceusage_client.region = "global"
+
+        with mock.patch(
+            "prowler.providers.gcp.services.artifacts.artifacts_container_analysis_enabled.artifacts_container_analysis_enabled.serviceusage_client",
+            new=serviceusage_client,
+        ):
+            from prowler.providers.gcp.services.artifacts.artifacts_container_analysis_enabled.artifacts_container_analysis_enabled import (
+                artifacts_container_analysis_enabled,
+            )
+
+            check = artifacts_container_analysis_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"AR Container Analysis is not enabled in project {GCP_PROJECT_ID}."
+            )
+            assert result[0].resource_id == "containeranalysis.googleapis.com"
+            assert result[0].project_id == GCP_PROJECT_ID
+            assert result[0].resource_name == "AR Container Analysis"
+            assert result[0].location == serviceusage_client.region
+
+    def test_serviceusage_active_cloudasset(self):
+        serviceusage_client = mock.MagicMock
+        serviceusage_client.active_services = {
+            GCP_PROJECT_ID: [
+                Service(
+                    name="containeranalysis.googleapis.com",
+                    title="AR Container Analysis",
+                    project_id=GCP_PROJECT_ID,
+                )
+            ]
+        }
+        serviceusage_client.project_ids = [GCP_PROJECT_ID]
+        serviceusage_client.region = "global"
+
+        with mock.patch(
+            "prowler.providers.gcp.services.artifacts.artifacts_container_analysis_enabled.artifacts_container_analysis_enabled.serviceusage_client",
+            new=serviceusage_client,
+        ):
+            from prowler.providers.gcp.services.artifacts.artifacts_container_analysis_enabled.artifacts_container_analysis_enabled import (
+                artifacts_container_analysis_enabled,
+            )
+
+            check = artifacts_container_analysis_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"AR Container Analysis is enabled in project {GCP_PROJECT_ID}."
+            )
+            assert result[0].resource_id == "containeranalysis.googleapis.com"
+            assert result[0].project_id == GCP_PROJECT_ID
+            assert result[0].resource_name == "AR Container Analysis"
+            assert result[0].location == serviceusage_client.region
diff --git a/tests/providers/gcp/services/bigquery/bigquery_dataset_public_access/bigquery_dataset_public_access_test.py b/tests/providers/gcp/services/bigquery/bigquery_dataset_public_access/bigquery_dataset_public_access_test.py
index 752751294bc..b4a5929267d 100644
--- a/tests/providers/gcp/services/bigquery/bigquery_dataset_public_access/bigquery_dataset_public_access_test.py
+++ b/tests/providers/gcp/services/bigquery/bigquery_dataset_public_access/bigquery_dataset_public_access_test.py
@@ -1,6 +1,6 @@
 from unittest import mock
 
-GCP_PROJECT_ID = "123456789012"
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
 
 
 class Test_bigquery_dataset_public_access:
diff --git a/tests/providers/gcp/services/compute/compute_block_project_wide_ssh_keys_disabled/compute_block_project_wide_ssh_keys_disabled_test.py b/tests/providers/gcp/services/compute/compute_block_project_wide_ssh_keys_disabled/compute_block_project_wide_ssh_keys_disabled_test.py
index 8b6991879e4..a7556b6e8dc 100644
--- a/tests/providers/gcp/services/compute/compute_block_project_wide_ssh_keys_disabled/compute_block_project_wide_ssh_keys_disabled_test.py
+++ b/tests/providers/gcp/services/compute/compute_block_project_wide_ssh_keys_disabled/compute_block_project_wide_ssh_keys_disabled_test.py
@@ -1,7 +1,7 @@
 from re import search
 from unittest import mock
 
-GCP_PROJECT_ID = "123456789012"
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
 
 
 class Test_compute_instance_block_project_wide_ssh_keys_disabled:
diff --git a/tests/providers/gcp/services/compute/compute_default_service_account_in_use/compute_default_service_account_in_use_test.py b/tests/providers/gcp/services/compute/compute_default_service_account_in_use/compute_default_service_account_in_use_test.py
index 2e63b975ac8..8a70974a245 100644
--- a/tests/providers/gcp/services/compute/compute_default_service_account_in_use/compute_default_service_account_in_use_test.py
+++ b/tests/providers/gcp/services/compute/compute_default_service_account_in_use/compute_default_service_account_in_use_test.py
@@ -1,7 +1,7 @@
 from re import search
 from unittest import mock
 
-GCP_PROJECT_ID = "123456789012"
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
 
 
 class Test_compute_instance_default_service_account_in_use:
diff --git a/tests/providers/gcp/services/compute/compute_default_service_account_in_use_with_full_api_access/compute_default_service_account_in_use_with_full_api_access_test.py b/tests/providers/gcp/services/compute/compute_default_service_account_in_use_with_full_api_access/compute_default_service_account_in_use_with_full_api_access_test.py
index d31580907f5..85048c06d19 100644
--- a/tests/providers/gcp/services/compute/compute_default_service_account_in_use_with_full_api_access/compute_default_service_account_in_use_with_full_api_access_test.py
+++ b/tests/providers/gcp/services/compute/compute_default_service_account_in_use_with_full_api_access/compute_default_service_account_in_use_with_full_api_access_test.py
@@ -1,6 +1,6 @@
 from unittest import mock
 
-GCP_PROJECT_ID = "123456789012"
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
 
 
 class Test_compute_instance_default_service_account_in_use_with_full_api_access:
diff --git a/tests/providers/gcp/services/compute/compute_encryption_with_csek_is_disabled/compute_encryption_with_csek_is_disabled_test.py b/tests/providers/gcp/services/compute/compute_encryption_with_csek_is_disabled/compute_encryption_with_csek_is_disabled_test.py
index 4d24f2d76db..56914fd117e 100644
--- a/tests/providers/gcp/services/compute/compute_encryption_with_csek_is_disabled/compute_encryption_with_csek_is_disabled_test.py
+++ b/tests/providers/gcp/services/compute/compute_encryption_with_csek_is_disabled/compute_encryption_with_csek_is_disabled_test.py
@@ -1,7 +1,7 @@
 from re import search
 from unittest import mock
 
-GCP_PROJECT_ID = "123456789012"
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
 
 
 class Test_compute_instance_encryption_with_csek_enabled:
diff --git a/tests/providers/gcp/services/compute/compute_instance_confidential_computing_enabled/compute_instance_confidential_computing_enabled_test.py b/tests/providers/gcp/services/compute/compute_instance_confidential_computing_enabled/compute_instance_confidential_computing_enabled_test.py
index a64284b95ba..b750378e773 100644
--- a/tests/providers/gcp/services/compute/compute_instance_confidential_computing_enabled/compute_instance_confidential_computing_enabled_test.py
+++ b/tests/providers/gcp/services/compute/compute_instance_confidential_computing_enabled/compute_instance_confidential_computing_enabled_test.py
@@ -1,7 +1,7 @@
 from re import search
 from unittest import mock
 
-GCP_PROJECT_ID = "123456789012"
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
 
 
 class Test_compute_instance_confidential_computing_enabled:
diff --git a/tests/providers/gcp/services/compute/compute_ip_forwarding_is_enabled/compute_ip_forwarding_is_enabled_test.py b/tests/providers/gcp/services/compute/compute_ip_forwarding_is_enabled/compute_ip_forwarding_is_enabled_test.py
index 53740aeb580..2eb604f0f70 100644
--- a/tests/providers/gcp/services/compute/compute_ip_forwarding_is_enabled/compute_ip_forwarding_is_enabled_test.py
+++ b/tests/providers/gcp/services/compute/compute_ip_forwarding_is_enabled/compute_ip_forwarding_is_enabled_test.py
@@ -1,7 +1,7 @@
 from re import search
 from unittest import mock
 
-GCP_PROJECT_ID = "123456789012"
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
 
 
 class Test_compute_instance_ip_forwarding_is_enabled:
diff --git a/tests/providers/gcp/services/compute/compute_loadbalancer_logging_enabled/compute_loadbalancer_logging_enabled_test.py b/tests/providers/gcp/services/compute/compute_loadbalancer_logging_enabled/compute_loadbalancer_logging_enabled_test.py
index 48cf8956ff8..a2c6d8c4466 100644
--- a/tests/providers/gcp/services/compute/compute_loadbalancer_logging_enabled/compute_loadbalancer_logging_enabled_test.py
+++ b/tests/providers/gcp/services/compute/compute_loadbalancer_logging_enabled/compute_loadbalancer_logging_enabled_test.py
@@ -1,7 +1,7 @@
 from re import search
 from unittest import mock
 
-GCP_PROJECT_ID = "123456789012"
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
 
 
 class Test_compute_loadbalancer_logging_enabled:
diff --git a/tests/providers/gcp/services/compute/compute_network_dns_logging_enabled/compute_network_dns_logging_enabled_test.py b/tests/providers/gcp/services/compute/compute_network_dns_logging_enabled/compute_network_dns_logging_enabled_test.py
index 8e1ff2fb259..67e62eee46d 100644
--- a/tests/providers/gcp/services/compute/compute_network_dns_logging_enabled/compute_network_dns_logging_enabled_test.py
+++ b/tests/providers/gcp/services/compute/compute_network_dns_logging_enabled/compute_network_dns_logging_enabled_test.py
@@ -2,8 +2,7 @@
 from unittest import mock
 
 from prowler.providers.gcp.services.dns.dns_service import Policy
-
-GCP_PROJECT_ID = "123456789012"
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
 
 
 class Test_compute_network_dns_logging_enabled:
diff --git a/tests/providers/gcp/services/compute/compute_network_not_legacy/compute_network_not_legacy_test.py b/tests/providers/gcp/services/compute/compute_network_not_legacy/compute_network_not_legacy_test.py
index 234b8315a9f..dfcbeb2b918 100644
--- a/tests/providers/gcp/services/compute/compute_network_not_legacy/compute_network_not_legacy_test.py
+++ b/tests/providers/gcp/services/compute/compute_network_not_legacy/compute_network_not_legacy_test.py
@@ -1,7 +1,7 @@
 from re import search
 from unittest import mock
 
-GCP_PROJECT_ID = "123456789012"
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
 
 
 class Test_compute_network_not_legacy:
diff --git a/tests/providers/gcp/services/compute/compute_project_os_login_enabled/compute_project_os_login_enabled_test.py b/tests/providers/gcp/services/compute/compute_project_os_login_enabled/compute_project_os_login_enabled_test.py
index 6512a9c42ec..116cc738b35 100644
--- a/tests/providers/gcp/services/compute/compute_project_os_login_enabled/compute_project_os_login_enabled_test.py
+++ b/tests/providers/gcp/services/compute/compute_project_os_login_enabled/compute_project_os_login_enabled_test.py
@@ -1,7 +1,7 @@
 from re import search
 from unittest import mock
 
-GCP_PROJECT_ID = "123456789012"
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
 
 
 class Test_compute_project_os_login_enabled:
diff --git a/tests/providers/gcp/services/compute/compute_rdp_access_from_the_internet_allowed/compute_rdp_access_from_the_internet_allowed_test.py b/tests/providers/gcp/services/compute/compute_rdp_access_from_the_internet_allowed/compute_rdp_access_from_the_internet_allowed_test.py
index 50d9225f874..85d599a21b8 100644
--- a/tests/providers/gcp/services/compute/compute_rdp_access_from_the_internet_allowed/compute_rdp_access_from_the_internet_allowed_test.py
+++ b/tests/providers/gcp/services/compute/compute_rdp_access_from_the_internet_allowed/compute_rdp_access_from_the_internet_allowed_test.py
@@ -1,7 +1,7 @@
 from re import search
 from unittest import mock
 
-GCP_PROJECT_ID = "123456789012"
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
 
 
 class Test_compute_firewall_rdp_access_from_the_internet_allowed:
diff --git a/tests/providers/gcp/services/compute/compute_serial_ports_in_use/compute_serial_ports_in_use_test.py b/tests/providers/gcp/services/compute/compute_serial_ports_in_use/compute_serial_ports_in_use_test.py
index 10ac1446655..49e4f051d9b 100644
--- a/tests/providers/gcp/services/compute/compute_serial_ports_in_use/compute_serial_ports_in_use_test.py
+++ b/tests/providers/gcp/services/compute/compute_serial_ports_in_use/compute_serial_ports_in_use_test.py
@@ -1,7 +1,7 @@
 from re import search
 from unittest import mock
 
-GCP_PROJECT_ID = "123456789012"
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
 
 
 class Test_compute_instance_serial_ports_in_use:
diff --git a/tests/providers/gcp/services/compute/compute_shielded_vm_enabled/compute_shielded_vm_enabled_test.py b/tests/providers/gcp/services/compute/compute_shielded_vm_enabled/compute_shielded_vm_enabled_test.py
index 7e134ecfe08..6e8ace8202c 100644
--- a/tests/providers/gcp/services/compute/compute_shielded_vm_enabled/compute_shielded_vm_enabled_test.py
+++ b/tests/providers/gcp/services/compute/compute_shielded_vm_enabled/compute_shielded_vm_enabled_test.py
@@ -1,7 +1,7 @@
 from re import search
 from unittest import mock
 
-GCP_PROJECT_ID = "123456789012"
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
 
 
 class Test_compute_instance_shielded_vm_enabled:
diff --git a/tests/providers/gcp/services/compute/compute_ssh_access_from_the_internet_allowed/compute_ssh_access_from_the_internet_allowed_test.py b/tests/providers/gcp/services/compute/compute_ssh_access_from_the_internet_allowed/compute_ssh_access_from_the_internet_allowed_test.py
index 892ae55fd83..482d24d3c2f 100644
--- a/tests/providers/gcp/services/compute/compute_ssh_access_from_the_internet_allowed/compute_ssh_access_from_the_internet_allowed_test.py
+++ b/tests/providers/gcp/services/compute/compute_ssh_access_from_the_internet_allowed/compute_ssh_access_from_the_internet_allowed_test.py
@@ -1,7 +1,7 @@
 from re import search
 from unittest import mock
 
-GCP_PROJECT_ID = "123456789012"
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
 
 
 class Test_compute_firewall_ssh_access_from_the_internet_allowed:
diff --git a/tests/providers/gcp/services/compute/compute_subnet_flow_logs_enabled/compute_subnet_flow_logs_enabled_test.py b/tests/providers/gcp/services/compute/compute_subnet_flow_logs_enabled/compute_subnet_flow_logs_enabled_test.py
index 3f51e02d93b..ca8a9b0a2bf 100644
--- a/tests/providers/gcp/services/compute/compute_subnet_flow_logs_enabled/compute_subnet_flow_logs_enabled_test.py
+++ b/tests/providers/gcp/services/compute/compute_subnet_flow_logs_enabled/compute_subnet_flow_logs_enabled_test.py
@@ -1,7 +1,7 @@
 from re import search
 from unittest import mock
 
-GCP_PROJECT_ID = "123456789012"
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
 
 
 class Test_compute_subnet_flow_logs_enabled:
diff --git a/tests/providers/gcp/services/dataproc/dataproc_encrypted_with_cmks_disabled/dataproc_encrypted_with_cmks_disabled_test.py b/tests/providers/gcp/services/dataproc/dataproc_encrypted_with_cmks_disabled/dataproc_encrypted_with_cmks_disabled_test.py
index a0b949a0504..cf2190c36b4 100644
--- a/tests/providers/gcp/services/dataproc/dataproc_encrypted_with_cmks_disabled/dataproc_encrypted_with_cmks_disabled_test.py
+++ b/tests/providers/gcp/services/dataproc/dataproc_encrypted_with_cmks_disabled/dataproc_encrypted_with_cmks_disabled_test.py
@@ -1,7 +1,7 @@
 from re import search
 from unittest import mock
 
-GCP_PROJECT_ID = "123456789012"
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
 
 
 class Test_dataproc_encrypted_with_cmks_disabled:
diff --git a/tests/providers/gcp/services/dns/dns_dnssec_disabled/dns_dnssec_disabled_test.py b/tests/providers/gcp/services/dns/dns_dnssec_disabled/dns_dnssec_disabled_test.py
index 9da614952ab..d0f59413e2c 100644
--- a/tests/providers/gcp/services/dns/dns_dnssec_disabled/dns_dnssec_disabled_test.py
+++ b/tests/providers/gcp/services/dns/dns_dnssec_disabled/dns_dnssec_disabled_test.py
@@ -1,7 +1,7 @@
 from re import search
 from unittest import mock
 
-GCP_PROJECT_ID = "123456789012"
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
 
 
 class Test_dns_dnssec_disabled:
diff --git a/tests/providers/gcp/services/dns/dns_rsasha1_in_use_to_key_sign_in_dnssec/dns_rsasha1_in_use_to_key_sign_in_dnssec_test.py b/tests/providers/gcp/services/dns/dns_rsasha1_in_use_to_key_sign_in_dnssec/dns_rsasha1_in_use_to_key_sign_in_dnssec_test.py
index 704f5a68ac9..0ca8f39a0a5 100644
--- a/tests/providers/gcp/services/dns/dns_rsasha1_in_use_to_key_sign_in_dnssec/dns_rsasha1_in_use_to_key_sign_in_dnssec_test.py
+++ b/tests/providers/gcp/services/dns/dns_rsasha1_in_use_to_key_sign_in_dnssec/dns_rsasha1_in_use_to_key_sign_in_dnssec_test.py
@@ -1,7 +1,7 @@
 from re import search
 from unittest import mock
 
-GCP_PROJECT_ID = "123456789012"
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
 
 
 class Test_dns_rsasha1_in_use_to_key_sign_in_dnssec:
diff --git a/tests/providers/gcp/services/dns/dns_rsasha1_in_use_to_zone_sign_in_dnssec/dns_rsasha1_in_use_to_zone_sign_in_dnssec_test.py b/tests/providers/gcp/services/dns/dns_rsasha1_in_use_to_zone_sign_in_dnssec/dns_rsasha1_in_use_to_zone_sign_in_dnssec_test.py
index e60e2866c19..638017b37ef 100644
--- a/tests/providers/gcp/services/dns/dns_rsasha1_in_use_to_zone_sign_in_dnssec/dns_rsasha1_in_use_to_zone_sign_in_dnssec_test.py
+++ b/tests/providers/gcp/services/dns/dns_rsasha1_in_use_to_zone_sign_in_dnssec/dns_rsasha1_in_use_to_zone_sign_in_dnssec_test.py
@@ -1,7 +1,7 @@
 from re import search
 from unittest import mock
 
-GCP_PROJECT_ID = "123456789012"
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
 
 
 class Test_dns_rsasha1_in_use_to_zone_sign_in_dnssec:
diff --git a/tests/providers/gcp/services/gcr/gcr_container_scanning_enabled/gcr_container_scanning_enabled_test.py b/tests/providers/gcp/services/gcr/gcr_container_scanning_enabled/gcr_container_scanning_enabled_test.py
new file mode 100644
index 00000000000..da28d67e23e
--- /dev/null
+++ b/tests/providers/gcp/services/gcr/gcr_container_scanning_enabled/gcr_container_scanning_enabled_test.py
@@ -0,0 +1,68 @@
+from unittest import mock
+
+from prowler.providers.gcp.services.serviceusage.serviceusage_service import Service
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
+
+
+class Test_gcr_container_scanning_enabled:
+    def test_serviceusage_no_active_services(self):
+        serviceusage_client = mock.MagicMock
+        serviceusage_client.active_services = {}
+        serviceusage_client.project_ids = [GCP_PROJECT_ID]
+        serviceusage_client.region = "global"
+
+        with mock.patch(
+            "prowler.providers.gcp.services.gcr.gcr_container_scanning_enabled.gcr_container_scanning_enabled.serviceusage_client",
+            new=serviceusage_client,
+        ):
+            from prowler.providers.gcp.services.gcr.gcr_container_scanning_enabled.gcr_container_scanning_enabled import (
+                gcr_container_scanning_enabled,
+            )
+
+            check = gcr_container_scanning_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"GCR Container Scanning is not enabled in project {GCP_PROJECT_ID}."
+            )
+            assert result[0].resource_id == "containerscanning.googleapis.com"
+            assert result[0].project_id == GCP_PROJECT_ID
+            assert result[0].resource_name == "GCR Container Scanning"
+            assert result[0].location == serviceusage_client.region
+
+    def test_serviceusage_active_cloudasset(self):
+        serviceusage_client = mock.MagicMock
+        serviceusage_client.active_services = {
+            GCP_PROJECT_ID: [
+                Service(
+                    name="containerscanning.googleapis.com",
+                    title="GCR Container Scanning",
+                    project_id=GCP_PROJECT_ID,
+                )
+            ]
+        }
+        serviceusage_client.project_ids = [GCP_PROJECT_ID]
+        serviceusage_client.region = "global"
+
+        with mock.patch(
+            "prowler.providers.gcp.services.gcr.gcr_container_scanning_enabled.gcr_container_scanning_enabled.serviceusage_client",
+            new=serviceusage_client,
+        ):
+            from prowler.providers.gcp.services.gcr.gcr_container_scanning_enabled.gcr_container_scanning_enabled import (
+                gcr_container_scanning_enabled,
+            )
+
+            check = gcr_container_scanning_enabled()
+            result = check.execute()
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"GCR Container Scanning is enabled in project {GCP_PROJECT_ID}."
+            )
+            assert result[0].resource_id == "containerscanning.googleapis.com"
+            assert result[0].project_id == GCP_PROJECT_ID
+            assert result[0].resource_name == "GCR Container Scanning"
+            assert result[0].location == serviceusage_client.region
diff --git a/tests/providers/gcp/services/gke/gke_cluster_no_default_service_account/gke_cluster_no_default_service_account_test.py b/tests/providers/gcp/services/gke/gke_cluster_no_default_service_account/gke_cluster_no_default_service_account_test.py
new file mode 100644
index 00000000000..68f1c68f589
--- /dev/null
+++ b/tests/providers/gcp/services/gke/gke_cluster_no_default_service_account/gke_cluster_no_default_service_account_test.py
@@ -0,0 +1,196 @@
+from unittest import mock
+
+from prowler.providers.gcp.services.gke.gke_service import Cluster, NodePool
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
+
+
+class Test_gke_cluster_no_default_service_account:
+    def test_gke_no_clusters(self):
+        gke_client = mock.MagicMock
+        gke_client.clusters = {}
+
+        with mock.patch(
+            "prowler.providers.gcp.services.gke.gke_cluster_no_default_service_account.gke_cluster_no_default_service_account.gke_client",
+            new=gke_client,
+        ):
+            from prowler.providers.gcp.services.gke.gke_cluster_no_default_service_account.gke_cluster_no_default_service_account import (
+                gke_cluster_no_default_service_account,
+            )
+
+            check = gke_cluster_no_default_service_account()
+            result = check.execute()
+            assert len(result) == 0
+
+    def test_one_cluster_without_node_pool(self):
+
+        clusters = {
+            "123": Cluster(
+                name="test",
+                id="123",
+                location="eu-west-1",
+                service_account="default",
+                node_pools=[],
+                project_id=GCP_PROJECT_ID,
+            )
+        }
+
+        gke_client = mock.MagicMock
+        gke_client.project_ids = [GCP_PROJECT_ID]
+        gke_client.clusters = clusters
+        gke_client.region = "global"
+
+        with mock.patch(
+            "prowler.providers.gcp.services.gke.gke_cluster_no_default_service_account.gke_cluster_no_default_service_account.gke_client",
+            new=gke_client,
+        ):
+            from prowler.providers.gcp.services.gke.gke_cluster_no_default_service_account.gke_cluster_no_default_service_account import (
+                gke_cluster_no_default_service_account,
+            )
+
+            check = gke_cluster_no_default_service_account()
+            result = check.execute()
+
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"GKE cluster {clusters['123'].name} is using the Compute Engine default service account."
+            )
+            assert result[0].project_id == clusters["123"].project_id
+            assert result[0].resource_id == clusters["123"].id
+            assert result[0].resource_name == clusters["123"].name
+            assert result[0].location == clusters["123"].location
+
+    def test_one_cluster_without_node_pool_without_default_sa(self):
+
+        clusters = {
+            "123": Cluster(
+                name="test",
+                id="123",
+                location="eu-west-1",
+                service_account="1231231231",
+                node_pools=[],
+                project_id=GCP_PROJECT_ID,
+            )
+        }
+
+        gke_client = mock.MagicMock
+        gke_client.project_ids = [GCP_PROJECT_ID]
+        gke_client.clusters = clusters
+        gke_client.region = "global"
+
+        with mock.patch(
+            "prowler.providers.gcp.services.gke.gke_cluster_no_default_service_account.gke_cluster_no_default_service_account.gke_client",
+            new=gke_client,
+        ):
+            from prowler.providers.gcp.services.gke.gke_cluster_no_default_service_account.gke_cluster_no_default_service_account import (
+                gke_cluster_no_default_service_account,
+            )
+
+            check = gke_cluster_no_default_service_account()
+            result = check.execute()
+
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"GKE cluster {clusters['123'].name} is not using the Compute Engine default service account."
+            )
+            assert result[0].project_id == clusters["123"].project_id
+            assert result[0].resource_id == clusters["123"].id
+            assert result[0].resource_name == clusters["123"].name
+            assert result[0].location == clusters["123"].location
+
+    def test_one_cluster_with_node_pool_with_default_sa(self):
+
+        clusters = {
+            "123": Cluster(
+                name="test",
+                id="123",
+                location="eu-west-1",
+                service_account="default",
+                node_pools=[
+                    NodePool(
+                        name="test",
+                        locations=["eu-west-1"],
+                        service_account="default",
+                        project_id=GCP_PROJECT_ID,
+                    )
+                ],
+                project_id=GCP_PROJECT_ID,
+            )
+        }
+
+        gke_client = mock.MagicMock
+        gke_client.project_ids = [GCP_PROJECT_ID]
+        gke_client.clusters = clusters
+        gke_client.region = "global"
+
+        with mock.patch(
+            "prowler.providers.gcp.services.gke.gke_cluster_no_default_service_account.gke_cluster_no_default_service_account.gke_client",
+            new=gke_client,
+        ):
+            from prowler.providers.gcp.services.gke.gke_cluster_no_default_service_account.gke_cluster_no_default_service_account import (
+                gke_cluster_no_default_service_account,
+            )
+
+            check = gke_cluster_no_default_service_account()
+            result = check.execute()
+
+            assert len(result) == 1
+            assert result[0].status == "FAIL"
+            assert (
+                result[0].status_extended
+                == f"GKE cluster {clusters['123'].name} is using the Compute Engine default service account."
+            )
+            assert result[0].project_id == clusters["123"].project_id
+            assert result[0].resource_id == clusters["123"].id
+            assert result[0].resource_name == clusters["123"].name
+            assert result[0].location == clusters["123"].location
+
+    def test_one_cluster_with_node_pool_with_non_default_sa(self):
+
+        clusters = {
+            "123": Cluster(
+                name="test",
+                id="123",
+                location="eu-west-1",
+                service_account="default",
+                node_pools=[
+                    NodePool(
+                        name="test",
+                        locations=["eu-west-1"],
+                        service_account="123123123",
+                        project_id=GCP_PROJECT_ID,
+                    )
+                ],
+                project_id=GCP_PROJECT_ID,
+            )
+        }
+
+        gke_client = mock.MagicMock
+        gke_client.project_ids = [GCP_PROJECT_ID]
+        gke_client.clusters = clusters
+        gke_client.region = "global"
+
+        with mock.patch(
+            "prowler.providers.gcp.services.gke.gke_cluster_no_default_service_account.gke_cluster_no_default_service_account.gke_client",
+            new=gke_client,
+        ):
+            from prowler.providers.gcp.services.gke.gke_cluster_no_default_service_account.gke_cluster_no_default_service_account import (
+                gke_cluster_no_default_service_account,
+            )
+
+            check = gke_cluster_no_default_service_account()
+            result = check.execute()
+
+            assert len(result) == 1
+            assert result[0].status == "PASS"
+            assert (
+                result[0].status_extended
+                == f"GKE cluster {clusters['123'].name} is not using the Compute Engine default service account."
+            )
+            assert result[0].project_id == clusters["123"].project_id
+            assert result[0].resource_id == clusters["123"].id
+            assert result[0].resource_name == clusters["123"].name
+            assert result[0].location == clusters["123"].location
diff --git a/tests/providers/gcp/services/iam/iam_account_access_approval_enabled/iam_account_access_approval_enabled_test.py b/tests/providers/gcp/services/iam/iam_account_access_approval_enabled/iam_account_access_approval_enabled_test.py
index 1aa512922fc..1d028322264 100644
--- a/tests/providers/gcp/services/iam/iam_account_access_approval_enabled/iam_account_access_approval_enabled_test.py
+++ b/tests/providers/gcp/services/iam/iam_account_access_approval_enabled/iam_account_access_approval_enabled_test.py
@@ -2,8 +2,7 @@
 from unittest import mock
 
 from prowler.providers.gcp.services.iam.iam_service import Setting
-
-GCP_PROJECT_ID = "123456789012"
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
 
 
 class Test_iam_account_access_approval_enabled:
diff --git a/tests/providers/gcp/services/iam/iam_audit_logs_enabled/iam_audit_logs_enabled_test.py b/tests/providers/gcp/services/iam/iam_audit_logs_enabled/iam_audit_logs_enabled_test.py
index 1b01c0ee351..446acebd3c9 100644
--- a/tests/providers/gcp/services/iam/iam_audit_logs_enabled/iam_audit_logs_enabled_test.py
+++ b/tests/providers/gcp/services/iam/iam_audit_logs_enabled/iam_audit_logs_enabled_test.py
@@ -1,7 +1,7 @@
 from re import search
 from unittest import mock
 
-GCP_PROJECT_ID = "123456789012"
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
 
 
 class Test_iam_audit_logs_enabled:
diff --git a/tests/providers/gcp/services/serviceusage/serviceusage_cloudasset_inventory_enabled/serviceusage_cloudasset_inventory_enabled_test.py b/tests/providers/gcp/services/iam/iam_cloud_asset_inventory_enabled/iam_cloud_asset_inventory_enabled_test.py
similarity index 59%
rename from tests/providers/gcp/services/serviceusage/serviceusage_cloudasset_inventory_enabled/serviceusage_cloudasset_inventory_enabled_test.py
rename to tests/providers/gcp/services/iam/iam_cloud_asset_inventory_enabled/iam_cloud_asset_inventory_enabled_test.py
index 026e9f83005..f4876f3d11d 100644
--- a/tests/providers/gcp/services/serviceusage/serviceusage_cloudasset_inventory_enabled/serviceusage_cloudasset_inventory_enabled_test.py
+++ b/tests/providers/gcp/services/iam/iam_cloud_asset_inventory_enabled/iam_cloud_asset_inventory_enabled_test.py
@@ -1,4 +1,3 @@
-from re import search
 from unittest import mock
 
 from prowler.providers.gcp.services.serviceusage.serviceusage_service import Service
@@ -6,7 +5,7 @@
 GCP_PROJECT_ID = "123456789012"
 
 
-class Test_serviceusage_cloudasset_inventory_enabled:
+class Test_iam_cloud_asset_inventory_enabled:
     def test_serviceusage_no_active_services(self):
         serviceusage_client = mock.MagicMock
         serviceusage_client.active_services = {}
@@ -14,20 +13,20 @@ def test_serviceusage_no_active_services(self):
         serviceusage_client.region = "global"
 
         with mock.patch(
-            "prowler.providers.gcp.services.serviceusage.serviceusage_cloudasset_inventory_enabled.serviceusage_cloudasset_inventory_enabled.serviceusage_client",
+            "prowler.providers.gcp.services.iam.iam_cloud_asset_inventory_enabled.iam_cloud_asset_inventory_enabled.serviceusage_client",
             new=serviceusage_client,
         ):
-            from prowler.providers.gcp.services.serviceusage.serviceusage_cloudasset_inventory_enabled.serviceusage_cloudasset_inventory_enabled import (
-                serviceusage_cloudasset_inventory_enabled,
+            from prowler.providers.gcp.services.iam.iam_cloud_asset_inventory_enabled.iam_cloud_asset_inventory_enabled import (
+                iam_cloud_asset_inventory_enabled,
             )
 
-            check = serviceusage_cloudasset_inventory_enabled()
+            check = iam_cloud_asset_inventory_enabled()
             result = check.execute()
             assert len(result) == 1
             assert result[0].status == "FAIL"
-            assert search(
-                f"Cloud Asset Inventory is not enabled in project {GCP_PROJECT_ID}",
-                result[0].status_extended,
+            assert (
+                result[0].status_extended
+                == f"Cloud Asset Inventory is not enabled in project {GCP_PROJECT_ID}."
             )
             assert result[0].resource_id == "cloudasset.googleapis.com"
             assert result[0].project_id == GCP_PROJECT_ID
@@ -49,20 +48,20 @@ def test_serviceusage_active_cloudasset(self):
         serviceusage_client.region = "global"
 
         with mock.patch(
-            "prowler.providers.gcp.services.serviceusage.serviceusage_cloudasset_inventory_enabled.serviceusage_cloudasset_inventory_enabled.serviceusage_client",
+            "prowler.providers.gcp.services.iam.iam_cloud_asset_inventory_enabled.iam_cloud_asset_inventory_enabled.serviceusage_client",
             new=serviceusage_client,
         ):
-            from prowler.providers.gcp.services.serviceusage.serviceusage_cloudasset_inventory_enabled.serviceusage_cloudasset_inventory_enabled import (
-                serviceusage_cloudasset_inventory_enabled,
+            from prowler.providers.gcp.services.iam.iam_cloud_asset_inventory_enabled.iam_cloud_asset_inventory_enabled import (
+                iam_cloud_asset_inventory_enabled,
             )
 
-            check = serviceusage_cloudasset_inventory_enabled()
+            check = iam_cloud_asset_inventory_enabled()
             result = check.execute()
             assert len(result) == 1
             assert result[0].status == "PASS"
-            assert search(
-                f"Cloud Asset Inventory is enabled in project {GCP_PROJECT_ID}",
-                result[0].status_extended,
+            assert (
+                result[0].status_extended
+                == f"Cloud Asset Inventory is enabled in project {GCP_PROJECT_ID}."
             )
             assert result[0].resource_id == "cloudasset.googleapis.com"
             assert result[0].project_id == GCP_PROJECT_ID
diff --git a/tests/providers/gcp/services/iam/iam_no_service_roles_at_project_level/iam_no_service_roles_at_project_level_test.py b/tests/providers/gcp/services/iam/iam_no_service_roles_at_project_level/iam_no_service_roles_at_project_level_test.py
index 21518e6ef36..ec9cb716637 100644
--- a/tests/providers/gcp/services/iam/iam_no_service_roles_at_project_level/iam_no_service_roles_at_project_level_test.py
+++ b/tests/providers/gcp/services/iam/iam_no_service_roles_at_project_level/iam_no_service_roles_at_project_level_test.py
@@ -1,7 +1,7 @@
 from re import search
 from unittest import mock
 
-GCP_PROJECT_ID = "123456789012"
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
 
 
 class Test_iam_no_service_roles_at_project_level:
diff --git a/tests/providers/gcp/services/iam/iam_organization_essential_contacts_configured/iam_organization_essential_contacts_configured_test.py b/tests/providers/gcp/services/iam/iam_organization_essential_contacts_configured/iam_organization_essential_contacts_configured_test.py
index f42856b752d..e7c8377db53 100644
--- a/tests/providers/gcp/services/iam/iam_organization_essential_contacts_configured/iam_organization_essential_contacts_configured_test.py
+++ b/tests/providers/gcp/services/iam/iam_organization_essential_contacts_configured/iam_organization_essential_contacts_configured_test.py
@@ -3,8 +3,6 @@
 
 from prowler.providers.gcp.services.iam.iam_service import Organization
 
-GCP_PROJECT_ID = "123456789012"
-
 
 class Test_iam_organization_essential_contacts_configured:
     def test_iam_no_organizations(self):
diff --git a/tests/providers/gcp/services/iam/iam_role_kms_enforce_separation_of_duties/iam_role_kms_enforce_separation_of_duties_test.py b/tests/providers/gcp/services/iam/iam_role_kms_enforce_separation_of_duties/iam_role_kms_enforce_separation_of_duties_test.py
index 74c12ff0aa0..60551a14833 100644
--- a/tests/providers/gcp/services/iam/iam_role_kms_enforce_separation_of_duties/iam_role_kms_enforce_separation_of_duties_test.py
+++ b/tests/providers/gcp/services/iam/iam_role_kms_enforce_separation_of_duties/iam_role_kms_enforce_separation_of_duties_test.py
@@ -1,7 +1,7 @@
 from re import search
 from unittest import mock
 
-GCP_PROJECT_ID = "123456789012"
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
 
 
 class Test_iam_role_kms_enforce_separation_of_duties:
diff --git a/tests/providers/gcp/services/iam/iam_role_sa_enforce_separation_of_duties/iam_role_sa_enforce_separation_of_duties_test.py b/tests/providers/gcp/services/iam/iam_role_sa_enforce_separation_of_duties/iam_role_sa_enforce_separation_of_duties_test.py
index 78e9cc46ef8..29c6eadce75 100644
--- a/tests/providers/gcp/services/iam/iam_role_sa_enforce_separation_of_duties/iam_role_sa_enforce_separation_of_duties_test.py
+++ b/tests/providers/gcp/services/iam/iam_role_sa_enforce_separation_of_duties/iam_role_sa_enforce_separation_of_duties_test.py
@@ -1,7 +1,7 @@
 from re import search
 from unittest import mock
 
-GCP_PROJECT_ID = "123456789012"
+from tests.providers.gcp.lib.audit_info_utils import GCP_PROJECT_ID
 
 
 class Test_iam_role_sa_enforce_separation_of_duties:
diff --git a/tests/providers/kubernetes/kubernetes_provider_test.py b/tests/providers/kubernetes/kubernetes_provider_test.py
index 40f981e187a..39caeaed248 100644
--- a/tests/providers/kubernetes/kubernetes_provider_test.py
+++ b/tests/providers/kubernetes/kubernetes_provider_test.py
@@ -15,10 +15,6 @@ class TestKubernetesProvider:
     def test_setup_session(
         self,
         mock_list_kube_config_contexts,
-        mock_load_incluster_config,
-        mock_load_kube_config,
-        mock_api_client,
-        mock_rbac_api,
     ):
         # Mocking the return value of list_kube_config_contexts
         mock_list_kube_config_contexts.return_value = (
@@ -52,8 +48,6 @@ def test_setup_session(
     @patch("kubernetes.config.load_kube_config")
     def test_get_context_user_roles(
         self,
-        mock_load_kube_config,
-        mock_load_incluster_config,
         mock_list_kube_config_contexts,
         mock_rbac_api,
     ):
@@ -97,12 +91,7 @@ def test_get_context_user_roles(
     @patch("sys.stdout", new_callable=MagicMock)
     def test_print_credentials(
         self,
-        mock_stdout,
         mock_list_kube_config_contexts,
-        mock_load_incluster_config,
-        mock_load_kube_config,
-        mock_api_client,
-        mock_rbac_api,
     ):
         mock_list_kube_config_contexts.return_value = (
             [
@@ -143,8 +132,6 @@ def test_print_credentials(
     @patch("kubernetes.config.load_kube_config")
     def test_search_and_save_roles(
         self,
-        mock_load_kube_config,
-        mock_load_incluster_config,
         mock_list_kube_config_contexts,
         mock_rbac_api,
     ):
diff --git a/util/update_aws_services_regions.py b/util/update_aws_services_regions.py
index a0506eca098..7e3526531e9 100644
--- a/util/update_aws_services_regions.py
+++ b/util/update_aws_services_regions.py
@@ -48,6 +48,10 @@
 logging.info("Updating subservices and the services not present in the original matrix")
 # macie2 --> macie
 regions_by_service["services"]["macie2"] = regions_by_service["services"]["macie"]
+# cognito --> cognito-idp
+regions_by_service["services"]["cognito"] = regions_by_service["services"][
+    "cognito-idp"
+]
 # opensearch --> es
 regions_by_service["services"]["opensearch"] = regions_by_service["services"]["es"]
 # elbv2 --> elb